1
# -----------------------------------------------------------------------------
4
# p_rule not defined as a function
5
# -----------------------------------------------------------------------------
8
if ".." not in sys.path: sys.path.insert(0,"..")
9
import ply.yacc as yacc
11
from calclex import tokens
15
('left','PLUS','MINUS'),
16
('left','TIMES','DIVIDE'),
23
p_statement_assign = "Blah"
25
def p_statement_expr(t):
26
'statement : expression'
29
def p_expression_binop(t):
30
'''expression : expression PLUS expression
31
| expression MINUS expression
32
| expression TIMES expression
33
| expression DIVIDE expression'''
34
if t[2] == '+' : t[0] = t[1] + t[3]
35
elif t[2] == '-': t[0] = t[1] - t[3]
36
elif t[2] == '*': t[0] = t[1] * t[3]
37
elif t[2] == '/': t[0] = t[1] / t[3]
39
def p_expression_uminus(t):
40
'expression : MINUS expression %prec UMINUS'
43
def p_expression_group(t):
44
'expression : LPAREN expression RPAREN'
47
def p_expression_number(t):
51
def p_expression_name(t):
56
print("Undefined name '%s'" % t[1])
60
print("Syntax error at '%s'" % t.value)