| # This file contains definitions of expression grammar |
| |
| def p_expression_binop(t): |
| '''expression : expression PLUS expression |
| | expression MINUS expression |
| | expression TIMES expression |
| | expression DIVIDE expression''' |
| if t[2] == '+' : t[0] = t[1] + t[3] |
| elif t[2] == '-': t[0] = t[1] - t[3] |
| elif t[2] == '*': t[0] = t[1] * t[3] |
| elif t[2] == '/': t[0] = t[1] / t[3] |
| |
| def p_expression_uminus(t): |
| 'expression : MINUS expression %prec UMINUS' |
| t[0] = -t[2] |
| |
| def p_expression_group(t): |
| 'expression : LPAREN expression RPAREN' |
| t[0] = t[2] |
| |
| def p_expression_number(t): |
| 'expression : NUMBER' |
| t[0] = t[1] |
| |
| def p_expression_name(t): |
| 'expression : NAME' |
| try: |
| t[0] = names[t[1]] |
| except LookupError: |
| print("Undefined name '%s'" % t[1]) |
| t[0] = 0 |