Path: blob/main/third_party/ply/test/yacc_badargs.py
6174 views
# -----------------------------------------------------------------------------1# yacc_badargs.py2#3# Rules with wrong # args4# -----------------------------------------------------------------------------5import sys6sys.tracebacklimit = 07sys.path.insert(0,"..")8import ply.yacc as yacc910from calclex import tokens1112# Parsing rules13precedence = (14('left','PLUS','MINUS'),15('left','TIMES','DIVIDE'),16('right','UMINUS'),17)1819# dictionary of names20names = { }2122def p_statement_assign(t,s):23'statement : NAME EQUALS expression'24names[t[1]] = t[3]2526def p_statement_expr():27'statement : expression'28print(t[1])2930def p_expression_binop(t):31'''expression : expression PLUS expression32| expression MINUS expression33| expression TIMES expression34| expression DIVIDE expression'''35if t[2] == '+' : t[0] = t[1] + t[3]36elif t[2] == '-': t[0] = t[1] - t[3]37elif t[2] == '*': t[0] = t[1] * t[3]38elif t[2] == '/': t[0] = t[1] / t[3]3940def p_expression_uminus(t):41'expression : MINUS expression %prec UMINUS'42t[0] = -t[2]4344def p_expression_group(t):45'expression : LPAREN expression RPAREN'46t[0] = t[2]4748def p_expression_number(t):49'expression : NUMBER'50t[0] = t[1]5152def p_expression_name(t):53'expression : NAME'54try:55t[0] = names[t[1]]56except LookupError:57print("Undefined name '%s'" % t[1])58t[0] = 05960def p_error(t):61print("Syntax error at '%s'" % t.value)6263yacc.yacc()64656667686970