yacc_unused.py revision 6498:e21e9ab5fad0
12330SN/A# ----------------------------------------------------------------------------- 213610Sgiacomo.gabrielli@arm.com# yacc_unused.py 39920Syasuko.eckert@amd.com# 48733Sgeoffrey.blake@arm.com# A grammar with an unused rule 58733Sgeoffrey.blake@arm.com# ----------------------------------------------------------------------------- 68733Sgeoffrey.blake@arm.comimport sys 78733Sgeoffrey.blake@arm.com 88733Sgeoffrey.blake@arm.comif ".." not in sys.path: sys.path.insert(0,"..") 98733Sgeoffrey.blake@arm.comimport ply.yacc as yacc 108733Sgeoffrey.blake@arm.com 118733Sgeoffrey.blake@arm.comfrom calclex import tokens 128733Sgeoffrey.blake@arm.com 138733Sgeoffrey.blake@arm.com# Parsing rules 148733Sgeoffrey.blake@arm.comprecedence = ( 152330SN/A ('left','PLUS','MINUS'), 162330SN/A ('left','TIMES','DIVIDE'), 172330SN/A ('right','UMINUS'), 182330SN/A ) 192330SN/A 202330SN/A# dictionary of names 212330SN/Anames = { } 222330SN/A 232330SN/Adef p_statement_assign(t): 242330SN/A 'statement : NAME EQUALS expression' 252330SN/A names[t[1]] = t[3] 262330SN/A 272330SN/Adef p_statement_expr(t): 282330SN/A 'statement : expression' 292330SN/A print(t[1]) 302330SN/A 312330SN/Adef p_expression_binop(t): 322330SN/A '''expression : expression PLUS expression 332330SN/A | expression MINUS expression 342330SN/A | expression TIMES expression 352330SN/A | expression DIVIDE expression''' 362330SN/A if t[2] == '+' : t[0] = t[1] + t[3] 372330SN/A elif t[2] == '-': t[0] = t[1] - t[3] 382330SN/A elif t[2] == '*': t[0] = t[1] * t[3] 392330SN/A elif t[2] == '/': t[0] = t[1] / t[3] 402689Sktlim@umich.edu 412689Sktlim@umich.edudef p_expression_uminus(t): 422330SN/A 'expression : MINUS expression %prec UMINUS' 432330SN/A t[0] = -t[2] 442683Sktlim@umich.edu 452683Sktlim@umich.edudef p_expression_group(t): 462315SN/A 'expression : LPAREN expression RPAREN' 472972Sgblack@eecs.umich.edu t[0] = t[2] 486658Snate@binkert.org 492315SN/Adef p_expression_number(t): 502683Sktlim@umich.edu 'expression : NUMBER' 512680SN/A t[0] = t[1] 528733Sgeoffrey.blake@arm.com 532315SN/Adef p_expression_name(t): 542315SN/A 'expression : NAME' 5513905Sgabeblack@google.com try: 5613905Sgabeblack@google.com t[0] = names[t[1]] 5713905Sgabeblack@google.com except LookupError: 583548Sgblack@eecs.umich.edu print("Undefined name '%s'" % t[1]) 599020Sgblack@eecs.umich.edu t[0] = 0 602330SN/A 612315SN/Adef p_expr_list(t): 622350SN/A 'exprlist : exprlist COMMA expression' 632680SN/A pass 642680SN/A 652683Sktlim@umich.edudef p_expr_list_2(t): 662683Sktlim@umich.edu 'exprlist : expression' 672683Sktlim@umich.edu pass 682683Sktlim@umich.edu 692350SN/A 702680SN/Adef p_error(t): 712680SN/A print("Syntax error at '%s'" % t.value) 722315SN/A 732315SN/Ayacc.yacc() 742680SN/A 752683Sktlim@umich.edu 762683Sktlim@umich.edu 772330SN/A 782315SN/A