From: Eric S. Raymond Date: Wed, 14 Jan 2004 07:20:38 +0000 (+0000) Subject: Ready to write statemet productions. X-Git-Tag: 1.0~202 X-Git-Url: http://thyrsus.com/gitweb/?a=commitdiff_plain;h=dd97739f19d0a399ca8b9ff766be4eea3386e299;p=mad.git Ready to write statemet productions. --- diff --git a/mad b/mad index 3c70032..ab73325 100755 --- 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