| @ -1,19 +0,0 @@ | |||||
| 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] | |||||
| } | |||||
| func (node *BaseNode) Repr() []interface{} { | |||||
| out := make([]interface{}, 0) | |||||
| out = append(out, node.Name()) | |||||
| return out | |||||
| } | |||||
| @ -1,13 +0,0 @@ | |||||
| package ast | |||||
| type CompoundStatement struct { | |||||
| Statement | |||||
| } | |||||
| func NewCompoundStatement() *CompoundStatement { | |||||
| node := &CompoundStatement{} | |||||
| node.initBaseNode(SIMPLE_STMT) | |||||
| return node | |||||
| } | |||||
| func (node *CompoundStatement) StatementNode() {} | |||||
| @ -0,0 +1,16 @@ | |||||
| package ast | |||||
| type ExpressionNode interface { | |||||
| Node | |||||
| exprNode() | |||||
| } | |||||
| type TestlistStarExpression struct { | |||||
| ParentNode | |||||
| } | |||||
| func NewTestListStarExpression() *TestlistStarExpression { | |||||
| node := &TestlistStarExpression{} | |||||
| node.initBaseNode(TESTLIST_STAR_EXPR) | |||||
| return node | |||||
| } | |||||
| @ -1,20 +0,0 @@ | |||||
| package ast | |||||
| type ExpressionStatement struct { | |||||
| BaseNode | |||||
| Expression *TestlistStartExpr | |||||
| } | |||||
| func NewExpressionStatement() *ExpressionStatement { | |||||
| node := &ExpressionStatement{} | |||||
| node.initBaseNode(EXPR_STMT) | |||||
| return node | |||||
| } | |||||
| func (node *ExpressionStatement) SmallStatementNode() {} | |||||
| func (node *ExpressionStatement) Repr() []interface{} { | |||||
| out := node.BaseNode.Repr() | |||||
| out = append(out, node.Expression.Repr()) | |||||
| return out | |||||
| } | |||||
| @ -1,41 +0,0 @@ | |||||
| package ast | |||||
| import "github.com/brettlangdon/gython/token" | |||||
| type ListNode struct { | |||||
| BaseNode | |||||
| children []interface{} | |||||
| } | |||||
| func (node *ListNode) initListNode() { | |||||
| node.children = make([]interface{}, 0) | |||||
| } | |||||
| func (node *ListNode) AppendToken(t *token.Token) { | |||||
| node.children = append(node.children, t) | |||||
| } | |||||
| func (node *ListNode) AppendNode(n Node) { | |||||
| node.children = append(node.children, n) | |||||
| } | |||||
| func (node *ListNode) Children() []interface{} { | |||||
| return node.children | |||||
| } | |||||
| func (node *ListNode) Length() int { | |||||
| return len(node.children) | |||||
| } | |||||
| func (node *ListNode) Repr() []interface{} { | |||||
| out := node.BaseNode.Repr() | |||||
| for _, child := range node.Children() { | |||||
| switch child.(type) { | |||||
| case Node: | |||||
| out = append(out, child.(Node).Repr()) | |||||
| default: | |||||
| out = append(out, child) | |||||
| } | |||||
| } | |||||
| return out | |||||
| } | |||||
| @ -1,6 +0,0 @@ | |||||
| package ast | |||||
| type Node interface { | |||||
| Name() string | |||||
| Repr() []interface{} | |||||
| } | |||||
| @ -0,0 +1,67 @@ | |||||
| package ast | |||||
| import "github.com/brettlangdon/gython/token" | |||||
| type Node interface { | |||||
| Name() string | |||||
| Repr() []interface{} | |||||
| } | |||||
| type TokenNode struct { | |||||
| Token *token.Token | |||||
| } | |||||
| func NewTokenNode(tok *token.Token) *TokenNode { | |||||
| return &TokenNode{ | |||||
| Token: tok, | |||||
| } | |||||
| } | |||||
| func (node *TokenNode) Name() string { return token.TokenNames[node.Token.ID] } | |||||
| func (node *TokenNode) Repr() []interface{} { | |||||
| parts := make([]interface{}, 0) | |||||
| parts = append(parts, node.Name()) | |||||
| return append(parts, node.Token.Literal) | |||||
| } | |||||
| type BaseNode struct { | |||||
| ID NodeID | |||||
| child Node | |||||
| } | |||||
| func (node *BaseNode) initBaseNode(id NodeID) { node.ID = id } | |||||
| func (node *BaseNode) Name() string { return NodeNames[node.ID] } | |||||
| func (node *BaseNode) Repr() (parts []interface{}) { return append(parts, node.Name()) } | |||||
| type ParentNode struct { | |||||
| BaseNode | |||||
| child Node | |||||
| } | |||||
| func (node *ParentNode) SetChild(n Node) { node.child = n } | |||||
| func (node *ParentNode) Child() Node { return node.child } | |||||
| func (node *ParentNode) Repr() (parts []interface{}) { | |||||
| parts = node.BaseNode.Repr() | |||||
| child := node.Child() | |||||
| if child != nil { | |||||
| parts = append(parts, child.Repr()) | |||||
| } | |||||
| return parts | |||||
| } | |||||
| type ListNode struct { | |||||
| BaseNode | |||||
| children []Node | |||||
| } | |||||
| func (node *ListNode) initListNode() { node.children = make([]Node, 0) } | |||||
| func (node *ListNode) Length() int { return len(node.children) } | |||||
| func (node *ListNode) Children() []Node { return node.children } | |||||
| func (node *ListNode) Append(n Node) { node.children = append(node.children, n) } | |||||
| func (node *ListNode) Repr() (parts []interface{}) { | |||||
| parts = node.BaseNode.Repr() | |||||
| children := node.Children() | |||||
| for _, child := range children { | |||||
| parts = append(parts, child.Repr()) | |||||
| } | |||||
| return parts | |||||
| } | |||||
| @ -1,17 +0,0 @@ | |||||
| package ast | |||||
| type SimpleStatement struct { | |||||
| ListNode | |||||
| } | |||||
| func NewSimpleStatement() *SimpleStatement { | |||||
| node := &SimpleStatement{} | |||||
| node.initBaseNode(SIMPLE_STMT) | |||||
| return node | |||||
| } | |||||
| func (node *SimpleStatement) StatementNode() {} | |||||
| func (node *SimpleStatement) AppendNode(n *SmallStatement) { | |||||
| node.ListNode.AppendNode(n) | |||||
| } | |||||
| @ -1,23 +0,0 @@ | |||||
| package ast | |||||
| type SmallStatementNode interface { | |||||
| Node | |||||
| SmallStatementNode() | |||||
| } | |||||
| type SmallStatement struct { | |||||
| BaseNode | |||||
| Statement SmallStatementNode | |||||
| } | |||||
| func NewSmallStatement() *SmallStatement { | |||||
| node := &SmallStatement{} | |||||
| node.initBaseNode(SMALL_STMT) | |||||
| return node | |||||
| } | |||||
| func (node *SmallStatement) Repr() []interface{} { | |||||
| out := node.BaseNode.Repr() | |||||
| out = append(out, node.Statement.Repr()) | |||||
| return out | |||||
| } | |||||
| @ -0,0 +1,32 @@ | |||||
| package ast | |||||
| type SmallStatementNode interface { | |||||
| Node | |||||
| smallStmtNode() | |||||
| } | |||||
| type SmallStatement struct { | |||||
| ParentNode | |||||
| } | |||||
| func NewSmallStatement() *SmallStatement { | |||||
| node := &SmallStatement{} | |||||
| node.initBaseNode(SMALL_STMT) | |||||
| return node | |||||
| } | |||||
| func (node *SmallStatement) SetChild(n SmallStatementNode) { node.ParentNode.SetChild(n) } | |||||
| type ExpressionStatement struct { | |||||
| ParentNode | |||||
| Expression *TestlistStarExpression | |||||
| } | |||||
| func NewExpressionStatement() *ExpressionStatement { | |||||
| node := &ExpressionStatement{} | |||||
| node.initBaseNode(EXPR_STMT) | |||||
| return node | |||||
| } | |||||
| func (node *ExpressionStatement) smallStmtNode() {} | |||||
| func (node *ExpressionStatement) SetChild(n *TestlistStarExpression) { node.ParentNode.SetChild(n) } | |||||
| @ -1,25 +0,0 @@ | |||||
| package ast | |||||
| type StatementNode interface { | |||||
| Node | |||||
| StatementNode() | |||||
| } | |||||
| type Statement struct { | |||||
| BaseNode | |||||
| Statement StatementNode | |||||
| } | |||||
| func NewStatement() *Statement { | |||||
| node := &Statement{} | |||||
| node.initBaseNode(STMT) | |||||
| return node | |||||
| } | |||||
| func (node *Statement) StatementNode() {} | |||||
| func (node *Statement) Repr() []interface{} { | |||||
| out := node.BaseNode.Repr() | |||||
| out = append(out, node.Statement.Repr()) | |||||
| return out | |||||
| } | |||||
| @ -0,0 +1,43 @@ | |||||
| package ast | |||||
| type StatementNode interface { | |||||
| Node | |||||
| stmtNode() | |||||
| } | |||||
| type Statement struct { | |||||
| ParentNode | |||||
| } | |||||
| func NewStatement() *Statement { | |||||
| node := &Statement{} | |||||
| node.initBaseNode(STMT) | |||||
| return node | |||||
| } | |||||
| func (node *Statement) SetChild(n StatementNode) { node.ParentNode.SetChild(n) } | |||||
| type SimpleStatement struct { | |||||
| ListNode | |||||
| } | |||||
| func NewSimpleStatement() *SimpleStatement { | |||||
| node := &SimpleStatement{} | |||||
| node.initBaseNode(SIMPLE_STMT) | |||||
| node.initListNode() | |||||
| return node | |||||
| } | |||||
| func (node *SimpleStatement) stmtNode() {} | |||||
| func (node *SimpleStatement) Append(n *SmallStatement) { node.ListNode.Append(n) } | |||||
| type CompoundStatement struct { | |||||
| BaseNode | |||||
| } | |||||
| func NewCompoundStatement() *CompoundStatement { | |||||
| node := &CompoundStatement{} | |||||
| node.initBaseNode(COMPOUND_STMT) | |||||
| return node | |||||
| } | |||||
| func (node *CompoundStatement) stmtNode() {} | |||||
| @ -1,11 +0,0 @@ | |||||
| package ast | |||||
| type TestlistStartExpr struct { | |||||
| BaseNode | |||||
| } | |||||
| func NewTestListStartExpr() *TestlistStartExpr { | |||||
| node := &TestlistStartExpr{} | |||||
| node.initBaseNode(TESTLIST_STAR_EXPR) | |||||
| return node | |||||
| } | |||||
| @ -0,0 +1,18 @@ | |||||
| package ast | |||||
| type TestNode interface { | |||||
| Node | |||||
| test() | |||||
| } | |||||
| type Test struct { | |||||
| ParentNode | |||||
| } | |||||
| func NewTest() *Test { | |||||
| node := &Test{} | |||||
| node.initBaseNode(TEST) | |||||
| return node | |||||
| } | |||||
| func (node *Test) SetChild(n TestNode) { node.ParentNode.SetChild(n) } | |||||