| @ -0,0 +1,13 @@ | |||||
| package ast | |||||
| type BaseNode struct { | |||||
| ID NodeID | |||||
| } | |||||
| func (node *BaseNode) initBaseNode(id NodeID) { | |||||
| node.ID = id | |||||
| } | |||||
| func (node *BaseNode) Name() string { | |||||
| return NodeNames[node.ID] | |||||
| } | |||||
| @ -0,0 +1,13 @@ | |||||
| package ast | |||||
| type CompoundStatement struct { | |||||
| Statement | |||||
| } | |||||
| func NewCompoundStatement() *CompoundStatement { | |||||
| node := &CompoundStatement{} | |||||
| node.initBaseNode(SIMPLE_STMT) | |||||
| return node | |||||
| } | |||||
| func (node *CompoundStatement) StatementNode() {} | |||||
| @ -0,0 +1,13 @@ | |||||
| package ast | |||||
| type ExpressionStatement struct { | |||||
| BaseNode | |||||
| } | |||||
| func NewExpressionStatement() *ExpressionStatement { | |||||
| node := &ExpressionStatement{} | |||||
| node.initBaseNode(EXPR_STMT) | |||||
| return node | |||||
| } | |||||
| func (node *ExpressionStatement) SmallStatementNode() {} | |||||
| @ -1,6 +1,5 @@ | |||||
| package ast | package ast | ||||
| type Node interface { | type Node interface { | ||||
| ID() NodeID | |||||
| Name() string | Name() string | ||||
| } | } | ||||
| @ -0,0 +1,18 @@ | |||||
| package ast | |||||
| type SimpleStatement struct { | |||||
| BaseNode | |||||
| Statements []*SmallStatement | |||||
| } | |||||
| func NewSimpleStatement() *SimpleStatement { | |||||
| node := &SimpleStatement{} | |||||
| node.initBaseNode(SIMPLE_STMT) | |||||
| return node | |||||
| } | |||||
| func (node *SimpleStatement) StatementNode() {} | |||||
| func (node *SimpleStatement) AppendSmallStatement(n *SmallStatement) { | |||||
| node.Statements = append(node.Statements, n) | |||||
| } | |||||
| @ -0,0 +1,16 @@ | |||||
| package ast | |||||
| type SmallStatementNode interface { | |||||
| SmallStatementNode() | |||||
| } | |||||
| type SmallStatement struct { | |||||
| BaseNode | |||||
| Statement SmallStatementNode | |||||
| } | |||||
| func NewSmallStatement() *SmallStatement { | |||||
| node := &SmallStatement{} | |||||
| node.initBaseNode(SMALL_STMT) | |||||
| return node | |||||
| } | |||||
| @ -0,0 +1,18 @@ | |||||
| package ast | |||||
| type StatementNode interface { | |||||
| StatementNode() | |||||
| } | |||||
| type Statement struct { | |||||
| BaseNode | |||||
| Statement StatementNode | |||||
| } | |||||
| func NewStatement() *Statement { | |||||
| node := &Statement{} | |||||
| node.initBaseNode(STMT) | |||||
| return node | |||||
| } | |||||
| func (node *Statement) StatementNode() {} | |||||