]> thyrsus.com Git - mad.git/commitdiff
We can parse subscript expressions now.
authorEric S. Raymond <esr@thyrsus,com>
Wed, 14 Jan 2004 06:41:12 +0000 (06:41 +0000)
committerEric S. Raymond <esr@thyrsus,com>
Wed, 14 Jan 2004 06:41:12 +0000 (06:41 +0000)
mad

diff --git a/mad b/mad
index 446b8c7dbe77228ec8d1e7a3f33294ed6e22362e..3c700329ec13a181011c120579876c21dbd08482 100755 (executable)
--- 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)