Path: blob/main/third_party/ply/test/yacc_badid.py
6175 views
# -----------------------------------------------------------------------------1# yacc_badid.py2#3# Attempt to define a rule with a bad-identifier name4# -----------------------------------------------------------------------------5import sys67if ".." not in sys.path: sys.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):23'statement : NAME EQUALS expression'24names[t[1]] = t[3]2526def p_statement_expr(t):27'statement : expression'28print(t[1])2930def p_statement_expr2(t):31'statement : bad&rule'32pass3334def p_badrule(t):35'bad&rule : expression'36pass373839def p_expression_binop(t):40'''expression : expression PLUS expression41| expression MINUS expression42| expression TIMES expression43| expression DIVIDE expression'''44if t[2] == '+' : t[0] = t[1] + t[3]45elif t[2] == '-': t[0] = t[1] - t[3]46elif t[2] == '*': t[0] = t[1] * t[3]47elif t[2] == '/': t[0] = t[1] / t[3]4849def p_expression_uminus(t):50'expression : MINUS expression %prec UMINUS'51t[0] = -t[2]5253def p_expression_group(t):54'expression : LPAREN expression RPAREN'55t[0] = t[2]5657def p_expression_number(t):58'expression : NUMBER'59t[0] = t[1]6061def p_expression_name(t):62'expression : NAME'63try:64t[0] = names[t[1]]65except LookupError:66print("Undefined name '%s'" % t[1])67t[0] = 06869def p_error(t):70pass7172yacc.yacc()73747576777879