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