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