~ubuntu-branches/ubuntu/vivid/emscripten/vivid

« back to all changes in this revision

Viewing changes to third_party/ply/test/yacc_badargs.py

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2013-05-02 13:11:51 UTC
  • Revision ID: package-import@ubuntu.com-20130502131151-q8dvteqr1ef2x7xz
Tags: upstream-1.4.1~20130504~adb56cb
ImportĀ upstreamĀ versionĀ 1.4.1~20130504~adb56cb

Show diffs side-by-side

added added

removed removed

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