| @ -1,251 +1,253 @@ | |||||
| package grammar | package grammar | ||||
| type TestlistStarExpressionChildNode interface { | |||||
| Node | |||||
| import "github.com/brettlangdon/gython/symbol" | |||||
| type TestlistStarExpressionChild interface { | |||||
| Rule | |||||
| testlistStarExpressionChild() | testlistStarExpressionChild() | ||||
| } | } | ||||
| type TestlistStarExpression struct { | type TestlistStarExpression struct { | ||||
| ParentNode | |||||
| ParentRule | |||||
| } | } | ||||
| func NewTestListStarExpression() *TestlistStarExpression { | func NewTestListStarExpression() *TestlistStarExpression { | ||||
| node := &TestlistStarExpression{} | |||||
| node.initBaseNode(TESTLIST_STAR_EXPR) | |||||
| return node | |||||
| rule := &TestlistStarExpression{} | |||||
| rule.initBaseRule(symbol.TESTLIST_STAR_EXPR) | |||||
| return rule | |||||
| } | } | ||||
| func (node *TestlistStarExpression) expressionStatementChild() {} | |||||
| func (node *TestlistStarExpression) SetChild(n TestlistStarExpressionChildNode) { | |||||
| node.ParentNode.SetChild(n) | |||||
| func (rule *TestlistStarExpression) expressionStatementChild() {} | |||||
| func (rule *TestlistStarExpression) SetChild(n TestlistStarExpressionChild) { | |||||
| rule.ParentRule.SetChild(n) | |||||
| } | } | ||||
| type ComparisonChildNode interface { | |||||
| Node | |||||
| type ComparisonChild interface { | |||||
| Rule | |||||
| comparisonChild() | comparisonChild() | ||||
| } | } | ||||
| type Comparison struct { | type Comparison struct { | ||||
| ListNode | |||||
| ListRule | |||||
| } | } | ||||
| func NewComparison() *Comparison { | func NewComparison() *Comparison { | ||||
| node := &Comparison{} | |||||
| node.initBaseNode(COMPARISON) | |||||
| node.initListNode() | |||||
| return node | |||||
| rule := &Comparison{} | |||||
| rule.initBaseRule(symbol.COMPARISON) | |||||
| rule.initListRule() | |||||
| return rule | |||||
| } | } | ||||
| func (node *Comparison) notTestChild() {} | |||||
| func (node *Comparison) Append(n ComparisonChildNode) { node.ListNode.Append(n) } | |||||
| func (rule *Comparison) notTestChild() {} | |||||
| func (rule *Comparison) Append(n ComparisonChild) { rule.ListRule.Append(n) } | |||||
| type ExpressionChildNode interface { | |||||
| Node | |||||
| type ExpressionChild interface { | |||||
| Rule | |||||
| expressionChild() | expressionChild() | ||||
| } | } | ||||
| type Expression struct { | type Expression struct { | ||||
| ListNode | |||||
| ListRule | |||||
| } | } | ||||
| func NewExpression() *Expression { | func NewExpression() *Expression { | ||||
| node := &Expression{} | |||||
| node.initBaseNode(EXPR) | |||||
| node.initListNode() | |||||
| return node | |||||
| rule := &Expression{} | |||||
| rule.initBaseRule(symbol.EXPR) | |||||
| rule.initListRule() | |||||
| return rule | |||||
| } | } | ||||
| func (node *Expression) comparisonChild() {} | |||||
| func (node *Expression) Append(n ExpressionChildNode) { node.ListNode.Append(n) } | |||||
| func (rule *Expression) comparisonChild() {} | |||||
| func (rule *Expression) Append(n ExpressionChild) { rule.ListRule.Append(n) } | |||||
| type XorExpressionChildNode interface { | |||||
| Node | |||||
| type XorExpressionChild interface { | |||||
| Rule | |||||
| xorExpressionChild() | xorExpressionChild() | ||||
| } | } | ||||
| type XorExpression struct { | type XorExpression struct { | ||||
| ListNode | |||||
| ListRule | |||||
| } | } | ||||
| func NewXorExpression() *XorExpression { | func NewXorExpression() *XorExpression { | ||||
| node := &XorExpression{} | |||||
| node.initBaseNode(XOR_EXPR) | |||||
| node.initListNode() | |||||
| return node | |||||
| rule := &XorExpression{} | |||||
| rule.initBaseRule(symbol.XOR_EXPR) | |||||
| rule.initListRule() | |||||
| return rule | |||||
| } | } | ||||
| func (node *XorExpression) expressionChild() {} | |||||
| func (node *XorExpression) Append(n XorExpressionChildNode) { node.ListNode.Append(n) } | |||||
| func (rule *XorExpression) expressionChild() {} | |||||
| func (rule *XorExpression) Append(n XorExpressionChild) { rule.ListRule.Append(n) } | |||||
| type AndExpressionChildNode interface { | |||||
| Node | |||||
| type AndExpressionChild interface { | |||||
| Rule | |||||
| andExpressionChild() | andExpressionChild() | ||||
| } | } | ||||
| type AndExpression struct { | type AndExpression struct { | ||||
| ListNode | |||||
| ListRule | |||||
| } | } | ||||
| func NewAndExpression() *AndExpression { | func NewAndExpression() *AndExpression { | ||||
| node := &AndExpression{} | |||||
| node.initBaseNode(AND_EXPR) | |||||
| node.initListNode() | |||||
| return node | |||||
| rule := &AndExpression{} | |||||
| rule.initBaseRule(symbol.AND_EXPR) | |||||
| rule.initListRule() | |||||
| return rule | |||||
| } | } | ||||
| func (node *AndExpression) xorExpressionChild() {} | |||||
| func (node *AndExpression) Append(n AndExpressionChildNode) { node.ListNode.Append(n) } | |||||
| func (rule *AndExpression) xorExpressionChild() {} | |||||
| func (rule *AndExpression) Append(n AndExpressionChild) { rule.ListRule.Append(n) } | |||||
| type ShiftExpressionChildNode interface { | |||||
| Node | |||||
| type ShiftExpressionChild interface { | |||||
| Rule | |||||
| shiftExpressionChild() | shiftExpressionChild() | ||||
| } | } | ||||
| type ShiftExpression struct { | type ShiftExpression struct { | ||||
| ListNode | |||||
| ListRule | |||||
| } | } | ||||
| func NewShiftExpression() *ShiftExpression { | func NewShiftExpression() *ShiftExpression { | ||||
| node := &ShiftExpression{} | |||||
| node.initBaseNode(SHIFT_EXPR) | |||||
| node.initListNode() | |||||
| return node | |||||
| rule := &ShiftExpression{} | |||||
| rule.initBaseRule(symbol.SHIFT_EXPR) | |||||
| rule.initListRule() | |||||
| return rule | |||||
| } | } | ||||
| func (node *ShiftExpression) andExpressionChild() {} | |||||
| func (node *ShiftExpression) Append(n ShiftExpressionChildNode) { node.ListNode.Append(n) } | |||||
| func (rule *ShiftExpression) andExpressionChild() {} | |||||
| func (rule *ShiftExpression) Append(n ShiftExpressionChild) { rule.ListRule.Append(n) } | |||||
| type ArithmeticExpressionChildNode interface { | |||||
| Node | |||||
| type ArithmeticExpressionChild interface { | |||||
| Rule | |||||
| arithmeticExpressionChild() | arithmeticExpressionChild() | ||||
| } | } | ||||
| type ArithmeticExpression struct { | type ArithmeticExpression struct { | ||||
| ListNode | |||||
| ListRule | |||||
| } | } | ||||
| func NewArithmeticExpression() *ArithmeticExpression { | func NewArithmeticExpression() *ArithmeticExpression { | ||||
| node := &ArithmeticExpression{} | |||||
| node.initBaseNode(ARITH_EXPR) | |||||
| node.initListNode() | |||||
| return node | |||||
| rule := &ArithmeticExpression{} | |||||
| rule.initBaseRule(symbol.ARITH_EXPR) | |||||
| rule.initListRule() | |||||
| return rule | |||||
| } | } | ||||
| func (node *ArithmeticExpression) shiftExpressionChild() {} | |||||
| func (node *ArithmeticExpression) Append(n ArithmeticExpressionChildNode) { node.ListNode.Append(n) } | |||||
| func (rule *ArithmeticExpression) shiftExpressionChild() {} | |||||
| func (rule *ArithmeticExpression) Append(n ArithmeticExpressionChild) { rule.ListRule.Append(n) } | |||||
| type TermChildNode interface { | |||||
| Node | |||||
| type TermChild interface { | |||||
| Rule | |||||
| termChild() | termChild() | ||||
| } | } | ||||
| type Term struct { | type Term struct { | ||||
| ListNode | |||||
| ListRule | |||||
| } | } | ||||
| func NewTerm() *Term { | func NewTerm() *Term { | ||||
| node := &Term{} | |||||
| node.initBaseNode(TERM) | |||||
| node.initListNode() | |||||
| return node | |||||
| rule := &Term{} | |||||
| rule.initBaseRule(symbol.TERM) | |||||
| rule.initListRule() | |||||
| return rule | |||||
| } | } | ||||
| func (node *Term) arithmeticExpressionChild() {} | |||||
| func (node *Term) Append(n TermChildNode) { node.ListNode.Append(n) } | |||||
| func (rule *Term) arithmeticExpressionChild() {} | |||||
| func (rule *Term) Append(n TermChild) { rule.ListRule.Append(n) } | |||||
| type FactorChildNode interface { | |||||
| Node | |||||
| type FactorChild interface { | |||||
| Rule | |||||
| factorChild() | factorChild() | ||||
| } | } | ||||
| type Factor struct { | type Factor struct { | ||||
| ListNode | |||||
| ListRule | |||||
| } | } | ||||
| func NewFactor() *Factor { | func NewFactor() *Factor { | ||||
| node := &Factor{} | |||||
| node.initBaseNode(FACTOR) | |||||
| node.initListNode() | |||||
| return node | |||||
| rule := &Factor{} | |||||
| rule.initBaseRule(symbol.FACTOR) | |||||
| rule.initListRule() | |||||
| return rule | |||||
| } | } | ||||
| func (node *Factor) factorChild() {} | |||||
| func (node *Factor) powerChild() {} | |||||
| func (node *Factor) termChild() {} | |||||
| func (node *Factor) Append(n FactorChildNode) { node.ListNode.Append(n) } | |||||
| func (rule *Factor) factorChild() {} | |||||
| func (rule *Factor) powerChild() {} | |||||
| func (rule *Factor) termChild() {} | |||||
| func (rule *Factor) Append(n FactorChild) { rule.ListRule.Append(n) } | |||||
| type PowerChildNode interface { | |||||
| Node | |||||
| type PowerChild interface { | |||||
| Rule | |||||
| powerChild() | powerChild() | ||||
| } | } | ||||
| type Power struct { | type Power struct { | ||||
| ListNode | |||||
| ListRule | |||||
| } | } | ||||
| func NewPower() *Power { | func NewPower() *Power { | ||||
| node := &Power{} | |||||
| node.initBaseNode(POWER) | |||||
| node.initListNode() | |||||
| return node | |||||
| rule := &Power{} | |||||
| rule.initBaseRule(symbol.POWER) | |||||
| rule.initListRule() | |||||
| return rule | |||||
| } | } | ||||
| func (node *Power) factorChild() {} | |||||
| func (node *Power) Append(n PowerChildNode) { node.ListNode.Append(n) } | |||||
| func (rule *Power) factorChild() {} | |||||
| func (rule *Power) Append(n PowerChild) { rule.ListRule.Append(n) } | |||||
| type AtomExpressionChildNode interface { | |||||
| Node | |||||
| type AtomExpressionChild interface { | |||||
| Rule | |||||
| atomExpressionChild() | atomExpressionChild() | ||||
| } | } | ||||
| type AtomExpression struct { | type AtomExpression struct { | ||||
| ListNode | |||||
| ListRule | |||||
| } | } | ||||
| func NewAtomExpression() *AtomExpression { | func NewAtomExpression() *AtomExpression { | ||||
| node := &AtomExpression{} | |||||
| node.initBaseNode(ATOM_EXPR) | |||||
| node.initListNode() | |||||
| return node | |||||
| rule := &AtomExpression{} | |||||
| rule.initBaseRule(symbol.ATOM_EXPR) | |||||
| rule.initListRule() | |||||
| return rule | |||||
| } | } | ||||
| func (node *AtomExpression) powerChild() {} | |||||
| func (node *AtomExpression) Append(n AtomExpressionChildNode) { node.ListNode.Append(n) } | |||||
| func (rule *AtomExpression) powerChild() {} | |||||
| func (rule *AtomExpression) Append(n AtomExpressionChild) { rule.ListRule.Append(n) } | |||||
| type AtomChildNode interface { | |||||
| Node | |||||
| type AtomChild interface { | |||||
| Rule | |||||
| atomChild() | atomChild() | ||||
| } | } | ||||
| type Atom struct { | type Atom struct { | ||||
| ListNode | |||||
| ListRule | |||||
| } | } | ||||
| func NewAtom() *Atom { | func NewAtom() *Atom { | ||||
| node := &Atom{} | |||||
| node.initBaseNode(ATOM) | |||||
| node.initListNode() | |||||
| return node | |||||
| rule := &Atom{} | |||||
| rule.initBaseRule(symbol.ATOM) | |||||
| rule.initListRule() | |||||
| return rule | |||||
| } | } | ||||
| func (node *Atom) atomExpressionChild() {} | |||||
| func (node *Atom) Append(n AtomChildNode) { node.ListNode.Append(n) } | |||||
| func (rule *Atom) atomExpressionChild() {} | |||||
| func (rule *Atom) Append(n AtomChild) { rule.ListRule.Append(n) } | |||||
| type TrailerChildNode interface { | |||||
| Node | |||||
| type TrailerChild interface { | |||||
| Rule | |||||
| trailerChild() | trailerChild() | ||||
| } | } | ||||
| type Trailer struct { | type Trailer struct { | ||||
| ListNode | |||||
| ListRule | |||||
| } | } | ||||
| func NewTrailer() *Trailer { | func NewTrailer() *Trailer { | ||||
| node := &Trailer{} | |||||
| node.initBaseNode(TRAILER) | |||||
| node.initListNode() | |||||
| return node | |||||
| rule := &Trailer{} | |||||
| rule.initBaseRule(symbol.TRAILER) | |||||
| rule.initListRule() | |||||
| return rule | |||||
| } | } | ||||
| func (node *Trailer) atomExpressionChild() {} | |||||
| func (node *Trailer) Append(n TrailerChildNode) { node.ListNode.Append(n) } | |||||
| func (rule *Trailer) atomExpressionChild() {} | |||||
| func (rule *Trailer) Append(n TrailerChild) { rule.ListRule.Append(n) } | |||||
| @ -1,91 +0,0 @@ | |||||
| package grammar | |||||
| type NodeID int | |||||
| const ( | |||||
| SINGLE_INPUT NodeID = 256 | |||||
| FILE_INPUT NodeID = 257 | |||||
| EVAL_INPUT NodeID = 258 | |||||
| DECORATOR NodeID = 259 | |||||
| DECORATORS NodeID = 260 | |||||
| DECORATED NodeID = 261 | |||||
| ASYNC_FUNCDEF NodeID = 262 | |||||
| FUNCDEF NodeID = 263 | |||||
| PARAMETERS NodeID = 264 | |||||
| TYPEDARGSLIST NodeID = 265 | |||||
| TFPDEF NodeID = 266 | |||||
| VARARGSLIST NodeID = 267 | |||||
| VFPDEF NodeID = 268 | |||||
| STMT NodeID = 269 | |||||
| SIMPLE_STMT NodeID = 270 | |||||
| SMALL_STMT NodeID = 271 | |||||
| EXPR_STMT NodeID = 272 | |||||
| TESTLIST_STAR_EXPR NodeID = 273 | |||||
| AUGASSIGN NodeID = 274 | |||||
| DEL_STMT NodeID = 275 | |||||
| PASS_STMT NodeID = 276 | |||||
| FLOW_STMT NodeID = 277 | |||||
| BREAK_STMT NodeID = 278 | |||||
| CONTINUE_STMT NodeID = 279 | |||||
| RETURN_STMT NodeID = 280 | |||||
| YIELD_STMT NodeID = 281 | |||||
| RAISE_STMT NodeID = 282 | |||||
| IMPORT_STMT NodeID = 283 | |||||
| IMPORT_NAME NodeID = 284 | |||||
| IMPORT_FROM NodeID = 285 | |||||
| IMPORT_AS_NAME NodeID = 286 | |||||
| DOTTED_AS_NAME NodeID = 287 | |||||
| IMPORT_AS_NAMES NodeID = 288 | |||||
| DOTTED_AS_NAMES NodeID = 289 | |||||
| DOTTED_NAME NodeID = 290 | |||||
| GLOBAL_STMT NodeID = 291 | |||||
| NONLOCAL_STMT NodeID = 292 | |||||
| ASSERT_STMT NodeID = 293 | |||||
| COMPOUND_STMT NodeID = 294 | |||||
| ASYNC_STMT NodeID = 295 | |||||
| IF_STMT NodeID = 296 | |||||
| WHILE_STMT NodeID = 297 | |||||
| FOR_STMT NodeID = 298 | |||||
| TRY_STMT NodeID = 299 | |||||
| WITH_STMT NodeID = 300 | |||||
| WITH_ITEM NodeID = 301 | |||||
| EXCEPT_CLAUSE NodeID = 302 | |||||
| SUITE NodeID = 303 | |||||
| TEST NodeID = 304 | |||||
| TEST_NOCOND NodeID = 305 | |||||
| LAMBDEF NodeID = 306 | |||||
| LAMBDEF_NOCOND NodeID = 307 | |||||
| OR_TEST NodeID = 308 | |||||
| AND_TEST NodeID = 309 | |||||
| NOT_TEST NodeID = 310 | |||||
| COMPARISON NodeID = 311 | |||||
| COMP_OP NodeID = 312 | |||||
| STAR_EXPR NodeID = 313 | |||||
| EXPR NodeID = 314 | |||||
| XOR_EXPR NodeID = 315 | |||||
| AND_EXPR NodeID = 316 | |||||
| SHIFT_EXPR NodeID = 317 | |||||
| ARITH_EXPR NodeID = 318 | |||||
| TERM NodeID = 319 | |||||
| FACTOR NodeID = 320 | |||||
| POWER NodeID = 321 | |||||
| ATOM_EXPR NodeID = 322 | |||||
| ATOM NodeID = 323 | |||||
| TESTLIST_COMP NodeID = 324 | |||||
| TRAILER NodeID = 325 | |||||
| SUBSCRIPTLIST NodeID = 326 | |||||
| SUBSCRIPT NodeID = 327 | |||||
| SLICEOP NodeID = 328 | |||||
| EXPRLIST NodeID = 329 | |||||
| TESTLIST NodeID = 330 | |||||
| DICTORSETMAKER NodeID = 331 | |||||
| CLASSDEF NodeID = 332 | |||||
| ARGLIST NodeID = 333 | |||||
| ARGUMENT NodeID = 334 | |||||
| COMP_ITER NodeID = 335 | |||||
| COMP_FOR NodeID = 336 | |||||
| COMP_IF NodeID = 337 | |||||
| ENCODING_DECL NodeID = 338 | |||||
| YIELD_EXPR NodeID = 339 | |||||
| YIELD_ARG NodeID = 340 | |||||
| ) | |||||
| @ -1,89 +0,0 @@ | |||||
| package grammar | |||||
| var NodeNames = [...]string{ | |||||
| SINGLE_INPUT: "SINGLE_INPUT", | |||||
| FILE_INPUT: "FILE_INPUT", | |||||
| EVAL_INPUT: "EVAL_INPUT", | |||||
| DECORATOR: "DECORATOR", | |||||
| DECORATORS: "DECORATORS", | |||||
| DECORATED: "DECORATED", | |||||
| ASYNC_FUNCDEF: "ASYNC_FUNCDEF", | |||||
| FUNCDEF: "FUNCDEF", | |||||
| PARAMETERS: "PARAMETERS", | |||||
| TYPEDARGSLIST: "TYPEDARGSLIST", | |||||
| TFPDEF: "TFPDEF", | |||||
| VARARGSLIST: "VARARGSLIST", | |||||
| VFPDEF: "VFPDEF", | |||||
| STMT: "STMT", | |||||
| SIMPLE_STMT: "SIMPLE_STMT", | |||||
| SMALL_STMT: "SMALL_STMT", | |||||
| EXPR_STMT: "EXPR_STMT", | |||||
| TESTLIST_STAR_EXPR: "TESTLIST_STAR_EXPR", | |||||
| AUGASSIGN: "AUGASSIGN", | |||||
| DEL_STMT: "DEL_STMT", | |||||
| PASS_STMT: "PASS_STMT", | |||||
| FLOW_STMT: "FLOW_STMT", | |||||
| BREAK_STMT: "BREAK_STMT", | |||||
| CONTINUE_STMT: "CONTINUE_STMT", | |||||
| RETURN_STMT: "RETURN_STMT", | |||||
| YIELD_STMT: "YIELD_STMT", | |||||
| RAISE_STMT: "RAISE_STMT", | |||||
| IMPORT_STMT: "IMPORT_STMT", | |||||
| IMPORT_NAME: "IMPORT_NAME", | |||||
| IMPORT_FROM: "IMPORT_FROM", | |||||
| IMPORT_AS_NAME: "IMPORT_AS_NAME", | |||||
| DOTTED_AS_NAME: "DOTTED_AS_NAME", | |||||
| IMPORT_AS_NAMES: "IMPORT_AS_NAMES", | |||||
| DOTTED_AS_NAMES: "DOTTED_AS_NAMES", | |||||
| DOTTED_NAME: "DOTTED_NAME", | |||||
| GLOBAL_STMT: "GLOBAL_STMT", | |||||
| NONLOCAL_STMT: "NONLOCAL_STMT", | |||||
| ASSERT_STMT: "ASSERT_STMT", | |||||
| COMPOUND_STMT: "COMPOUND_STMT", | |||||
| ASYNC_STMT: "ASYNC_STMT", | |||||
| IF_STMT: "IF_STMT", | |||||
| WHILE_STMT: "WHILE_STMT", | |||||
| FOR_STMT: "FOR_STMT", | |||||
| TRY_STMT: "TRY_STMT", | |||||
| WITH_STMT: "WITH_STMT", | |||||
| WITH_ITEM: "WITH_ITEM", | |||||
| EXCEPT_CLAUSE: "EXCEPT_CLAUSE", | |||||
| SUITE: "SUITE", | |||||
| TEST: "TEST", | |||||
| TEST_NOCOND: "TEST_NOCOND", | |||||
| LAMBDEF: "LAMBDEF", | |||||
| LAMBDEF_NOCOND: "LAMBDEF_NOCOND", | |||||
| OR_TEST: "OR_TEST", | |||||
| AND_TEST: "AND_TEST", | |||||
| NOT_TEST: "NOT_TEST", | |||||
| COMPARISON: "COMPARISON", | |||||
| COMP_OP: "COMP_OP", | |||||
| STAR_EXPR: "STAR_EXPR", | |||||
| EXPR: "EXPR", | |||||
| XOR_EXPR: "XOR_EXPR", | |||||
| AND_EXPR: "AND_EXPR", | |||||
| SHIFT_EXPR: "SHIFT_EXPR", | |||||
| ARITH_EXPR: "ARITH_EXPR", | |||||
| TERM: "TERM", | |||||
| FACTOR: "FACTOR", | |||||
| POWER: "POWER", | |||||
| ATOM_EXPR: "ATOM_EXPR", | |||||
| ATOM: "ATOM", | |||||
| TESTLIST_COMP: "TESTLIST_COMP", | |||||
| TRAILER: "TRAILER", | |||||
| SUBSCRIPTLIST: "SUBSCRIPTLIST", | |||||
| SUBSCRIPT: "SUBSCRIPT", | |||||
| SLICEOP: "SLICEOP", | |||||
| EXPRLIST: "EXPRLIST", | |||||
| TESTLIST: "TESTLIST", | |||||
| DICTORSETMAKER: "DICTORSETMAKER", | |||||
| CLASSDEF: "CLASSDEF", | |||||
| ARGLIST: "ARGLIST", | |||||
| ARGUMENT: "ARGUMENT", | |||||
| COMP_ITER: "COMP_ITER", | |||||
| COMP_FOR: "COMP_FOR", | |||||
| COMP_IF: "COMP_IF", | |||||
| ENCODING_DECL: "ENCODING_DECL", | |||||
| YIELD_EXPR: "YIELD_EXPR", | |||||
| YIELD_ARG: "YIELD_ARG", | |||||
| } | |||||
| @ -1,81 +0,0 @@ | |||||
| package grammar | |||||
| import ( | |||||
| "fmt" | |||||
| "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) atomChild() {} | |||||
| func (node *TokenNode) atomExpressionChild() {} | |||||
| func (node *TokenNode) comparisonChild() {} | |||||
| func (node *TokenNode) expressionStatementChild() {} | |||||
| func (node *TokenNode) factorChild() {} | |||||
| func (node *TokenNode) fileInputChild() {} | |||||
| func (node *TokenNode) shiftExpressionChild() {} | |||||
| func (node *TokenNode) simpleStatementChild() {} | |||||
| func (node *TokenNode) trailerChild() {} | |||||
| 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()) | |||||
| literal := fmt.Sprintf("%#v", node.Token.Literal) | |||||
| return append(parts, 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 | |||||
| } | |||||
| @ -0,0 +1,82 @@ | |||||
| package grammar | |||||
| import ( | |||||
| "fmt" | |||||
| "github.com/brettlangdon/gython/symbol" | |||||
| "github.com/brettlangdon/gython/token" | |||||
| ) | |||||
| type Rule interface { | |||||
| Name() string | |||||
| Repr() []interface{} | |||||
| } | |||||
| type TokenRule struct { | |||||
| Token *token.Token | |||||
| } | |||||
| func NewTokenRule(tok *token.Token) *TokenRule { | |||||
| return &TokenRule{ | |||||
| Token: tok, | |||||
| } | |||||
| } | |||||
| func (rule *TokenRule) atomChild() {} | |||||
| func (rule *TokenRule) atomExpressionChild() {} | |||||
| func (rule *TokenRule) comparisonChild() {} | |||||
| func (rule *TokenRule) expressionStatementChild() {} | |||||
| func (rule *TokenRule) factorChild() {} | |||||
| func (rule *TokenRule) fileInputChild() {} | |||||
| func (rule *TokenRule) shiftExpressionChild() {} | |||||
| func (rule *TokenRule) simpleStatementChild() {} | |||||
| func (rule *TokenRule) trailerChild() {} | |||||
| func (rule *TokenRule) Name() string { return token.TokenNames[rule.Token.ID] } | |||||
| func (rule *TokenRule) Repr() []interface{} { | |||||
| parts := make([]interface{}, 0) | |||||
| parts = append(parts, rule.Name()) | |||||
| literal := fmt.Sprintf("%#v", rule.Token.Literal) | |||||
| return append(parts, literal) | |||||
| } | |||||
| type BaseRule struct { | |||||
| ID symbol.SymbolID | |||||
| child Rule | |||||
| } | |||||
| func (rule *BaseRule) initBaseRule(id symbol.SymbolID) { rule.ID = id } | |||||
| func (rule *BaseRule) Name() string { return symbol.SymbolNames[rule.ID] } | |||||
| func (rule *BaseRule) Repr() (parts []interface{}) { return append(parts, rule.Name()) } | |||||
| type ParentRule struct { | |||||
| BaseRule | |||||
| child Rule | |||||
| } | |||||
| func (rule *ParentRule) SetChild(n Rule) { rule.child = n } | |||||
| func (rule *ParentRule) Child() Rule { return rule.child } | |||||
| func (rule *ParentRule) Repr() (parts []interface{}) { | |||||
| parts = rule.BaseRule.Repr() | |||||
| child := rule.Child() | |||||
| if child != nil { | |||||
| parts = append(parts, child.Repr()) | |||||
| } | |||||
| return parts | |||||
| } | |||||
| type ListRule struct { | |||||
| BaseRule | |||||
| children []Rule | |||||
| } | |||||
| func (rule *ListRule) initListRule() { rule.children = make([]Rule, 0) } | |||||
| func (rule *ListRule) Length() int { return len(rule.children) } | |||||
| func (rule *ListRule) Children() []Rule { return rule.children } | |||||
| func (rule *ListRule) Append(n Rule) { rule.children = append(rule.children, n) } | |||||
| func (rule *ListRule) Repr() (parts []interface{}) { | |||||
| parts = rule.BaseRule.Repr() | |||||
| children := rule.Children() | |||||
| for _, child := range children { | |||||
| parts = append(parts, child.Repr()) | |||||
| } | |||||
| return parts | |||||
| } | |||||
| @ -1,19 +1,21 @@ | |||||
| package grammar | package grammar | ||||
| type FileInputChildNode interface { | |||||
| Node | |||||
| import "github.com/brettlangdon/gython/symbol" | |||||
| type FileInputChild interface { | |||||
| Rule | |||||
| fileInputChild() | fileInputChild() | ||||
| } | } | ||||
| type FileInput struct { | type FileInput struct { | ||||
| ListNode | |||||
| ListRule | |||||
| } | } | ||||
| func NewFileInput() *FileInput { | func NewFileInput() *FileInput { | ||||
| node := &FileInput{} | |||||
| node.initBaseNode(FILE_INPUT) | |||||
| node.initListNode() | |||||
| return node | |||||
| rule := &FileInput{} | |||||
| rule.initBaseRule(symbol.FILE_INPUT) | |||||
| rule.initListRule() | |||||
| return rule | |||||
| } | } | ||||
| func (node *FileInput) Append(n FileInputChildNode) { node.ListNode.Append(n) } | |||||
| func (rule *FileInput) Append(n FileInputChild) { rule.ListRule.Append(n) } | |||||
| @ -1,87 +1,89 @@ | |||||
| package grammar | package grammar | ||||
| type StatementChildNode interface { | |||||
| Node | |||||
| stmtChildNode() | |||||
| import "github.com/brettlangdon/gython/symbol" | |||||
| type StatementChild interface { | |||||
| Rule | |||||
| stmtChild() | |||||
| } | } | ||||
| type Statement struct { | type Statement struct { | ||||
| ParentNode | |||||
| ParentRule | |||||
| } | } | ||||
| func NewStatement() *Statement { | func NewStatement() *Statement { | ||||
| node := &Statement{} | |||||
| node.initBaseNode(STMT) | |||||
| return node | |||||
| rule := &Statement{} | |||||
| rule.initBaseRule(symbol.STMT) | |||||
| return rule | |||||
| } | } | ||||
| func (node *Statement) fileInputChild() {} | |||||
| func (node *Statement) SetChild(n StatementChildNode) { node.ParentNode.SetChild(n) } | |||||
| func (rule *Statement) fileInputChild() {} | |||||
| func (rule *Statement) SetChild(n StatementChild) { rule.ParentRule.SetChild(n) } | |||||
| type SimpleStatementChildNode interface { | |||||
| Node | |||||
| type SimpleStatementChild interface { | |||||
| Rule | |||||
| simpleStatementChild() | simpleStatementChild() | ||||
| } | } | ||||
| type SimpleStatement struct { | type SimpleStatement struct { | ||||
| ListNode | |||||
| ListRule | |||||
| } | } | ||||
| func NewSimpleStatement() *SimpleStatement { | func NewSimpleStatement() *SimpleStatement { | ||||
| node := &SimpleStatement{} | |||||
| node.initBaseNode(SIMPLE_STMT) | |||||
| node.initListNode() | |||||
| return node | |||||
| rule := &SimpleStatement{} | |||||
| rule.initBaseRule(symbol.SIMPLE_STMT) | |||||
| rule.initListRule() | |||||
| return rule | |||||
| } | } | ||||
| func (node *SimpleStatement) stmtChildNode() {} | |||||
| func (node *SimpleStatement) Append(n SimpleStatementChildNode) { node.ListNode.Append(n) } | |||||
| func (rule *SimpleStatement) stmtChild() {} | |||||
| func (rule *SimpleStatement) Append(n SimpleStatementChild) { rule.ListRule.Append(n) } | |||||
| type CompoundStatement struct { | type CompoundStatement struct { | ||||
| BaseNode | |||||
| BaseRule | |||||
| } | } | ||||
| func NewCompoundStatement() *CompoundStatement { | func NewCompoundStatement() *CompoundStatement { | ||||
| node := &CompoundStatement{} | |||||
| node.initBaseNode(COMPOUND_STMT) | |||||
| return node | |||||
| rule := &CompoundStatement{} | |||||
| rule.initBaseRule(symbol.COMPOUND_STMT) | |||||
| return rule | |||||
| } | } | ||||
| func (node *CompoundStatement) stmtChildNode() {} | |||||
| func (rule *CompoundStatement) stmtChild() {} | |||||
| type SmallStatementChildNode interface { | |||||
| Node | |||||
| type SmallStatementChild interface { | |||||
| Rule | |||||
| smallStmtChild() | smallStmtChild() | ||||
| } | } | ||||
| type SmallStatement struct { | type SmallStatement struct { | ||||
| ParentNode | |||||
| ParentRule | |||||
| } | } | ||||
| func NewSmallStatement() *SmallStatement { | func NewSmallStatement() *SmallStatement { | ||||
| node := &SmallStatement{} | |||||
| node.initBaseNode(SMALL_STMT) | |||||
| return node | |||||
| rule := &SmallStatement{} | |||||
| rule.initBaseRule(symbol.SMALL_STMT) | |||||
| return rule | |||||
| } | } | ||||
| func (node *SmallStatement) simpleStatementChild() {} | |||||
| func (node *SmallStatement) SetChild(n SmallStatementChildNode) { node.ParentNode.SetChild(n) } | |||||
| func (rule *SmallStatement) simpleStatementChild() {} | |||||
| func (rule *SmallStatement) SetChild(n SmallStatementChild) { rule.ParentRule.SetChild(n) } | |||||
| type ExpressionStatementChildNode interface { | |||||
| Node | |||||
| type ExpressionStatementChild interface { | |||||
| Rule | |||||
| expressionStatementChild() | expressionStatementChild() | ||||
| } | } | ||||
| type ExpressionStatement struct { | type ExpressionStatement struct { | ||||
| ListNode | |||||
| ListRule | |||||
| Expression *TestlistStarExpression | Expression *TestlistStarExpression | ||||
| } | } | ||||
| func NewExpressionStatement() *ExpressionStatement { | func NewExpressionStatement() *ExpressionStatement { | ||||
| node := &ExpressionStatement{} | |||||
| node.initBaseNode(EXPR_STMT) | |||||
| node.initListNode() | |||||
| return node | |||||
| rule := &ExpressionStatement{} | |||||
| rule.initBaseRule(symbol.EXPR_STMT) | |||||
| rule.initListRule() | |||||
| return rule | |||||
| } | } | ||||
| func (node *ExpressionStatement) smallStmtChild() {} | |||||
| func (node *ExpressionStatement) Append(n ExpressionStatementChildNode) { node.ListNode.Append(n) } | |||||
| func (rule *ExpressionStatement) smallStmtChild() {} | |||||
| func (rule *ExpressionStatement) Append(n ExpressionStatementChild) { rule.ListRule.Append(n) } | |||||
| @ -1,75 +1,77 @@ | |||||
| package grammar | package grammar | ||||
| type TestChildNode interface { | |||||
| Node | |||||
| import "github.com/brettlangdon/gython/symbol" | |||||
| type TestChild interface { | |||||
| Rule | |||||
| testChild() | testChild() | ||||
| } | } | ||||
| type Test struct { | type Test struct { | ||||
| ListNode | |||||
| ListRule | |||||
| } | } | ||||
| func NewTest() *Test { | func NewTest() *Test { | ||||
| node := &Test{} | |||||
| node.initBaseNode(TEST) | |||||
| return node | |||||
| rule := &Test{} | |||||
| rule.initBaseRule(symbol.TEST) | |||||
| return rule | |||||
| } | } | ||||
| func (node *Test) testlistStarExpressionChild() {} | |||||
| func (node *Test) testChild() {} | |||||
| func (node *Test) Append(n TestChildNode) { node.ListNode.Append(n) } | |||||
| func (rule *Test) testlistStarExpressionChild() {} | |||||
| func (rule *Test) testChild() {} | |||||
| func (rule *Test) Append(n TestChild) { rule.ListRule.Append(n) } | |||||
| type OrTestChildNode interface { | |||||
| Node | |||||
| type OrTestChild interface { | |||||
| Rule | |||||
| orTestChild() | orTestChild() | ||||
| } | } | ||||
| type OrTest struct { | type OrTest struct { | ||||
| ListNode | |||||
| ListRule | |||||
| } | } | ||||
| func NewOrTest() *OrTest { | func NewOrTest() *OrTest { | ||||
| node := &OrTest{} | |||||
| node.initBaseNode(OR_TEST) | |||||
| return node | |||||
| rule := &OrTest{} | |||||
| rule.initBaseRule(symbol.OR_TEST) | |||||
| return rule | |||||
| } | } | ||||
| func (node *OrTest) testChild() {} | |||||
| func (node *OrTest) Append(n OrTestChildNode) { node.ListNode.Append(n) } | |||||
| func (rule *OrTest) testChild() {} | |||||
| func (rule *OrTest) Append(n OrTestChild) { rule.ListRule.Append(n) } | |||||
| type AndTestChildNode interface { | |||||
| Node | |||||
| type AndTestChild interface { | |||||
| Rule | |||||
| andTestChild() | andTestChild() | ||||
| } | } | ||||
| type AndTest struct { | type AndTest struct { | ||||
| ListNode | |||||
| ListRule | |||||
| } | } | ||||
| func NewAndTest() *AndTest { | func NewAndTest() *AndTest { | ||||
| node := &AndTest{} | |||||
| node.initBaseNode(AND_TEST) | |||||
| return node | |||||
| rule := &AndTest{} | |||||
| rule.initBaseRule(symbol.AND_TEST) | |||||
| return rule | |||||
| } | } | ||||
| func (node *AndTest) orTestChild() {} | |||||
| func (node *AndTest) Append(n AndTestChildNode) { node.ListNode.Append(n) } | |||||
| func (rule *AndTest) orTestChild() {} | |||||
| func (rule *AndTest) Append(n AndTestChild) { rule.ListRule.Append(n) } | |||||
| type NotTestChild interface { | type NotTestChild interface { | ||||
| Node | |||||
| Rule | |||||
| notTestChild() | notTestChild() | ||||
| } | } | ||||
| type NotTest struct { | type NotTest struct { | ||||
| ParentNode | |||||
| ParentRule | |||||
| } | } | ||||
| func NewNotTest() *NotTest { | func NewNotTest() *NotTest { | ||||
| node := &NotTest{} | |||||
| node.initBaseNode(NOT_TEST) | |||||
| return node | |||||
| rule := &NotTest{} | |||||
| rule.initBaseRule(symbol.NOT_TEST) | |||||
| return rule | |||||
| } | } | ||||
| func (node *NotTest) notTestChild() {} | |||||
| func (node *NotTest) andTestChild() {} | |||||
| func (node *NotTest) SetChild(n NotTestChild) { node.ParentNode.SetChild(n) } | |||||
| func (rule *NotTest) notTestChild() {} | |||||
| func (rule *NotTest) andTestChild() {} | |||||
| func (rule *NotTest) SetChild(n NotTestChild) { rule.ParentRule.SetChild(n) } | |||||