From 8183119b0f60573d7615dcd2b58a58ef9a6b310c Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Wed, 14 Jan 2004 03:39:20 +0000 Subject: [PATCH] Fix the calculator to return parse trees. --- mad | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/mad b/mad index efa391e..d892624 100755 --- a/mad +++ b/mad @@ -54,30 +54,25 @@ precedence = ( ('right','UMINUS'), ) -# dictionary of names -names = { } - def p_statement_assign(t): 'statement : NAME EQUALS expression' - names[t[1]] = t[3] + t[0] = ('substitution', t[1], t[3]) def p_statement_expr(t): 'statement : expression' - print t[1] + t[0] = t[1] + print t[0] 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] + t[0] = (t[2], t[1], t[3]) def p_expression_uminus(t): 'expression : MINUS expression %prec UMINUS' - t[0] = -t[2] + t[0] = ('-', t[2]) def p_expression_group(t): 'expression : LPAREN expression RPAREN' @@ -89,11 +84,7 @@ def p_expression_number(t): def p_expression_name(t): 'expression : NAME' - try: - t[0] = names[t[1]] - except LookupError: - print "Undefined name '%s'" % t[1] - t[0] = 0 + t[0] = t[1] def p_error(t): print "Syntax error at '%s'" % t.value -- 2.43.0