add basic, parameter-less functions
This commit is contained in:
parent
0f82c9b43b
commit
e7482b88f6
@ -31,6 +31,10 @@ class Parser(object):
|
|||||||
'unit_item : c_expr SEMICOLON'
|
'unit_item : c_expr SEMICOLON'
|
||||||
p[0] = p[1]
|
p[0] = p[1]
|
||||||
|
|
||||||
|
def p_unit_item_function(self, p):
|
||||||
|
'unit_item : function'
|
||||||
|
p[0] = p[1]
|
||||||
|
|
||||||
def p_statement(self, p):
|
def p_statement(self, p):
|
||||||
'statement : expr SEMICOLON'
|
'statement : expr SEMICOLON'
|
||||||
p[0] = StatementNode([p[1]])
|
p[0] = StatementNode([p[1]])
|
||||||
@ -43,6 +47,29 @@ class Parser(object):
|
|||||||
'c_expr : C LPAREN STRING RPAREN'
|
'c_expr : C LPAREN STRING RPAREN'
|
||||||
p[0] = CExprNode(p[3])
|
p[0] = CExprNode(p[3])
|
||||||
|
|
||||||
|
def p_function(self, p):
|
||||||
|
'function : type ID LPAREN RPAREN LCURLY function_items RCURLY'
|
||||||
|
p[0] = FunctionNode(p[2], p[1], None, p[6])
|
||||||
|
|
||||||
|
def p_function_items(self, p):
|
||||||
|
'function_items : function_item function_items'
|
||||||
|
p[0] = Node([p[1] + p[2].children])
|
||||||
|
|
||||||
|
def p_function_items_empty(self, p):
|
||||||
|
'function_items : empty'
|
||||||
|
p[0] = p[1]
|
||||||
|
|
||||||
|
def p_function_item_stmt(self, p):
|
||||||
|
'function_item : statement'
|
||||||
|
p[0] = p[1]
|
||||||
|
|
||||||
|
def p_type(self, p):
|
||||||
|
'''type : CHAR
|
||||||
|
| SHORT
|
||||||
|
| INT
|
||||||
|
| LONG'''
|
||||||
|
p[0] = p[1]
|
||||||
|
|
||||||
def p_empty(self, p):
|
def p_empty(self, p):
|
||||||
'empty :'
|
'empty :'
|
||||||
p[0] = Node()
|
p[0] = Node()
|
||||||
|
@ -25,3 +25,9 @@ class CExprNode(ExprNode):
|
|||||||
class UnitNode(Node):
|
class UnitNode(Node):
|
||||||
def __init__(self, children=None):
|
def __init__(self, children=None):
|
||||||
Node.__init__(self, children)
|
Node.__init__(self, children)
|
||||||
|
|
||||||
|
class FunctionNode(Node):
|
||||||
|
def __init__(self, name, ret_type, children=None):
|
||||||
|
Node.__init__(self, children)
|
||||||
|
self.name = name
|
||||||
|
self.ret_type = ret_type
|
||||||
|
Loading…
x
Reference in New Issue
Block a user