python
import ply.lex as lex
tokens = (
'NAME',
'NUMBER',
)
t_NAME = r'[a-zA-Z_][a-zA-Z0-9_]*'
t_NUMBER = r'\d+'
t_ignore = ' \t'
def t_error(t):
print("Illegal character '%s'" % t.value[0])
t.lexer.skip(1)
lexer = lex.lex()
python
import ply.yacc as yacc
from lexer import tokens
def p_expression_plus(p):
'''expression : expression '+' expression'''
p[0] = p[1] + p[3]
def p_expression_number(p):
'''expression : NUMBER'''
p[0] = p[1]
def p_error(p):
print("Syntax error at '%s'" % p.value)
parser = yacc.yacc()
python
result = parser.parse("2 + 3")