New directory structure:
[gem5.git] / ext / ply / test / yacc_unused.py
1 # -----------------------------------------------------------------------------
2 # yacc_unused.py
3 #
4 # A grammar with an unused rule
5 # -----------------------------------------------------------------------------
6 import sys
7 sys.tracebacklimit = 0
8
9 from calclex import tokens
10
11 # Parsing rules
12 precedence = (
13 ('left','PLUS','MINUS'),
14 ('left','TIMES','DIVIDE'),
15 ('right','UMINUS'),
16 )
17
18 # dictionary of names
19 names = { }
20
21 def p_statement_assign(t):
22 'statement : NAME EQUALS expression'
23 names[t[1]] = t[3]
24
25 def p_statement_expr(t):
26 'statement : expression'
27 print t[1]
28
29 def p_expression_binop(t):
30 '''expression : expression PLUS expression
31 | expression MINUS expression
32 | expression TIMES expression
33 | expression DIVIDE expression'''
34 if t[2] == '+' : t[0] = t[1] + t[3]
35 elif t[2] == '-': t[0] = t[1] - t[3]
36 elif t[2] == '*': t[0] = t[1] * t[3]
37 elif t[3] == '/': t[0] = t[1] / t[3]
38
39 def p_expression_uminus(t):
40 'expression : MINUS expression %prec UMINUS'
41 t[0] = -t[2]
42
43 def p_expression_group(t):
44 'expression : LPAREN expression RPAREN'
45 t[0] = t[2]
46
47 def p_expression_number(t):
48 'expression : NUMBER'
49 t[0] = t[1]
50
51 def p_expression_name(t):
52 'expression : NAME'
53 try:
54 t[0] = names[t[1]]
55 except LookupError:
56 print "Undefined name '%s'" % t[1]
57 t[0] = 0
58
59 def p_expr_list(t):
60 'exprlist : exprlist COMMA expression'
61 pass
62
63 def p_expr_list_2(t):
64 'exprlist : expression'
65 pass
66
67
68 def p_error(t):
69 print "Syntax error at '%s'" % t.value
70
71 import yacc
72 yacc.yacc()
73
74
75
76