1# This file contains definitions of expression grammar 2 3def p_expression_binop(t): 4 '''expression : expression PLUS expression 5 | expression MINUS expression 6 | expression TIMES expression 7 | expression DIVIDE expression''' 8 if t[2] == '+' : t[0] = t[1] + t[3] 9 elif t[2] == '-': t[0] = t[1] - t[3] 10 elif t[2] == '*': t[0] = t[1] * t[3] 11 elif t[2] == '/': t[0] = t[1] / t[3] 12 13def p_expression_uminus(t): 14 'expression : MINUS expression %prec UMINUS' 15 t[0] = -t[2] 16 17def p_expression_group(t): 18 'expression : LPAREN expression RPAREN' 19 t[0] = t[2] 20 21def p_expression_number(t): 22 'expression : NUMBER' 23 t[0] = t[1] 24 25def p_expression_name(t): 26 'expression : NAME' 27 try: 28 t[0] = names[t[1]] 29 except LookupError: 30 print("Undefined name '%s'" % t[1]) 31 t[0] = 0 32