from lexrules import tokens from nodes import * def p_unit(p): 'unit : unit_items' p[0] = UnitNode([p[1]]) def p_unit_items(p): 'unit_items : unit_item unit_items' p[0] = Node([p[1]] + p[2].children) def p_unit_items_empty(p): 'unit_items : empty' p[0] = p[1] def p_unit_item_c_stmt(p): 'unit_item : c_expr SEMICOLON' p[0] = p[1] def p_statement(p): 'statement : expr SEMICOLON' p[0] = StatementNode([p[1]]) def p_expr(p): 'expr : c_expr' p[0] = p[1] def p_c_expr(p): 'c_expr : C LPAREN STRING RPAREN' p[0] = CExprNode(p[3]) def p_empty(p): 'empty :' p[0] = Node()