From f4c7f9c67d4bcf9296faaf6252d21af1811fb1bb Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Wed, 14 Jan 2004 06:41:12 +0000 Subject: [PATCH] We can parse subscript expressions now. --- mad | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/mad b/mad index 446b8c7..3c70032 100755 --- a/mad +++ b/mad @@ -1,6 +1,7 @@ #!/usr/bin/env python tokens = ( + 'COMMA', 'NAME','INTEGER', 'FLOAT', 'LPAREN','RPAREN', 'PLUS','MINUS','TIMES','DIVIDE','EQUALS', @@ -11,6 +12,7 @@ tokens = ( # Tokens +t_COMMA = r'\,' t_ABS = r'\.ABS\.' t_EXP = r'\.P\.' t_NOT = r'\.NOT\.' @@ -125,6 +127,22 @@ def p_expression_float(t): 'expression : FLOAT' t[0] = ('float', t[1]) +def p_expression_subscript(t): + 'expression : NAME application' + t[0] = ('variable', t[1], tuple(t[2])) + +def p_expression_application(t): + "application : LPAREN inner_expression RPAREN" + t[0] = t[2] + +def p_expression_tail_empty(t): + "inner_expression : expression" + t[0] = [t[1]] + +def p_expression_tail_nonempty(t): + "inner_expression : inner_expression COMMA expression" + t[0] = t[1] + [t[3]] + def p_expression_name(t): 'expression : NAME' t[0] = ('variable', t[1]) @@ -137,9 +155,9 @@ yacc.yacc() import readline -while 1: +while True: try: - s = raw_input('calc > ') + s = raw_input('> ') except EOFError: break yacc.parse(s) -- 2.43.0