Sha256: 7143298354057be1b17cfcf5277cae474024de6eea10f8bf5b2afa39b1647d20

Contents?: true

Size: 1.53 KB

Versions: 8

Compression:

Stored size: 1.53 KB

Contents

# -----------------------------------------------------------------------------
# yacc_error4.py
#
# Attempt to define a rule named 'error'
# -----------------------------------------------------------------------------
import sys

if ".." not in sys.path: sys.path.insert(0,"..")
import ply.yacc as yacc

from calclex import tokens

# Parsing rules
precedence = (
    ('left','PLUS','MINUS'),
    ('left','TIMES','DIVIDE'),
    ('right','UMINUS'),
    )

# dictionary of names
names = { }

def p_statement_assign(t):
    'statement : NAME EQUALS expression'
    names[t[1]] = t[3]

def p_statement_expr(t):
    'statement : expression'
    print(t[1])

def p_expression_binop(t):
    '''expression : expression PLUS expression
                  | expression MINUS expression
                  | expression TIMES expression
                  | expression DIVIDE expression'''
    if t[2] == '+'  : t[0] = t[1] + t[3]
    elif t[2] == '-': t[0] = t[1] - t[3]
    elif t[2] == '*': t[0] = t[1] * t[3]
    elif t[2] == '/': t[0] = t[1] / t[3]

def p_expression_uminus(t):
    'expression : MINUS expression %prec UMINUS'
    t[0] = -t[2]

def p_expression_group(t):
    'expression : LPAREN expression RPAREN'
    t[0] = t[2]

def p_expression_number(t):
    'expression : NUMBER'
    t[0] = t[1]

def p_expression_name(t):
    'expression : NAME'
    try:
        t[0] = names[t[1]]
    except LookupError:
        print("Undefined name '%s'" % t[1])
        t[0] = 0

def p_error_handler(t):
    'error : NAME'
    pass

def p_error(t):
    pass

yacc.yacc()




Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
webruby-0.2.7 modules/emscripten/third_party/ply/test/yacc_error4.py
webruby-0.2.5 modules/emscripten/third_party/ply/test/yacc_error4.py
webruby-0.2.4 modules/emscripten/third_party/ply/test/yacc_error4.py
webruby-0.2.2 modules/emscripten/third_party/ply/test/yacc_error4.py
webruby-0.2.1 modules/emscripten/third_party/ply/test/yacc_error4.py
webruby-0.1.2 modules/emscripten/third_party/ply/test/yacc_error4.py
webruby-0.1.1 modules/emscripten/third_party/ply/test/yacc_error4.py
webruby-0.1.0 modules/emscripten/third_party/ply/test/yacc_error4.py