#!/usr/bin/env python
tokens = (
+ 'TAB',
'COMMA',
'NAME','INTEGER', 'FLOAT',
'LPAREN','RPAREN',
# Tokens
+t_TAB = r'\t'
t_COMMA = r'\,'
t_ABS = r'\.ABS\.'
t_EXP = r'\.P\.'
('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
'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