]> thyrsus.com Git - mad.git/commitdiff
Ready to write statemet productions.
authorEric S. Raymond <esr@thyrsus,com>
Wed, 14 Jan 2004 07:20:38 +0000 (07:20 +0000)
committerEric S. Raymond <esr@thyrsus,com>
Wed, 14 Jan 2004 07:20:38 +0000 (07:20 +0000)
mad

diff --git a/mad b/mad
index 3c700329ec13a181011c120579876c21dbd08482..ab7332529f83b70ebc0e1af0d1c37110a8f96e50 100755 (executable)
--- a/mad
+++ b/mad
@@ -1,6 +1,7 @@
 #!/usr/bin/env python
 
 tokens = (
+    'TAB',
     'COMMA',
     'NAME','INTEGER', 'FLOAT',
     'LPAREN','RPAREN',
@@ -12,6 +13,7 @@ tokens = (
 
 # Tokens
 
+t_TAB     = r'\t'
 t_COMMA   = r'\,'
 t_ABS     = r'\.ABS\.'
 t_EXP     = r'\.P\.'
@@ -67,15 +69,29 @@ precedence = (
     ('right', 'ABS', 'UPLUS')
     )
 
+cards = []
+
+# Program level
+
+def p_program(t):
+    '''program : card
+               | program card'''
+
+def p_card(t):
+    'card : TAB statement' 
+    cards.append((None, t[2]))
+
+def p_labeled_card(t):
+    'card : NAME TAB statement'
+    cards.append((t[1], t[3]))
+
+# Statement level
+
 def p_statement_assign(t):
     'statement : NAME EQUALS expression'
     t[0] = ('substitution', t[1], t[3])
-    print t[0]
 
-def p_statement_expr(t):
-    'statement : expression'
-    t[0] = t[1]
-    print t[0]
+# Expression parsing
 
 def p_expression_binop1(t):
     '''expression : expression PLUS expression
@@ -147,17 +163,15 @@ def p_expression_name(t):
     'expression : NAME'
     t[0] = ('variable', t[1])
 
+# Error handling
+
 def p_error(t):
     print "Syntax error at '%s'" % t.value
 
 import yacc
 yacc.yacc()
 
-import readline
+import sys
 
-while True:
-    try:
-        s = raw_input('> ')
-    except EOFError:
-        break
-    yacc.parse(s)
+yacc.parse(sys.stdin.read())
+print cards