yacc_error1.py revision 4479
16019Shines@cs.fsu.edu# ----------------------------------------------------------------------------- 210037SARM gem5 Developers# yacc_error1.py 37093Sgblack@eecs.umich.edu# 47093Sgblack@eecs.umich.edu# Bad p_error() function 57093Sgblack@eecs.umich.edu# ----------------------------------------------------------------------------- 67093Sgblack@eecs.umich.eduimport sys 77093Sgblack@eecs.umich.edusys.tracebacklimit = 0 87093Sgblack@eecs.umich.edu 97093Sgblack@eecs.umich.edusys.path.insert(0,"..") 107093Sgblack@eecs.umich.eduimport ply.yacc as yacc 117093Sgblack@eecs.umich.edu 127093Sgblack@eecs.umich.edufrom calclex import tokens 137093Sgblack@eecs.umich.edu 146019Shines@cs.fsu.edu# Parsing rules 156019Shines@cs.fsu.eduprecedence = ( 166019Shines@cs.fsu.edu ('left','PLUS','MINUS'), 176019Shines@cs.fsu.edu ('left','TIMES','DIVIDE'), 186019Shines@cs.fsu.edu ('right','UMINUS'), 196019Shines@cs.fsu.edu ) 206019Shines@cs.fsu.edu 216019Shines@cs.fsu.edu# dictionary of names 226019Shines@cs.fsu.edunames = { } 236019Shines@cs.fsu.edu 246019Shines@cs.fsu.edudef p_statement_assign(t): 256019Shines@cs.fsu.edu 'statement : NAME EQUALS expression' 266019Shines@cs.fsu.edu names[t[1]] = t[3] 276019Shines@cs.fsu.edu 286019Shines@cs.fsu.edudef p_statement_expr(t): 296019Shines@cs.fsu.edu 'statement : expression' 306019Shines@cs.fsu.edu print t[1] 316019Shines@cs.fsu.edu 326019Shines@cs.fsu.edudef p_expression_binop(t): 336019Shines@cs.fsu.edu '''expression : expression PLUS expression 346019Shines@cs.fsu.edu | expression MINUS expression 356019Shines@cs.fsu.edu | expression TIMES expression 366019Shines@cs.fsu.edu | expression DIVIDE expression''' 376019Shines@cs.fsu.edu if t[2] == '+' : t[0] = t[1] + t[3] 386019Shines@cs.fsu.edu elif t[2] == '-': t[0] = t[1] - t[3] 396019Shines@cs.fsu.edu elif t[2] == '*': t[0] = t[1] * t[3] 406019Shines@cs.fsu.edu elif t[3] == '/': t[0] = t[1] / t[3] 416735Sgblack@eecs.umich.edu 426735Sgblack@eecs.umich.edudef p_expression_uminus(t): 4310037SARM gem5 Developers 'expression : MINUS expression %prec UMINUS' 4410037SARM gem5 Developers t[0] = -t[2] 456019Shines@cs.fsu.edu 466019Shines@cs.fsu.edudef p_expression_group(t): 476019Shines@cs.fsu.edu 'expression : LPAREN expression RPAREN' 4810037SARM gem5 Developers t[0] = t[2] 4910037SARM gem5 Developers 5010037SARM gem5 Developersdef p_expression_number(t): 5110037SARM gem5 Developers 'expression : NUMBER' 528229Snate@binkert.org t[0] = t[1] 538229Snate@binkert.org 546019Shines@cs.fsu.edudef p_expression_name(t): 558232Snate@binkert.org 'expression : NAME' 568782Sgblack@eecs.umich.edu try: 576019Shines@cs.fsu.edu t[0] = names[t[1]] 586019Shines@cs.fsu.edu except LookupError: 596019Shines@cs.fsu.edu print "Undefined name '%s'" % t[1] 606019Shines@cs.fsu.edu t[0] = 0 6110037SARM gem5 Developers 6210037SARM gem5 Developersdef p_error(t,s): 6310037SARM gem5 Developers print "Syntax error at '%s'" % t.value 6410037SARM gem5 Developers 6510037SARM gem5 Developersyacc.yacc() 6610037SARM gem5 Developers 6710037SARM gem5 Developers 6810037SARM gem5 Developers 6910037SARM gem5 Developers 7010037SARM gem5 Developers