1 # -----------------------------------------------------------------------------
4 # A grammar, but we forgot to import the tokens list
5 # -----------------------------------------------------------------------------
10 sys
.path
.insert(0,"..")
11 import ply
.yacc
as yacc
15 ('left','PLUS','MINUS'),
16 ('left','TIMES','DIVIDE'),
23 def p_statement_assign(t
):
24 'statement : NAME EQUALS expression'
27 def p_statement_expr(t
):
28 'statement : expression'
31 def p_expression_binop(t
):
32 '''expression : expression PLUS expression
33 | expression MINUS expression
34 | expression TIMES expression
35 | expression DIVIDE expression'''
36 if t
[2] == '+' : t
[0] = t
[1] + t
[3]
37 elif t
[2] == '-': t
[0] = t
[1] - t
[3]
38 elif t
[2] == '*': t
[0] = t
[1] * t
[3]
39 elif t
[3] == '/': t
[0] = t
[1] / t
[3]
41 def p_expression_uminus(t
):
42 'expression : MINUS expression %prec UMINUS'
45 def p_expression_group(t
):
46 'expression : LPAREN expression RPAREN'
49 def p_expression_number(t
):
53 def p_expression_name(t
):
58 print "Undefined name '%s'" % t
[1]
62 print "Syntax error at '%s'" % t
.value