diff --git a/example.php b/example.php index 2c2c9cb..740f15a 100644 --- a/example.php +++ b/example.php @@ -31,10 +31,9 @@ $a = 'string with out $var'; $a = << - \ No newline at end of file + \ No newline at end of file diff --git a/lexer.go b/lexer.go index f728bf1..7c54fcc 100644 --- a/lexer.go +++ b/lexer.go @@ -2,7 +2,7 @@ package main import ( "bufio" - gotoken "go/token" + "go/token" "io" "unicode" @@ -37,7 +37,7 @@ func rune2Class(r rune) int { } func newLexer(src io.Reader, fName string) *lexer { - file := gotoken.NewFileSet().AddFile(fName, -1, 1<<31-1) + file := token.NewFileSet().AddFile(fName, -1, 1<<31-1) lx, err := lex.New(file, bufio.NewReader(src), lex.RuneClass(rune2Class)) if err != nil { panic(err) diff --git a/main.go b/main.go index 2b86a7c..5da1056 100644 --- a/main.go +++ b/main.go @@ -21,8 +21,8 @@ func main() { fmt.Printf("\n==> %s", real) src, _ := os.Open(string(real)) - rn := parse(src, real) - fmt.Println(rn) + rootnode := parse(src, real) + fmt.Println(rootnode) } } diff --git a/node.go b/node.go deleted file mode 100644 index 575a84a..0000000 --- a/node.go +++ /dev/null @@ -1,44 +0,0 @@ -package main - -import ( - "bytes" - "fmt" - "io" -) - -type node struct { - name string - children []node - attributes map[string]string -} - -func (n node) String() string { - buf := new(bytes.Buffer) - n.print(buf, " ") - return buf.String() -} - -func (n node) print(out io.Writer, indent string) { - if len(n.attributes) > 0 { - fmt.Fprintf(out, "\n%v%v %s", indent, n.name, n.attributes) - } else { - fmt.Fprintf(out, "\n%v%v", indent, n.name) - } - for _, nn := range n.children { - nn.print(out, indent+" ") - } -} - -func Node(name string) node { - return node{name: name, attributes: make(map[string]string)} -} - -func (n node) append(nn ...node) node { - n.children = append(n.children, nn...) - return n -} - -func (n node) attribute(key string, value string) node { - n.attributes[key] = value - return n -} diff --git a/node/node.go b/node/node.go new file mode 100644 index 0000000..7beae34 --- /dev/null +++ b/node/node.go @@ -0,0 +1,70 @@ +package node + +import ( + "bytes" + "fmt" + "github.com/z7zmey/php-parser/token" + "io" +) + +type Node interface { + Print(out io.Writer, indent string) + Append(nn ...Node) Node + Attribute(key string, value string) Node +} + +type simpleNode struct { + name string + children []Node + attributes map[string]string +} + +type tokenNode struct { + *simpleNode + token token.Token +} + +func (n simpleNode) String() string { + buf := new(bytes.Buffer) + n.Print(buf, " ") + return buf.String() +} + +func (n simpleNode) Print(out io.Writer, indent string) { + if len(n.attributes) > 0 { + fmt.Fprintf(out, "\n%v%v %s", indent, n.name, n.attributes) + } else { + fmt.Fprintf(out, "\n%v%v", indent, n.name) + } + for _, nn := range n.children { + nn.Print(out, indent+" ") + } +} + +func SimpleNode(name string) Node { + return simpleNode{name: name, attributes: make(map[string]string)} +} + +func TokenNode(name string, t token.Token) Node { + return tokenNode{ + &simpleNode{name: name, attributes: make(map[string]string)}, + t, + } +} + +func (n tokenNode) Print(out io.Writer, indent string) { + fmt.Fprintf(out, "\n%v%v [%d %d] %q", indent, n.name, n.token.StartLine, n.token.EndLine, n.token.Value) + for _, nn := range n.children { + nn.Print(out, indent+" ") + } +} + +func (n simpleNode) Append(nn ...Node) Node { + n.children = append(n.children, nn...) + return n +} + +func (n simpleNode) Attribute(key string, value string) Node { + n.attributes[key] = value + return n +} diff --git a/parser.go b/parser.go index c349457..3a11ab3 100644 --- a/parser.go +++ b/parser.go @@ -5,22 +5,24 @@ import __yyfmt__ "fmt" //line parser.y:2 import ( + "github.com/z7zmey/php-parser/node" + "github.com/z7zmey/php-parser/token" "io" ) -var rootNode = Node("Root") +var rootnode = node.SimpleNode("Root") -func parse(src io.Reader, fName string) node { - rootNode = Node("Root") //reset +func parse(src io.Reader, fName string) node.Node { + rootnode = node.SimpleNode("Root") //reset yyParse(newLexer(src, fName)) - return rootNode + return rootnode } -//line parser.y:18 +//line parser.y:20 type yySymType struct { yys int - node node - token token + node node.Node + token token.Token value string } @@ -336,7 +338,7 @@ const yyEofCode = 1 const yyErrCode = 2 const yyInitialStackSize = 16 -//line parser.y:1172 +//line parser.y:1174 //line yacctab:1 var yyExca = [...]int{ @@ -2032,2964 +2034,2964 @@ yydefault: case 1: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:206 + //line parser.y:208 { - rootNode = yyDollar[1].node + rootnode = yyDollar[1].node } case 2: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:210 + //line parser.y:212 { yyVAL.token = yyDollar[1].token } case 3: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:210 + //line parser.y:212 { yyVAL.token = yyDollar[1].token } case 4: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:210 + //line parser.y:212 { yyVAL.token = yyDollar[1].token } case 5: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:210 + //line parser.y:212 { yyVAL.token = yyDollar[1].token } case 6: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:210 + //line parser.y:212 { yyVAL.token = yyDollar[1].token } case 7: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:210 + //line parser.y:212 { yyVAL.token = yyDollar[1].token } case 8: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:210 + //line parser.y:212 { yyVAL.token = yyDollar[1].token } case 9: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:210 + //line parser.y:212 { yyVAL.token = yyDollar[1].token } case 10: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:211 + //line parser.y:213 { yyVAL.token = yyDollar[1].token } case 11: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:211 + //line parser.y:213 { yyVAL.token = yyDollar[1].token } case 12: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:211 + //line parser.y:213 { yyVAL.token = yyDollar[1].token } case 13: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:211 + //line parser.y:213 { yyVAL.token = yyDollar[1].token } case 14: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:211 + //line parser.y:213 { yyVAL.token = yyDollar[1].token } case 15: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:211 + //line parser.y:213 { yyVAL.token = yyDollar[1].token } case 16: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:211 + //line parser.y:213 { yyVAL.token = yyDollar[1].token } case 17: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:211 + //line parser.y:213 { yyVAL.token = yyDollar[1].token } case 18: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:211 + //line parser.y:213 { yyVAL.token = yyDollar[1].token } case 19: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:211 + //line parser.y:213 { yyVAL.token = yyDollar[1].token } case 20: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:211 + //line parser.y:213 { yyVAL.token = yyDollar[1].token } case 21: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:211 + //line parser.y:213 { yyVAL.token = yyDollar[1].token } case 22: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:212 + //line parser.y:214 { yyVAL.token = yyDollar[1].token } case 23: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:212 + //line parser.y:214 { yyVAL.token = yyDollar[1].token } case 24: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:212 + //line parser.y:214 { yyVAL.token = yyDollar[1].token } case 25: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:212 + //line parser.y:214 { yyVAL.token = yyDollar[1].token } case 26: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:212 + //line parser.y:214 { yyVAL.token = yyDollar[1].token } case 27: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:212 + //line parser.y:214 { yyVAL.token = yyDollar[1].token } case 28: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:212 + //line parser.y:214 { yyVAL.token = yyDollar[1].token } case 29: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:212 + //line parser.y:214 { yyVAL.token = yyDollar[1].token } case 30: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:212 + //line parser.y:214 { yyVAL.token = yyDollar[1].token } case 31: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:212 + //line parser.y:214 { yyVAL.token = yyDollar[1].token } case 32: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:213 + //line parser.y:215 { yyVAL.token = yyDollar[1].token } case 33: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:213 + //line parser.y:215 { yyVAL.token = yyDollar[1].token } case 34: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:213 + //line parser.y:215 { yyVAL.token = yyDollar[1].token } case 35: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:213 + //line parser.y:215 { yyVAL.token = yyDollar[1].token } case 36: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:213 + //line parser.y:215 { yyVAL.token = yyDollar[1].token } case 37: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:213 + //line parser.y:215 { yyVAL.token = yyDollar[1].token } case 38: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:213 + //line parser.y:215 { yyVAL.token = yyDollar[1].token } case 39: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:213 + //line parser.y:215 { yyVAL.token = yyDollar[1].token } case 40: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:213 + //line parser.y:215 { yyVAL.token = yyDollar[1].token } case 41: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:213 + //line parser.y:215 { yyVAL.token = yyDollar[1].token } case 42: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:214 + //line parser.y:216 { yyVAL.token = yyDollar[1].token } case 43: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:214 + //line parser.y:216 { yyVAL.token = yyDollar[1].token } case 44: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:214 + //line parser.y:216 { yyVAL.token = yyDollar[1].token } case 45: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:214 + //line parser.y:216 { yyVAL.token = yyDollar[1].token } case 46: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:214 + //line parser.y:216 { yyVAL.token = yyDollar[1].token } case 47: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:214 + //line parser.y:216 { yyVAL.token = yyDollar[1].token } case 48: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:214 + //line parser.y:216 { yyVAL.token = yyDollar[1].token } case 49: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:214 + //line parser.y:216 { yyVAL.token = yyDollar[1].token } case 50: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:214 + //line parser.y:216 { yyVAL.token = yyDollar[1].token } case 51: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:214 + //line parser.y:216 { yyVAL.token = yyDollar[1].token } case 52: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:214 + //line parser.y:216 { yyVAL.token = yyDollar[1].token } case 53: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:215 + //line parser.y:217 { yyVAL.token = yyDollar[1].token } case 54: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:215 + //line parser.y:217 { yyVAL.token = yyDollar[1].token } case 55: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:215 + //line parser.y:217 { yyVAL.token = yyDollar[1].token } case 56: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:215 + //line parser.y:217 { yyVAL.token = yyDollar[1].token } case 57: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:215 + //line parser.y:217 { yyVAL.token = yyDollar[1].token } case 58: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:215 + //line parser.y:217 { yyVAL.token = yyDollar[1].token } case 59: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:215 + //line parser.y:217 { yyVAL.token = yyDollar[1].token } case 60: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:215 + //line parser.y:217 { yyVAL.token = yyDollar[1].token } case 61: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:216 + //line parser.y:218 { yyVAL.token = yyDollar[1].token } case 62: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:216 + //line parser.y:218 { yyVAL.token = yyDollar[1].token } case 63: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:216 + //line parser.y:218 { yyVAL.token = yyDollar[1].token } case 64: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:216 + //line parser.y:218 { yyVAL.token = yyDollar[1].token } case 65: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:216 + //line parser.y:218 { yyVAL.token = yyDollar[1].token } case 66: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:216 + //line parser.y:218 { yyVAL.token = yyDollar[1].token } case 67: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:216 + //line parser.y:218 { yyVAL.token = yyDollar[1].token } case 68: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:216 + //line parser.y:218 { yyVAL.token = yyDollar[1].token } case 69: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:220 + //line parser.y:222 { yyVAL.token = yyDollar[1].token } case 70: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:221 + //line parser.y:223 { yyVAL.token = yyDollar[1].token } case 71: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:221 + //line parser.y:223 { yyVAL.token = yyDollar[1].token } case 72: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:221 + //line parser.y:223 { yyVAL.token = yyDollar[1].token } case 73: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:221 + //line parser.y:223 { yyVAL.token = yyDollar[1].token } case 74: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:221 + //line parser.y:223 { yyVAL.token = yyDollar[1].token } case 75: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:221 + //line parser.y:223 { yyVAL.token = yyDollar[1].token } case 76: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:225 + //line parser.y:227 { - yyVAL.node = Node("identifier").attribute("value", yyDollar[1].token.String()) + yyVAL.node = node.TokenNode("identifier", yyDollar[1].token) } case 77: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:226 + //line parser.y:228 { - yyVAL.node = Node("identifier").attribute("value", yyDollar[1].token.String()) + yyVAL.node = node.TokenNode("identifier", yyDollar[1].token) } case 78: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:230 + //line parser.y:232 { - yyVAL.node = yyDollar[1].node.append(yyDollar[2].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[2].node) } case 79: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:231 + //line parser.y:233 { - yyVAL.node = Node("Statements") + yyVAL.node = node.SimpleNode("Statements") } case 80: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:235 + //line parser.y:237 { - yyVAL.node = Node("NamespaceParts").append(Node(yyDollar[1].token.String())) + yyVAL.node = node.SimpleNode("NamespaceParts").Append(node.TokenNode("NsPart", yyDollar[1].token)) } case 81: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:236 + //line parser.y:238 { - yyVAL.node = yyDollar[1].node.append(Node(yyDollar[3].token.String())) + yyVAL.node = yyDollar[1].node.Append(node.TokenNode("NsPart", yyDollar[3].token)) } case 82: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:240 + //line parser.y:242 { - yyVAL.node = Node("Name").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("Name").Append(yyDollar[1].node) } case 83: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:241 + //line parser.y:243 { - yyVAL.node = Node("Name").append(yyDollar[3].node).attribute("Relative", "true") + yyVAL.node = node.SimpleNode("Name").Append(yyDollar[3].node).Attribute("Relative", "true") } case 84: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:242 + //line parser.y:244 { - yyVAL.node = Node("Name").append(yyDollar[2].node).attribute("FullyQualified", "true") + yyVAL.node = node.SimpleNode("Name").Append(yyDollar[2].node).Attribute("FullyQualified", "true") } case 85: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:246 - { - yyVAL.node = yyDollar[1].node - } - case 86: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:247 - { - yyVAL.node = yyDollar[1].node - } - case 87: yyDollar = yyS[yypt-1 : yypt+1] //line parser.y:248 { yyVAL.node = yyDollar[1].node } - case 88: + case 86: yyDollar = yyS[yypt-1 : yypt+1] //line parser.y:249 { yyVAL.node = yyDollar[1].node } - case 89: + case 87: yyDollar = yyS[yypt-1 : yypt+1] //line parser.y:250 { yyVAL.node = yyDollar[1].node } - case 90: - yyDollar = yyS[yypt-4 : yypt+1] + case 88: + yyDollar = yyS[yypt-1 : yypt+1] //line parser.y:251 { - yyVAL.node = Node("THaltCompiler") + yyVAL.node = yyDollar[1].node + } + case 89: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser.y:252 + { + yyVAL.node = yyDollar[1].node + } + case 90: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser.y:253 + { + yyVAL.node = node.SimpleNode("THaltCompiler") } case 91: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:252 + //line parser.y:254 { - yyVAL.node = Node("Namespace").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("Namespace").Append(yyDollar[2].node) } case 92: yyDollar = yyS[yypt-5 : yypt+1] - //line parser.y:254 + //line parser.y:256 { - yyVAL.node = Node("Namespace").append(yyDollar[2].node).append(yyDollar[4].node) + yyVAL.node = node.SimpleNode("Namespace").Append(yyDollar[2].node).Append(yyDollar[4].node) } case 93: - yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:255 - { - yyVAL.node = Node("Namespace").append(yyDollar[3].node) - } - case 94: - yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:256 - { - yyVAL.node = yyDollar[2].node - } - case 95: yyDollar = yyS[yypt-4 : yypt+1] //line parser.y:257 { - yyVAL.node = yyDollar[3].node.append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("Namespace").Append(yyDollar[3].node) } - case 96: + case 94: yyDollar = yyS[yypt-3 : yypt+1] //line parser.y:258 { yyVAL.node = yyDollar[2].node } - case 97: + case 95: yyDollar = yyS[yypt-4 : yypt+1] //line parser.y:259 { - yyVAL.node = yyDollar[3].node.append(yyDollar[2].node) + yyVAL.node = yyDollar[3].node.Append(yyDollar[2].node) } - case 98: + case 96: yyDollar = yyS[yypt-3 : yypt+1] //line parser.y:260 { yyVAL.node = yyDollar[2].node } + case 97: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser.y:261 + { + yyVAL.node = yyDollar[3].node.Append(yyDollar[2].node) + } + case 98: + yyDollar = yyS[yypt-3 : yypt+1] + //line parser.y:262 + { + yyVAL.node = yyDollar[2].node + } case 99: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:264 + //line parser.y:266 { - yyVAL.node = Node("FuncUseType") + yyVAL.node = node.SimpleNode("FuncUseType") } case 100: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:265 + //line parser.y:267 { - yyVAL.node = Node("ConstUseType") + yyVAL.node = node.SimpleNode("ConstUseType") } case 101: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:270 + //line parser.y:272 { - yyVAL.node = Node("GroupUse").append(yyDollar[1].node).append(yyDollar[4].node) + yyVAL.node = node.SimpleNode("GroupUse").Append(yyDollar[1].node).Append(yyDollar[4].node) } case 102: yyDollar = yyS[yypt-7 : yypt+1] - //line parser.y:272 + //line parser.y:274 { - yyVAL.node = Node("GroupUse").append(yyDollar[2].node).append(yyDollar[5].node) + yyVAL.node = node.SimpleNode("GroupUse").Append(yyDollar[2].node).Append(yyDollar[5].node) } case 103: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:277 + //line parser.y:279 { - yyVAL.node = Node("MixedGroupUse").append(yyDollar[1].node).append(yyDollar[4].node) + yyVAL.node = node.SimpleNode("MixedGroupUse").Append(yyDollar[1].node).Append(yyDollar[4].node) } case 104: yyDollar = yyS[yypt-7 : yypt+1] - //line parser.y:279 + //line parser.y:281 { - yyVAL.node = Node("MixedGroupUse").append(yyDollar[2].node).append(yyDollar[5].node) + yyVAL.node = node.SimpleNode("MixedGroupUse").Append(yyDollar[2].node).Append(yyDollar[5].node) } case 107: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:289 + //line parser.y:291 { - yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[3].node) } case 108: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:290 + //line parser.y:292 { - yyVAL.node = Node("UseList").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("UseList").Append(yyDollar[1].node) } case 109: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:295 + //line parser.y:297 { - yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[3].node) } case 110: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:296 + //line parser.y:298 { - yyVAL.node = Node("UseList").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("UseList").Append(yyDollar[1].node) } case 111: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:300 + //line parser.y:302 { - yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[3].node) } case 112: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:301 + //line parser.y:303 { - yyVAL.node = Node("UseList").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("UseList").Append(yyDollar[1].node) } case 113: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:305 + //line parser.y:307 { yyVAL.node = yyDollar[1].node } case 114: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:306 + //line parser.y:308 { - yyVAL.node = yyDollar[2].node.append(yyDollar[1].node) + yyVAL.node = yyDollar[2].node.Append(yyDollar[1].node) } case 115: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:310 + //line parser.y:312 { - yyVAL.node = Node("UseElem").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("UseElem").Append(yyDollar[1].node) } case 116: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:311 + //line parser.y:313 { - yyVAL.node = Node("UseElem").append(yyDollar[1].node).append(Node("as").attribute("value", yyDollar[3].token.String())) + yyVAL.node = node.SimpleNode("UseElem").Append(yyDollar[1].node).Append(node.SimpleNode("as").Attribute("value", yyDollar[3].token.String())) } case 117: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:315 + //line parser.y:317 { yyVAL.node = yyDollar[1].node } case 118: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:316 + //line parser.y:318 { yyVAL.node = yyDollar[2].node } case 119: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:320 + //line parser.y:322 { - yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[3].node) } case 120: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:321 + //line parser.y:323 { - yyVAL.node = Node("ConstList").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("ConstList").Append(yyDollar[1].node) } case 121: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:325 + //line parser.y:327 { - yyVAL.node = yyDollar[1].node.append(yyDollar[2].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[2].node) } case 122: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:326 + //line parser.y:328 { - yyVAL.node = Node("stmt") + yyVAL.node = node.SimpleNode("stmt") } case 123: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:330 - { - yyVAL.node = yyDollar[1].node - } - case 124: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:331 - { - yyVAL.node = yyDollar[1].node - } - case 125: yyDollar = yyS[yypt-1 : yypt+1] //line parser.y:332 { yyVAL.node = yyDollar[1].node } - case 126: + case 124: yyDollar = yyS[yypt-1 : yypt+1] //line parser.y:333 { yyVAL.node = yyDollar[1].node } - case 127: + case 125: yyDollar = yyS[yypt-1 : yypt+1] //line parser.y:334 { yyVAL.node = yyDollar[1].node } - case 128: - yyDollar = yyS[yypt-4 : yypt+1] + case 126: + yyDollar = yyS[yypt-1 : yypt+1] //line parser.y:335 { - yyVAL.node = Node("THaltCompiler") + yyVAL.node = yyDollar[1].node + } + case 127: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser.y:336 + { + yyVAL.node = yyDollar[1].node + } + case 128: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser.y:337 + { + yyVAL.node = node.SimpleNode("THaltCompiler") } case 129: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:338 + //line parser.y:340 { yyVAL.node = yyDollar[2].node } case 130: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:339 + //line parser.y:341 { yyVAL.node = yyDollar[1].node } case 131: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:340 + //line parser.y:342 { yyVAL.node = yyDollar[1].node } case 132: yyDollar = yyS[yypt-5 : yypt+1] - //line parser.y:342 + //line parser.y:344 { - yyVAL.node = Node("While"). - append(Node("expr").append(yyDollar[3].node)). - append(Node("stmt").append(yyDollar[5].node)) + yyVAL.node = node.SimpleNode("While"). + Append(node.SimpleNode("expr").Append(yyDollar[3].node)). + Append(node.SimpleNode("stmt").Append(yyDollar[5].node)) } case 133: yyDollar = yyS[yypt-7 : yypt+1] - //line parser.y:348 + //line parser.y:350 { - yyVAL.node = Node("DoWhile"). - append(Node("expr").append(yyDollar[5].node)). - append(Node("stmt").append(yyDollar[2].node)) + yyVAL.node = node.SimpleNode("DoWhile"). + Append(node.SimpleNode("expr").Append(yyDollar[5].node)). + Append(node.SimpleNode("stmt").Append(yyDollar[2].node)) } case 134: yyDollar = yyS[yypt-9 : yypt+1] - //line parser.y:354 + //line parser.y:356 { - yyVAL.node = Node("For"). - append(Node("expr1").append(yyDollar[3].node)). - append(Node("expr2").append(yyDollar[5].node)). - append(Node("expr3").append(yyDollar[7].node)). - append(Node("stmt").append(yyDollar[9].node)) + yyVAL.node = node.SimpleNode("For"). + Append(node.SimpleNode("expr1").Append(yyDollar[3].node)). + Append(node.SimpleNode("expr2").Append(yyDollar[5].node)). + Append(node.SimpleNode("expr3").Append(yyDollar[7].node)). + Append(node.SimpleNode("stmt").Append(yyDollar[9].node)) } case 135: yyDollar = yyS[yypt-5 : yypt+1] - //line parser.y:361 + //line parser.y:363 { - yyVAL.node = Node("Switch").append(Node("expr").append(yyDollar[3].node)).append(yyDollar[5].node) + yyVAL.node = node.SimpleNode("Switch").Append(node.SimpleNode("expr").Append(yyDollar[3].node)).Append(yyDollar[5].node) } case 136: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:362 + //line parser.y:364 { - yyVAL.node = Node("Break").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("Break").Append(yyDollar[2].node) } case 137: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:363 + //line parser.y:365 { - yyVAL.node = Node("Continue").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("Continue").Append(yyDollar[2].node) } case 138: - yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:364 - { - yyVAL.node = Node("Return").append(yyDollar[2].node) - } - case 139: - yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:365 - { - yyVAL.node = yyDollar[2].node - } - case 140: yyDollar = yyS[yypt-3 : yypt+1] //line parser.y:366 { - yyVAL.node = yyDollar[2].node + yyVAL.node = node.SimpleNode("Return").Append(yyDollar[2].node) } - case 141: + case 139: yyDollar = yyS[yypt-3 : yypt+1] //line parser.y:367 { yyVAL.node = yyDollar[2].node } - case 142: - yyDollar = yyS[yypt-1 : yypt+1] + case 140: + yyDollar = yyS[yypt-3 : yypt+1] //line parser.y:368 { - yyVAL.node = Node("Echo").append(Node("InlineHtml").attribute("value", yyDollar[1].token.String())) + yyVAL.node = yyDollar[2].node + } + case 141: + yyDollar = yyS[yypt-3 : yypt+1] + //line parser.y:369 + { + yyVAL.node = yyDollar[2].node + } + case 142: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser.y:370 + { + yyVAL.node = node.SimpleNode("Echo").Append(node.SimpleNode("InlineHtml").Attribute("value", yyDollar[1].token.String())) } case 143: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:369 + //line parser.y:371 { yyVAL.node = yyDollar[1].node } case 144: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:371 + //line parser.y:373 { - yyVAL.node = Node("Unset").append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Unset").Append(yyDollar[3].node) } case 145: yyDollar = yyS[yypt-7 : yypt+1] - //line parser.y:373 + //line parser.y:375 { - yyVAL.node = Node("Foreach"). - append(Node("expr").append(yyDollar[3].node)). - append(Node("ForeachVariable").append(yyDollar[5].node)). - append(yyDollar[7].node) + yyVAL.node = node.SimpleNode("Foreach"). + Append(node.SimpleNode("expr").Append(yyDollar[3].node)). + Append(node.SimpleNode("ForeachVariable").Append(yyDollar[5].node)). + Append(yyDollar[7].node) } case 146: yyDollar = yyS[yypt-9 : yypt+1] - //line parser.y:380 + //line parser.y:382 { - yyVAL.node = Node("Foreach"). - append(Node("expr").append(yyDollar[3].node)). - append(Node("ForeachKey").append(yyDollar[5].node)). - append(Node("ForeachVariable").append(yyDollar[7].node)). - append(yyDollar[9].node) + yyVAL.node = node.SimpleNode("Foreach"). + Append(node.SimpleNode("expr").Append(yyDollar[3].node)). + Append(node.SimpleNode("ForeachKey").Append(yyDollar[5].node)). + Append(node.SimpleNode("ForeachVariable").Append(yyDollar[7].node)). + Append(yyDollar[9].node) } case 147: yyDollar = yyS[yypt-5 : yypt+1] - //line parser.y:387 + //line parser.y:389 { - yyVAL.node = Node("Declare").append(yyDollar[3].node).append(yyDollar[5].node) + yyVAL.node = node.SimpleNode("Declare").Append(yyDollar[3].node).Append(yyDollar[5].node) } case 148: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:388 + //line parser.y:390 { - yyVAL.node = Node("") + yyVAL.node = node.SimpleNode("") } case 149: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:390 + //line parser.y:392 { - yyVAL.node = Node("Try"). - append(yyDollar[3].node). - append(yyDollar[5].node). - append(yyDollar[6].node) + yyVAL.node = node.SimpleNode("Try"). + Append(yyDollar[3].node). + Append(yyDollar[5].node). + Append(yyDollar[6].node) } case 150: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:396 + //line parser.y:398 { - yyVAL.node = Node("Throw").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("Throw").Append(yyDollar[2].node) } case 151: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:397 + //line parser.y:399 { - yyVAL.node = Node("GoTo").attribute("Label", yyDollar[2].token.String()) + yyVAL.node = node.SimpleNode("GoTo").Attribute("Label", yyDollar[2].token.String()) } case 152: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:398 + //line parser.y:400 { - yyVAL.node = Node("Label").attribute("name", yyDollar[1].token.String()) + yyVAL.node = node.SimpleNode("Label").Attribute("name", yyDollar[1].token.String()) } case 153: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:401 + //line parser.y:403 { - yyVAL.node = Node("CatchList") + yyVAL.node = node.SimpleNode("CatchList") } case 154: yyDollar = yyS[yypt-9 : yypt+1] - //line parser.y:403 + //line parser.y:405 { - yyVAL.node = yyDollar[1].node.append(yyDollar[4].node).append(Node("Variable").attribute("name", yyDollar[5].token.String())).append(yyDollar[8].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[4].node).Append(node.SimpleNode("Variable").Attribute("name", yyDollar[5].token.String())).Append(yyDollar[8].node) } case 155: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:406 + //line parser.y:408 { - yyVAL.node = Node("CatchNameList").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("CatchNameList").Append(yyDollar[1].node) } case 156: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:407 + //line parser.y:409 { - yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[3].node) } case 157: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:411 + //line parser.y:413 { - yyVAL.node = Node("") + yyVAL.node = node.SimpleNode("") } case 158: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:412 + //line parser.y:414 { - yyVAL.node = Node("Finnaly").append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Finnaly").Append(yyDollar[3].node) } case 159: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:416 + //line parser.y:418 { - yyVAL.node = Node("UnsetVariablesList").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("UnsetVariablesList").Append(yyDollar[1].node) } case 160: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:417 + //line parser.y:419 { - yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[3].node) } case 161: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:421 + //line parser.y:423 { yyVAL.node = yyDollar[1].node } case 162: yyDollar = yyS[yypt-10 : yypt+1] - //line parser.y:426 + //line parser.y:428 { - yyVAL.node = Node("Function"). - attribute("name", yyDollar[3].token.String()). - attribute("returns_ref", yyDollar[2].value). - append(yyDollar[5].node). - append(yyDollar[7].node). - append(yyDollar[9].node) + yyVAL.node = node.SimpleNode("Function"). + Attribute("name", yyDollar[3].token.String()). + Attribute("returns_ref", yyDollar[2].value). + Append(yyDollar[5].node). + Append(yyDollar[7].node). + Append(yyDollar[9].node) } case 163: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:437 + //line parser.y:439 { yyVAL.value = "false" } case 164: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:438 + //line parser.y:440 { yyVAL.value = "true" } case 165: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:442 + //line parser.y:444 { yyVAL.value = "false" } case 166: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:443 + //line parser.y:445 { yyVAL.value = "true" } case 167: yyDollar = yyS[yypt-8 : yypt+1] - //line parser.y:448 + //line parser.y:450 { - yyVAL.node = Node("Class"). - attribute("name", yyDollar[3].token.String()). - append(yyDollar[1].node). - append(Node("Extends").append(yyDollar[4].node)). - append(Node("Implements").append(yyDollar[5].node)). - append(yyDollar[7].node) + yyVAL.node = node.SimpleNode("Class"). + Attribute("name", yyDollar[3].token.String()). + Append(yyDollar[1].node). + Append(node.SimpleNode("Extends").Append(yyDollar[4].node)). + Append(node.SimpleNode("Implements").Append(yyDollar[5].node)). + Append(yyDollar[7].node) } case 168: yyDollar = yyS[yypt-7 : yypt+1] - //line parser.y:457 + //line parser.y:459 { - yyVAL.node = Node("Class"). - attribute("name", yyDollar[2].token.String()). - append(Node("Extends").append(yyDollar[3].node)). - append(Node("Implements").append(yyDollar[4].node)). - append(yyDollar[6].node) + yyVAL.node = node.SimpleNode("Class"). + Attribute("name", yyDollar[2].token.String()). + Append(node.SimpleNode("Extends").Append(yyDollar[3].node)). + Append(node.SimpleNode("Implements").Append(yyDollar[4].node)). + Append(yyDollar[6].node) } case 169: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:467 + //line parser.y:469 { - yyVAL.node = Node("Class").attribute(yyDollar[1].value, "true") + yyVAL.node = node.SimpleNode("Class").Attribute(yyDollar[1].value, "true") } case 170: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:468 + //line parser.y:470 { - yyVAL.node = yyDollar[1].node.attribute(yyDollar[2].value, "true") + yyVAL.node = yyDollar[1].node.Attribute(yyDollar[2].value, "true") } case 171: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:472 + //line parser.y:474 { yyVAL.value = "abstract" } case 172: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:473 + //line parser.y:475 { yyVAL.value = "final" } case 173: yyDollar = yyS[yypt-5 : yypt+1] - //line parser.y:477 + //line parser.y:479 { - yyVAL.node = Node("Trait").attribute("name", yyDollar[2].token.String()).append(yyDollar[4].node) + yyVAL.node = node.SimpleNode("Trait").Attribute("name", yyDollar[2].token.String()).Append(yyDollar[4].node) } case 174: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:482 + //line parser.y:484 { - yyVAL.node = Node("Interface"). - attribute("name", yyDollar[2].token.String()). - append(Node("Extends").append(yyDollar[3].node)). - append(yyDollar[5].node) + yyVAL.node = node.SimpleNode("Interface"). + Attribute("name", yyDollar[2].token.String()). + Append(node.SimpleNode("Extends").Append(yyDollar[3].node)). + Append(yyDollar[5].node) } case 175: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:491 + //line parser.y:493 { - yyVAL.node = Node("") + yyVAL.node = node.SimpleNode("") } case 176: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:492 + //line parser.y:494 { yyVAL.node = yyDollar[2].node } case 177: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:496 + //line parser.y:498 { - yyVAL.node = Node("") + yyVAL.node = node.SimpleNode("") } case 178: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:497 + //line parser.y:499 { yyVAL.node = yyDollar[2].node } case 179: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:501 + //line parser.y:503 { - yyVAL.node = Node("") + yyVAL.node = node.SimpleNode("") } case 180: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:502 + //line parser.y:504 { yyVAL.node = yyDollar[2].node } case 181: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:506 + //line parser.y:508 { yyVAL.node = yyDollar[1].node } case 182: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:507 + //line parser.y:509 { - yyVAL.node = Node("Ref").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("Ref").Append(yyDollar[2].node) } case 183: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:508 + //line parser.y:510 { - yyVAL.node = Node("List").append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("List").Append(yyDollar[3].node) } case 184: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:509 + //line parser.y:511 { - yyVAL.node = Node("ShortList").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("ShortList").Append(yyDollar[2].node) } case 185: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:513 + //line parser.y:515 { yyVAL.node = yyDollar[1].node } case 186: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:514 + //line parser.y:516 { yyVAL.node = yyDollar[2].node } case 187: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:518 + //line parser.y:520 { yyVAL.node = yyDollar[1].node } case 188: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:519 + //line parser.y:521 { yyVAL.node = yyDollar[2].node } case 189: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:523 + //line parser.y:525 { yyVAL.node = yyDollar[1].node } case 190: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:524 + //line parser.y:526 { yyVAL.node = yyDollar[2].node } case 191: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:528 + //line parser.y:530 { yyVAL.node = yyDollar[2].node } case 192: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:529 + //line parser.y:531 { yyVAL.node = yyDollar[3].node } case 193: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:530 + //line parser.y:532 { yyVAL.node = yyDollar[2].node } case 194: yyDollar = yyS[yypt-5 : yypt+1] - //line parser.y:531 + //line parser.y:533 { yyVAL.node = yyDollar[3].node } case 195: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:535 + //line parser.y:537 { - yyVAL.node = Node("CaseList") + yyVAL.node = node.SimpleNode("CaseList") } case 196: yyDollar = yyS[yypt-5 : yypt+1] - //line parser.y:537 + //line parser.y:539 { - yyVAL.node = yyDollar[1].node.append(Node("Case").append(Node("expr").append(yyDollar[3].node)).append(yyDollar[5].node)) + yyVAL.node = yyDollar[1].node.Append(node.SimpleNode("Case").Append(node.SimpleNode("expr").Append(yyDollar[3].node)).Append(yyDollar[5].node)) } case 197: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:541 + //line parser.y:543 { - yyVAL.node = yyDollar[1].node.append(Node("Default").append(yyDollar[4].node)) + yyVAL.node = yyDollar[1].node.Append(node.SimpleNode("Default").Append(yyDollar[4].node)) } case 200: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:552 + //line parser.y:554 { yyVAL.node = yyDollar[1].node } case 201: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:553 + //line parser.y:555 { yyVAL.node = yyDollar[2].node } case 202: yyDollar = yyS[yypt-5 : yypt+1] - //line parser.y:558 + //line parser.y:560 { - yyVAL.node = Node("If").append(Node("expr").append(yyDollar[3].node)).append(Node("stmt").append(yyDollar[5].node)) + yyVAL.node = node.SimpleNode("If").Append(node.SimpleNode("expr").Append(yyDollar[3].node)).Append(node.SimpleNode("stmt").Append(yyDollar[5].node)) } case 203: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:562 + //line parser.y:564 { - yyVAL.node = yyDollar[1].node.append(Node("ElseIf").append(Node("expr").append(yyDollar[4].node)).append(Node("stmt").append(yyDollar[6].node))) + yyVAL.node = yyDollar[1].node.Append(node.SimpleNode("ElseIf").Append(node.SimpleNode("expr").Append(yyDollar[4].node)).Append(node.SimpleNode("stmt").Append(yyDollar[6].node))) } case 204: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:568 + //line parser.y:570 { yyVAL.node = yyDollar[1].node } case 205: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:570 + //line parser.y:572 { - yyVAL.node = yyDollar[1].node.append(Node("Else").append(Node("stmt").append(yyDollar[3].node))) + yyVAL.node = yyDollar[1].node.Append(node.SimpleNode("Else").Append(node.SimpleNode("stmt").Append(yyDollar[3].node))) } case 206: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:577 + //line parser.y:579 { - yyVAL.node = Node("AltIf").append(Node("expr").append(yyDollar[3].node)).append(Node("stmt").append(yyDollar[6].node)) + yyVAL.node = node.SimpleNode("AltIf").Append(node.SimpleNode("expr").Append(yyDollar[3].node)).Append(node.SimpleNode("stmt").Append(yyDollar[6].node)) } case 207: yyDollar = yyS[yypt-7 : yypt+1] - //line parser.y:581 + //line parser.y:583 { - yyVAL.node = yyDollar[1].node.append(Node("AltElseIf").append(Node("expr").append(yyDollar[4].node)).append(Node("stmt").append(yyDollar[7].node))) + yyVAL.node = yyDollar[1].node.Append(node.SimpleNode("AltElseIf").Append(node.SimpleNode("expr").Append(yyDollar[4].node)).Append(node.SimpleNode("stmt").Append(yyDollar[7].node))) } case 208: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:587 + //line parser.y:589 { yyVAL.node = yyDollar[1].node } case 209: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:589 + //line parser.y:591 { - yyVAL.node = yyDollar[1].node.append(Node("AltElse").append(Node("stmt").append(yyDollar[4].node))) + yyVAL.node = yyDollar[1].node.Append(node.SimpleNode("AltElse").Append(node.SimpleNode("stmt").Append(yyDollar[4].node))) } case 210: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:595 + //line parser.y:597 { yyVAL.node = yyDollar[1].node } case 211: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:596 + //line parser.y:598 { - yyVAL.node = Node("Parameter list") + yyVAL.node = node.SimpleNode("Parameter list") } case 212: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:600 + //line parser.y:602 { - yyVAL.node = Node("Parameter list").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("Parameter list").Append(yyDollar[1].node) } case 213: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:601 + //line parser.y:603 { - yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[3].node) } case 214: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:606 + //line parser.y:608 { - yyVAL.node = Node("Parameter"). - append(yyDollar[1].node). - attribute("is_reference", yyDollar[2].value). - attribute("is_variadic", yyDollar[3].value). - attribute("var", yyDollar[4].token.String()) + yyVAL.node = node.SimpleNode("Parameter"). + Append(yyDollar[1].node). + Attribute("is_reference", yyDollar[2].value). + Attribute("is_variadic", yyDollar[3].value). + Attribute("var", yyDollar[4].token.String()) } case 215: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:614 + //line parser.y:616 { - yyVAL.node = Node("Parameter"). - append(yyDollar[1].node). - attribute("is_reference", yyDollar[2].value). - attribute("is_variadic", yyDollar[3].value). - attribute("var", yyDollar[4].token.String()). - append(yyDollar[6].node) + yyVAL.node = node.SimpleNode("Parameter"). + Append(yyDollar[1].node). + Attribute("is_reference", yyDollar[2].value). + Attribute("is_variadic", yyDollar[3].value). + Attribute("var", yyDollar[4].token.String()). + Append(yyDollar[6].node) } case 216: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:625 + //line parser.y:627 { - yyVAL.node = Node("No type") + yyVAL.node = node.SimpleNode("No type") } case 217: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:626 + //line parser.y:628 { yyVAL.node = yyDollar[1].node } case 218: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:630 + //line parser.y:632 { yyVAL.node = yyDollar[1].node } case 219: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:631 + //line parser.y:633 { yyVAL.node = yyDollar[2].node - yyVAL.node.attribute("nullable", "true") + yyVAL.node.Attribute("nullable", "true") } case 220: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:635 + //line parser.y:637 { - yyVAL.node = Node("array type") + yyVAL.node = node.SimpleNode("array type") } case 221: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:636 + //line parser.y:638 { - yyVAL.node = Node("callable type") + yyVAL.node = node.SimpleNode("callable type") } case 222: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:637 + //line parser.y:639 { yyVAL.node = yyDollar[1].node } case 223: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:641 + //line parser.y:643 { - yyVAL.node = Node("No return type") + yyVAL.node = node.SimpleNode("No return type") } case 224: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:642 + //line parser.y:644 { yyVAL.node = yyDollar[2].node } case 225: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:646 + //line parser.y:648 { - yyVAL.node = Node("ArgumentList") + yyVAL.node = node.SimpleNode("ArgumentList") } case 226: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:647 + //line parser.y:649 { yyVAL.node = yyDollar[2].node } case 227: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:651 + //line parser.y:653 { - yyVAL.node = Node("ArgumentList").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("ArgumentList").Append(yyDollar[1].node) } case 228: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:652 + //line parser.y:654 { - yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[3].node) } case 229: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:656 + //line parser.y:658 { yyVAL.node = yyDollar[1].node } case 230: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:657 + //line parser.y:659 { - yyVAL.node = Node("Unpack").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("Unpack").Append(yyDollar[2].node) } case 231: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:661 + //line parser.y:663 { - yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[3].node) } case 232: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:662 + //line parser.y:664 { - yyVAL.node = Node("GlobalVarList").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("GlobalVarList").Append(yyDollar[1].node) } case 233: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:666 + //line parser.y:668 { yyVAL.node = yyDollar[1].node } case 234: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:670 + //line parser.y:672 { - yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[3].node) } case 235: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:671 + //line parser.y:673 { - yyVAL.node = Node("StaticVarList").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("StaticVarList").Append(yyDollar[1].node) } case 236: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:675 + //line parser.y:677 { - yyVAL.node = Node("StaticVariable").attribute("Name", yyDollar[1].token.String()) + yyVAL.node = node.SimpleNode("StaticVariable").Attribute("Name", yyDollar[1].token.String()) } case 237: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:676 + //line parser.y:678 { - yyVAL.node = Node("StaticVariable").attribute("Name", yyDollar[1].token.String()).append(Node("expr").append(yyDollar[3].node)) + yyVAL.node = node.SimpleNode("StaticVariable").Attribute("Name", yyDollar[1].token.String()).Append(node.SimpleNode("expr").Append(yyDollar[3].node)) } case 238: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:680 + //line parser.y:682 { - yyVAL.node = yyDollar[1].node.append(yyDollar[2].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[2].node) } case 239: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:681 + //line parser.y:683 { - yyVAL.node = Node("Stmt") + yyVAL.node = node.SimpleNode("Stmt") } case 240: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:685 + //line parser.y:687 { - yyVAL.node = yyDollar[2].node.append(yyDollar[1].node) + yyVAL.node = yyDollar[2].node.Append(yyDollar[1].node) } case 241: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:686 + //line parser.y:688 { - yyVAL.node = yyDollar[3].node.append(yyDollar[1].node) + yyVAL.node = yyDollar[3].node.Append(yyDollar[1].node) } case 242: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:687 + //line parser.y:689 { - yyVAL.node = Node("Use").append(yyDollar[2].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Use").Append(yyDollar[2].node).Append(yyDollar[3].node) } case 243: yyDollar = yyS[yypt-9 : yypt+1] - //line parser.y:690 + //line parser.y:692 { - yyVAL.node = Node("Function"). - append(yyDollar[1].node). - append(Node("name").append(yyDollar[4].node)). - attribute("returns_ref", yyDollar[3].value). - append(yyDollar[6].node). - append(yyDollar[8].node). - append(yyDollar[9].node) + yyVAL.node = node.SimpleNode("Function"). + Append(yyDollar[1].node). + Append(node.SimpleNode("name").Append(yyDollar[4].node)). + Attribute("returns_ref", yyDollar[3].value). + Append(yyDollar[6].node). + Append(yyDollar[8].node). + Append(yyDollar[9].node) } case 244: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:702 + //line parser.y:704 { - yyVAL.node = Node("NameList").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("NameList").Append(yyDollar[1].node) } case 245: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:703 + //line parser.y:705 { - yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[3].node) } case 246: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:707 + //line parser.y:709 { - yyVAL.node = Node("") + yyVAL.node = node.SimpleNode("") } case 247: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:708 + //line parser.y:710 { - yyVAL.node = Node("") + yyVAL.node = node.SimpleNode("") } case 248: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:709 + //line parser.y:711 { yyVAL.node = yyDollar[2].node } case 249: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:713 + //line parser.y:715 { - yyVAL.node = Node("TraitAdaptionList").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("TraitAdaptionList").Append(yyDollar[1].node) } case 250: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:714 + //line parser.y:716 { - yyVAL.node = yyDollar[1].node.append(yyDollar[2].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[2].node) } case 251: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:718 + //line parser.y:720 { yyVAL.node = yyDollar[1].node } case 252: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:719 + //line parser.y:721 { yyVAL.node = yyDollar[1].node } case 253: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:724 + //line parser.y:726 { - yyVAL.node = Node("TraitPrecedence").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("TraitPrecedence").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 254: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:728 + //line parser.y:730 { - yyVAL.node = yyDollar[1].node.append(Node("as").attribute("value", yyDollar[3].token.String())) + yyVAL.node = yyDollar[1].node.Append(node.SimpleNode("as").Attribute("value", yyDollar[3].token.String())) } case 255: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:730 + //line parser.y:732 { - yyVAL.node = yyDollar[1].node.append(Node("as").append(Node("reservedNonModifiers"))) + yyVAL.node = yyDollar[1].node.Append(node.SimpleNode("as").Append(node.SimpleNode("reservedNonModifiers"))) } case 256: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:732 + //line parser.y:734 { - yyVAL.node = yyDollar[1].node.append(yyDollar[3].node).append(yyDollar[4].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[3].node).Append(yyDollar[4].node) } case 257: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:733 + //line parser.y:735 { - yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[3].node) } case 258: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:737 + //line parser.y:739 { - yyVAL.node = Node("TraitMethodRef").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("TraitMethodRef").Append(yyDollar[1].node) } case 259: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:738 + //line parser.y:740 { yyVAL.node = yyDollar[1].node } case 260: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:742 + //line parser.y:744 { - yyVAL.node = Node("TraitMethodRef").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("TraitMethodRef").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 261: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:746 + //line parser.y:748 { - yyVAL.node = Node("") + yyVAL.node = node.SimpleNode("") } case 262: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:747 + //line parser.y:749 { yyVAL.node = yyDollar[2].node } case 263: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:751 + //line parser.y:753 { yyVAL.node = yyDollar[1].node } case 264: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:752 + //line parser.y:754 { - yyVAL.node = Node("VarMemberModifier") + yyVAL.node = node.SimpleNode("VarMemberModifier") } case 265: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:756 + //line parser.y:758 { - yyVAL.node = Node("PublicMemberModifier") + yyVAL.node = node.SimpleNode("PublicMemberModifier") } case 266: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:757 + //line parser.y:759 { yyVAL.node = yyDollar[1].node } case 267: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:761 + //line parser.y:763 { yyVAL.node = yyDollar[1].node } case 268: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:762 + //line parser.y:764 { - yyVAL.node = yyDollar[1].node.append(yyDollar[2].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[2].node) } case 269: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:766 + //line parser.y:768 { - yyVAL.node = Node("PublicMemberModifier") + yyVAL.node = node.SimpleNode("PublicMemberModifier") } case 270: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:767 + //line parser.y:769 { - yyVAL.node = Node("ProtectedMemberModifier") + yyVAL.node = node.SimpleNode("ProtectedMemberModifier") } case 271: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:768 + //line parser.y:770 { - yyVAL.node = Node("PrivateMemberModifier") + yyVAL.node = node.SimpleNode("PrivateMemberModifier") } case 272: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:769 + //line parser.y:771 { - yyVAL.node = Node("StaticMemberModifier") + yyVAL.node = node.SimpleNode("StaticMemberModifier") } case 273: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:770 + //line parser.y:772 { - yyVAL.node = Node("AbstractMemberModifier") + yyVAL.node = node.SimpleNode("AbstractMemberModifier") } case 274: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:771 + //line parser.y:773 { - yyVAL.node = Node("FinalMemberModifier") + yyVAL.node = node.SimpleNode("FinalMemberModifier") } case 275: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:775 + //line parser.y:777 { - yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[3].node) } case 276: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:776 + //line parser.y:778 { - yyVAL.node = Node("PropertyList").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("PropertyList").Append(yyDollar[1].node) } case 277: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:780 + //line parser.y:782 { - yyVAL.node = Node("Property").attribute("name", yyDollar[1].token.String()) + yyVAL.node = node.SimpleNode("Property").Attribute("name", yyDollar[1].token.String()) } case 278: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:781 + //line parser.y:783 { - yyVAL.node = Node("Property").attribute("name", yyDollar[1].token.String()).append(Node("Default").append(yyDollar[3].node)) + yyVAL.node = node.SimpleNode("Property").Attribute("name", yyDollar[1].token.String()).Append(node.SimpleNode("Default").Append(yyDollar[3].node)) } case 279: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:785 + //line parser.y:787 { - yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[3].node) } case 280: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:786 + //line parser.y:788 { - yyVAL.node = Node("ConstList").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("ConstList").Append(yyDollar[1].node) } case 281: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:790 + //line parser.y:792 { - yyVAL.node = Node("Const").append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Const").Append(yyDollar[3].node) } case 282: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:794 + //line parser.y:796 { - yyVAL.node = Node("Const").attribute("name", yyDollar[1].token.String()).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Const").Attribute("name", yyDollar[1].token.String()).Append(yyDollar[3].node) } case 283: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:798 + //line parser.y:800 { - yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[3].node) } case 284: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:799 + //line parser.y:801 { - yyVAL.node = Node("EchoList").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("EchoList").Append(yyDollar[1].node) } case 285: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:803 + //line parser.y:805 { - yyVAL.node = Node("Echo").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("Echo").Append(yyDollar[1].node) } case 286: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:807 + //line parser.y:809 { - yyVAL.node = Node("") + yyVAL.node = node.SimpleNode("") } case 287: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:808 + //line parser.y:810 { yyVAL.node = yyDollar[1].node } case 288: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:811 + //line parser.y:813 { - yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[3].node) } case 289: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:812 + //line parser.y:814 { - yyVAL.node = Node("ExpressionList").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("ExpressionList").Append(yyDollar[1].node) } case 290: yyDollar = yyS[yypt-7 : yypt+1] - //line parser.y:817 + //line parser.y:819 { - yyVAL.node = Node("AnonymousClass"). - attribute("name", yyDollar[1].token.String()). - append(yyDollar[2].node). - append(yyDollar[3].node). - append(yyDollar[4].node). - append(yyDollar[6].node) + yyVAL.node = node.SimpleNode("AnonymousClass"). + Attribute("name", yyDollar[1].token.String()). + Append(yyDollar[2].node). + Append(yyDollar[3].node). + Append(yyDollar[4].node). + Append(yyDollar[6].node) } case 291: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:828 + //line parser.y:830 { - yyVAL.node = Node("New").append(yyDollar[2].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("New").Append(yyDollar[2].node).Append(yyDollar[3].node) } case 292: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:829 + //line parser.y:831 { - yyVAL.node = Node("New").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("New").Append(yyDollar[2].node) } case 293: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:833 + //line parser.y:835 { - yyVAL.node = Node("Assign").append(yyDollar[3].node).append(yyDollar[6].node) + yyVAL.node = node.SimpleNode("Assign").Append(yyDollar[3].node).Append(yyDollar[6].node) } case 294: yyDollar = yyS[yypt-5 : yypt+1] - //line parser.y:834 + //line parser.y:836 { - yyVAL.node = Node("Assign").append(yyDollar[2].node).append(yyDollar[5].node) + yyVAL.node = node.SimpleNode("Assign").Append(yyDollar[2].node).Append(yyDollar[5].node) } case 295: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:835 + //line parser.y:837 { - yyVAL.node = Node("Assign").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Assign").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 296: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:836 + //line parser.y:838 { - yyVAL.node = Node("AssignRef").append(yyDollar[1].node).append(yyDollar[4].node) + yyVAL.node = node.SimpleNode("AssignRef").Append(yyDollar[1].node).Append(yyDollar[4].node) } case 297: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:837 + //line parser.y:839 { - yyVAL.node = Node("Clone").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("Clone").Append(yyDollar[2].node) } case 298: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:838 + //line parser.y:840 { - yyVAL.node = Node("AssignAdd").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("AssignAdd").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 299: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:839 + //line parser.y:841 { - yyVAL.node = Node("AssignSub").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("AssignSub").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 300: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:840 + //line parser.y:842 { - yyVAL.node = Node("AssignMul").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("AssignMul").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 301: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:841 + //line parser.y:843 { - yyVAL.node = Node("AssignPow").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("AssignPow").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 302: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:842 + //line parser.y:844 { - yyVAL.node = Node("AssignDiv").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("AssignDiv").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 303: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:843 + //line parser.y:845 { - yyVAL.node = Node("AssignConcat").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("AssignConcat").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 304: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:844 + //line parser.y:846 { - yyVAL.node = Node("AssignMod").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("AssignMod").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 305: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:845 + //line parser.y:847 { - yyVAL.node = Node("AssignAnd").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("AssignAnd").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 306: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:846 + //line parser.y:848 { - yyVAL.node = Node("AssignOr").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("AssignOr").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 307: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:847 + //line parser.y:849 { - yyVAL.node = Node("AssignXor").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("AssignXor").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 308: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:848 + //line parser.y:850 { - yyVAL.node = Node("AssignShiftLeft").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("AssignShiftLeft").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 309: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:849 + //line parser.y:851 { - yyVAL.node = Node("AssignShiftRight").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("AssignShiftRight").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 310: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:850 + //line parser.y:852 { - yyVAL.node = Node("PostIncrement").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("PostIncrement").Append(yyDollar[1].node) } case 311: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:851 + //line parser.y:853 { - yyVAL.node = Node("PreIncrement").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("PreIncrement").Append(yyDollar[2].node) } case 312: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:852 + //line parser.y:854 { - yyVAL.node = Node("PostDecrement").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("PostDecrement").Append(yyDollar[1].node) } case 313: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:853 + //line parser.y:855 { - yyVAL.node = Node("PreDecrement").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("PreDecrement").Append(yyDollar[2].node) } case 314: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:854 + //line parser.y:856 { - yyVAL.node = Node("Or").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Or").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 315: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:855 + //line parser.y:857 { - yyVAL.node = Node("And").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("And").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 316: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:856 + //line parser.y:858 { - yyVAL.node = Node("Or").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Or").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 317: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:857 + //line parser.y:859 { - yyVAL.node = Node("And").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("And").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 318: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:858 + //line parser.y:860 { - yyVAL.node = Node("Xor").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Xor").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 319: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:859 + //line parser.y:861 { - yyVAL.node = Node("BitwiseOr").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("BitwiseOr").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 320: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:860 + //line parser.y:862 { - yyVAL.node = Node("BitwiseAnd").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("BitwiseAnd").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 321: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:861 + //line parser.y:863 { - yyVAL.node = Node("BitwiseXor").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("BitwiseXor").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 322: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:862 + //line parser.y:864 { - yyVAL.node = Node("Concat").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Concat").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 323: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:863 + //line parser.y:865 { - yyVAL.node = Node("Add").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Add").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 324: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:864 + //line parser.y:866 { - yyVAL.node = Node("Sub").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Sub").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 325: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:865 + //line parser.y:867 { - yyVAL.node = Node("Mul").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Mul").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 326: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:866 + //line parser.y:868 { - yyVAL.node = Node("Pow").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Pow").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 327: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:867 + //line parser.y:869 { - yyVAL.node = Node("Div").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Div").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 328: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:868 + //line parser.y:870 { - yyVAL.node = Node("Mod").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Mod").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 329: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:869 + //line parser.y:871 { - yyVAL.node = Node("ShiftLeft").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("ShiftLeft").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 330: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:870 + //line parser.y:872 { - yyVAL.node = Node("ShiftRight").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("ShiftRight").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 331: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:871 + //line parser.y:873 { - yyVAL.node = Node("UnaryPlus").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("UnaryPlus").Append(yyDollar[2].node) } case 332: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:872 + //line parser.y:874 { - yyVAL.node = Node("UnaryMinus").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("UnaryMinus").Append(yyDollar[2].node) } case 333: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:873 + //line parser.y:875 { - yyVAL.node = Node("BooleanNot").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("BooleanNot").Append(yyDollar[2].node) } case 334: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:874 + //line parser.y:876 { - yyVAL.node = Node("BitwiseNot").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("BitwiseNot").Append(yyDollar[2].node) } case 335: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:875 + //line parser.y:877 { - yyVAL.node = Node("Identical").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Identical").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 336: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:876 + //line parser.y:878 { - yyVAL.node = Node("NotIdentical").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("NotIdentical").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 337: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:877 + //line parser.y:879 { - yyVAL.node = Node("Equal").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Equal").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 338: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:878 + //line parser.y:880 { - yyVAL.node = Node("NotEqual").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("NotEqual").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 339: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:879 + //line parser.y:881 { - yyVAL.node = Node("Smaller").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Smaller").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 340: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:880 + //line parser.y:882 { - yyVAL.node = Node("SmallerOrEqual").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("SmallerOrEqual").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 341: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:881 + //line parser.y:883 { - yyVAL.node = Node("Greater").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Greater").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 342: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:882 + //line parser.y:884 { - yyVAL.node = Node("GreaterOrEqual").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("GreaterOrEqual").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 343: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:883 + //line parser.y:885 { - yyVAL.node = Node("Spaceship").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Spaceship").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 344: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:884 + //line parser.y:886 { - yyVAL.node = Node("InstanceOf").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("InstanceOf").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 345: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:885 + //line parser.y:887 { yyVAL.node = yyDollar[2].node } case 346: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:886 + //line parser.y:888 { yyVAL.node = yyDollar[1].node } case 347: yyDollar = yyS[yypt-5 : yypt+1] - //line parser.y:887 + //line parser.y:889 { - yyVAL.node = Node("Ternary").append(yyDollar[1].node).append(yyDollar[3].node).append(yyDollar[5].node) + yyVAL.node = node.SimpleNode("Ternary").Append(yyDollar[1].node).Append(yyDollar[3].node).Append(yyDollar[5].node) } case 348: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:888 + //line parser.y:890 { - yyVAL.node = Node("Ternary").append(yyDollar[1].node).append(yyDollar[4].node) + yyVAL.node = node.SimpleNode("Ternary").Append(yyDollar[1].node).Append(yyDollar[4].node) } case 349: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:889 + //line parser.y:891 { - yyVAL.node = Node("Coalesce").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Coalesce").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 350: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:890 + //line parser.y:892 { yyVAL.node = yyDollar[1].node } case 351: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:891 + //line parser.y:893 { - yyVAL.node = Node("CastInt").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("CastInt").Append(yyDollar[2].node) } case 352: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:892 + //line parser.y:894 { - yyVAL.node = Node("CastDouble").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("CastDouble").Append(yyDollar[2].node) } case 353: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:893 + //line parser.y:895 { - yyVAL.node = Node("CastString").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("CastString").Append(yyDollar[2].node) } case 354: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:894 + //line parser.y:896 { - yyVAL.node = Node("CastArray").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("CastArray").Append(yyDollar[2].node) } case 355: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:895 + //line parser.y:897 { - yyVAL.node = Node("CastObject").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("CastObject").Append(yyDollar[2].node) } case 356: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:896 + //line parser.y:898 { - yyVAL.node = Node("CastBool").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("CastBool").Append(yyDollar[2].node) } case 357: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:897 + //line parser.y:899 { - yyVAL.node = Node("CastUnset").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("CastUnset").Append(yyDollar[2].node) } case 358: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:898 + //line parser.y:900 { - yyVAL.node = Node("Exit").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("Exit").Append(yyDollar[2].node) } case 359: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:899 + //line parser.y:901 { - yyVAL.node = Node("Silence").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("Silence").Append(yyDollar[2].node) } case 360: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:900 + //line parser.y:902 { yyVAL.node = yyDollar[1].node } case 361: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:901 + //line parser.y:903 { - yyVAL.node = Node("ShellExec").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("ShellExec").Append(yyDollar[2].node) } case 362: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:902 + //line parser.y:904 { - yyVAL.node = Node("Print").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("Print").Append(yyDollar[2].node) } case 363: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:903 + //line parser.y:905 { - yyVAL.node = Node("Yield") + yyVAL.node = node.SimpleNode("Yield") } case 364: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:904 + //line parser.y:906 { - yyVAL.node = Node("Yield").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("Yield").Append(yyDollar[2].node) } case 365: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:905 + //line parser.y:907 { - yyVAL.node = Node("Yield").append(yyDollar[2].node).append(yyDollar[4].node) + yyVAL.node = node.SimpleNode("Yield").Append(yyDollar[2].node).Append(yyDollar[4].node) } case 366: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:906 + //line parser.y:908 { - yyVAL.node = Node("YieldFrom").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("YieldFrom").Append(yyDollar[2].node) } case 367: yyDollar = yyS[yypt-10 : yypt+1] - //line parser.y:908 + //line parser.y:910 { - yyVAL.node = Node("Closure"). - attribute("returns_ref", yyDollar[2].value). - append(yyDollar[4].node). - append(yyDollar[6].node). - append(yyDollar[7].node). - append(yyDollar[9].node) + yyVAL.node = node.SimpleNode("Closure"). + Attribute("returns_ref", yyDollar[2].value). + Append(yyDollar[4].node). + Append(yyDollar[6].node). + Append(yyDollar[7].node). + Append(yyDollar[9].node) } case 368: yyDollar = yyS[yypt-11 : yypt+1] - //line parser.y:917 + //line parser.y:919 { - yyVAL.node = Node("StaticClosure"). - attribute("returns_ref", yyDollar[3].value). - append(yyDollar[5].node). - append(yyDollar[7].node). - append(yyDollar[8].node). - append(yyDollar[10].node) + yyVAL.node = node.SimpleNode("StaticClosure"). + Attribute("returns_ref", yyDollar[3].value). + Append(yyDollar[5].node). + Append(yyDollar[7].node). + Append(yyDollar[8].node). + Append(yyDollar[10].node) } case 369: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:928 + //line parser.y:930 { yyVAL.value = "false" } case 370: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:929 + //line parser.y:931 { yyVAL.value = "true" } case 371: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:933 + //line parser.y:935 { - yyVAL.node = Node("") + yyVAL.node = node.SimpleNode("") } case 372: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:934 + //line parser.y:936 { yyVAL.node = yyDollar[3].node } case 373: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:938 + //line parser.y:940 { - yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[3].node) } case 374: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:939 + //line parser.y:941 { - yyVAL.node = Node("ClosureUses").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("ClosureUses").Append(yyDollar[1].node) } case 375: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:943 + //line parser.y:945 { - yyVAL.node = Node("Variable").attribute("value", yyDollar[1].token.String()) + yyVAL.node = node.SimpleNode("Variable").Attribute("value", yyDollar[1].token.String()) } case 376: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:944 + //line parser.y:946 { - yyVAL.node = Node("Variable").attribute("value", yyDollar[2].token.String()).attribute("ref", "true") + yyVAL.node = node.SimpleNode("Variable").Attribute("value", yyDollar[2].token.String()).Attribute("ref", "true") } case 377: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:948 + //line parser.y:950 { - yyVAL.node = Node("FunctionCall").append(yyDollar[1].node).append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("FunctionCall").Append(yyDollar[1].node).Append(yyDollar[2].node) } case 378: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:950 + //line parser.y:952 { - yyVAL.node = Node("StaticCall").append(yyDollar[1].node).append(yyDollar[3].node).append(yyDollar[4].node) + yyVAL.node = node.SimpleNode("StaticCall").Append(yyDollar[1].node).Append(yyDollar[3].node).Append(yyDollar[4].node) } case 379: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:952 + //line parser.y:954 { - yyVAL.node = Node("StaticCall").append(yyDollar[1].node).append(yyDollar[3].node).append(yyDollar[4].node) + yyVAL.node = node.SimpleNode("StaticCall").Append(yyDollar[1].node).Append(yyDollar[3].node).Append(yyDollar[4].node) } case 380: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:953 + //line parser.y:955 { - yyVAL.node = Node("Call").append(yyDollar[1].node).append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("Call").Append(yyDollar[1].node).Append(yyDollar[2].node) } case 381: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:957 + //line parser.y:959 { - yyVAL.node = Node("Static") + yyVAL.node = node.SimpleNode("Static") } case 382: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:958 + //line parser.y:960 { yyVAL.node = yyDollar[1].node } case 383: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:962 + //line parser.y:964 { yyVAL.node = yyDollar[1].node } case 384: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:963 + //line parser.y:965 { yyVAL.node = yyDollar[1].node } case 385: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:967 + //line parser.y:969 { - yyVAL.node = Node("") + yyVAL.node = node.SimpleNode("") } case 386: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:968 + //line parser.y:970 { yyVAL.node = yyDollar[2].node } case 387: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:972 + //line parser.y:974 { - yyVAL.node = Node("EmptyBackticks") + yyVAL.node = node.SimpleNode("EmptyBackticks") } case 388: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:973 + //line parser.y:975 { - yyVAL.node = Node("String").attribute("value", yyDollar[1].token.String()) + yyVAL.node = node.TokenNode("String", yyDollar[1].token) } case 389: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:974 + //line parser.y:976 { yyVAL.node = yyDollar[1].node } case 390: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:978 + //line parser.y:980 { - yyVAL.node = Node("ArgumentList") + yyVAL.node = node.SimpleNode("ArgumentList") } case 391: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:979 + //line parser.y:981 { yyVAL.node = yyDollar[1].node } case 392: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:983 + //line parser.y:985 { yyVAL.node = yyDollar[3].node } case 393: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:984 + //line parser.y:986 { yyVAL.node = yyDollar[2].node } case 394: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:985 + //line parser.y:987 { - yyVAL.node = Node("String").attribute("value", yyDollar[1].token.String()) + yyVAL.node = node.TokenNode("String", yyDollar[1].token) } case 395: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:989 + //line parser.y:991 { - yyVAL.node = Node("Scalar").append(Node("Lnumber").attribute("value", yyDollar[1].token.String())) + yyVAL.node = node.TokenNode("Lnumber", yyDollar[1].token) } case 396: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:990 + //line parser.y:992 { - yyVAL.node = Node("Scalar").append(Node("Dnumber").attribute("value", yyDollar[1].token.String())) + yyVAL.node = node.TokenNode("Dnumber", yyDollar[1].token) } case 397: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:991 + //line parser.y:993 { - yyVAL.node = Node("Scalar").append(Node("__LINE__")) + yyVAL.node = node.TokenNode("MagicConst", yyDollar[1].token) } case 398: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:992 + //line parser.y:994 { - yyVAL.node = Node("Scalar").append(Node("__FILE__")) + yyVAL.node = node.TokenNode("MagicConst", yyDollar[1].token) } case 399: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:993 + //line parser.y:995 { - yyVAL.node = Node("Scalar").append(Node("__DIR__")) + yyVAL.node = node.TokenNode("MagicConst", yyDollar[1].token) } case 400: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:994 + //line parser.y:996 { - yyVAL.node = Node("Scalar").append(Node("__TRAIT__")) + yyVAL.node = node.TokenNode("MagicConst", yyDollar[1].token) } case 401: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:995 + //line parser.y:997 { - yyVAL.node = Node("Scalar").append(Node("__METHOD__")) + yyVAL.node = node.TokenNode("MagicConst", yyDollar[1].token) } case 402: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:996 + //line parser.y:998 { - yyVAL.node = Node("Scalar").append(Node("__FUNCTION__")) + yyVAL.node = node.TokenNode("MagicConst", yyDollar[1].token) } case 403: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:997 + //line parser.y:999 { - yyVAL.node = Node("Scalar").append(Node("__NAMESPACE__")) + yyVAL.node = node.TokenNode("MagicConst", yyDollar[1].token) } case 404: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:998 + //line parser.y:1000 { - yyVAL.node = Node("Scalar").append(Node("__CLASS__")) + yyVAL.node = node.TokenNode("MagicConst", yyDollar[1].token) } case 405: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1000 + //line parser.y:1002 { - yyVAL.node = Node("Scalar").append(Node("Heredoc").attribute("value", yyDollar[2].token.String())) + yyVAL.node = node.SimpleNode("Scalar").Append(node.TokenNode("Heredoc", yyDollar[1].token)).Append(node.TokenNode("string", yyDollar[2].token)).Append(node.TokenNode("HeredocEnd", yyDollar[3].token)) } case 406: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:1002 + //line parser.y:1004 { - yyVAL.node = Node("Scalar").append(Node("Heredoc")) + yyVAL.node = node.SimpleNode("Scalar").Append(node.TokenNode("Heredoc", yyDollar[1].token)).Append(node.TokenNode("HeredocEnd", yyDollar[2].token)) } case 407: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1003 + //line parser.y:1005 { yyVAL.node = yyDollar[2].node } case 408: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1004 + //line parser.y:1006 { yyVAL.node = yyDollar[2].node } case 409: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1005 + //line parser.y:1007 { yyVAL.node = yyDollar[1].node } case 410: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1006 + //line parser.y:1008 { yyVAL.node = yyDollar[1].node } case 411: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1010 + //line parser.y:1012 { - yyVAL.node = Node("Const").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("Const").Append(yyDollar[1].node) } case 412: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1011 + //line parser.y:1013 { - yyVAL.node = Node("Const").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Const").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 413: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1013 + //line parser.y:1015 { - yyVAL.node = Node("Const").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Const").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 414: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1017 + //line parser.y:1019 { yyVAL.node = yyDollar[1].node } case 415: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1018 + //line parser.y:1020 { yyVAL.node = yyDollar[1].node } case 416: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:1022 + //line parser.y:1024 { - yyVAL.node = Node("") + yyVAL.node = node.SimpleNode("") } case 417: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1023 + //line parser.y:1025 { yyVAL.node = yyDollar[1].node } case 418: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1027 + //line parser.y:1029 { yyVAL.node = yyDollar[1].node } case 419: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1031 + //line parser.y:1033 { yyVAL.node = yyDollar[1].node } case 420: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1032 + //line parser.y:1034 { yyVAL.node = yyDollar[2].node } case 421: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1033 + //line parser.y:1035 { yyVAL.node = yyDollar[1].node } case 422: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1037 + //line parser.y:1039 { yyVAL.node = yyDollar[1].node } case 423: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1038 + //line parser.y:1040 { yyVAL.node = yyDollar[2].node } case 424: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1039 + //line parser.y:1041 { yyVAL.node = yyDollar[1].node } case 425: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1043 + //line parser.y:1045 { yyVAL.node = yyDollar[1].node } case 426: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1044 + //line parser.y:1046 { - yyVAL.node = Node("Dim").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Dim").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 427: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1045 + //line parser.y:1047 { - yyVAL.node = Node("Dim").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Dim").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 428: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1046 + //line parser.y:1048 { - yyVAL.node = Node("Dim").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Dim").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 429: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1048 + //line parser.y:1050 { - yyVAL.node = Node("MethodCall").append(yyDollar[1].node).append(yyDollar[3].node).append(yyDollar[4].node) + yyVAL.node = node.SimpleNode("MethodCall").Append(yyDollar[1].node).Append(yyDollar[3].node).Append(yyDollar[4].node) } case 430: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1049 + //line parser.y:1051 { yyVAL.node = yyDollar[1].node } case 431: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1053 + //line parser.y:1055 { yyVAL.node = yyDollar[1].node } case 432: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1054 + //line parser.y:1056 { yyVAL.node = yyDollar[1].node } case 433: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1055 + //line parser.y:1057 { - yyVAL.node = Node("Property").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Property").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 434: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1059 + //line parser.y:1061 { - yyVAL.node = Node("Variable").attribute("name", yyDollar[1].token.String()) + yyVAL.node = node.SimpleNode("Variable").Attribute("name", yyDollar[1].token.String()) } case 435: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1060 + //line parser.y:1062 { - yyVAL.node = Node("Variable").append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Variable").Append(yyDollar[3].node) } case 436: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:1061 + //line parser.y:1063 { - yyVAL.node = Node("Variable").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("Variable").Append(yyDollar[2].node) } case 437: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1066 + //line parser.y:1068 { - yyVAL.node = Node("StaticProp").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("StaticProp").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 438: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1068 + //line parser.y:1070 { - yyVAL.node = Node("StaticProp").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("StaticProp").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 439: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1072 + //line parser.y:1074 { yyVAL.node = yyDollar[1].node } case 440: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1073 + //line parser.y:1075 { - yyVAL.node = Node("Dim").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Dim").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 441: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1074 + //line parser.y:1076 { - yyVAL.node = Node("Dim").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Dim").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 442: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1075 + //line parser.y:1077 { - yyVAL.node = Node("Property").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Property").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 443: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1077 + //line parser.y:1079 { - yyVAL.node = Node("StaticProperty").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("StaticProperty").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 444: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1079 + //line parser.y:1081 { - yyVAL.node = Node("StaticProperty").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("StaticProperty").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 445: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1083 - { - yyVAL.node = yyDollar[1].node - } - case 446: - yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1084 - { - yyVAL.node = yyDollar[2].node - } - case 447: yyDollar = yyS[yypt-1 : yypt+1] //line parser.y:1085 { yyVAL.node = yyDollar[1].node } + case 446: + yyDollar = yyS[yypt-3 : yypt+1] + //line parser.y:1086 + { + yyVAL.node = yyDollar[2].node + } + case 447: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser.y:1087 + { + yyVAL.node = yyDollar[1].node + } case 448: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1089 + //line parser.y:1091 { - yyVAL.node = Node("PropertyName").attribute("value", yyDollar[1].token.String()) + yyVAL.node = node.SimpleNode("PropertyName").Attribute("value", yyDollar[1].token.String()) } case 449: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1090 + //line parser.y:1092 { yyVAL.node = yyDollar[2].node } case 450: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1091 + //line parser.y:1093 { yyVAL.node = yyDollar[1].node } case 451: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1095 + //line parser.y:1097 { /* TODO: allow single trailing comma */ yyVAL.node = yyDollar[1].node } case 452: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:1099 + //line parser.y:1101 { - yyVAL.node = Node("") + yyVAL.node = node.SimpleNode("") } case 453: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1100 + //line parser.y:1102 { yyVAL.node = yyDollar[1].node } case 454: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1105 + //line parser.y:1107 { - yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[3].node) } case 455: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1106 + //line parser.y:1108 { - yyVAL.node = Node("ArrayPairList").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("ArrayPairList").Append(yyDollar[1].node) } case 456: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1110 + //line parser.y:1112 { - yyVAL.node = Node("ArrayElement").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("ArrayElement").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 457: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1111 + //line parser.y:1113 { - yyVAL.node = Node("ArrayElement").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("ArrayElement").Append(yyDollar[1].node) } case 458: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1112 + //line parser.y:1114 { - yyVAL.node = Node("ArrayElement").append(yyDollar[1].node).append(Node("Ref").append(yyDollar[4].node)) + yyVAL.node = node.SimpleNode("ArrayElement").Append(yyDollar[1].node).Append(node.SimpleNode("Ref").Append(yyDollar[4].node)) } case 459: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:1113 + //line parser.y:1115 { - yyVAL.node = Node("ArrayElement").append(Node("Ref").append(yyDollar[2].node)) + yyVAL.node = node.SimpleNode("ArrayElement").Append(node.SimpleNode("Ref").Append(yyDollar[2].node)) } case 460: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:1115 + //line parser.y:1117 { - yyVAL.node = Node("ArrayElement"). - append(yyDollar[1].node). - append(Node("ArrayList").append(yyDollar[5].node)) + yyVAL.node = node.SimpleNode("ArrayElement"). + Append(yyDollar[1].node). + Append(node.SimpleNode("ArrayList").Append(yyDollar[5].node)) } case 461: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1121 + //line parser.y:1123 { - yyVAL.node = Node("ArrayElement"). - append(Node("ArrayList").append(yyDollar[3].node)) + yyVAL.node = node.SimpleNode("ArrayElement"). + Append(node.SimpleNode("ArrayList").Append(yyDollar[3].node)) } case 462: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:1128 + //line parser.y:1130 { - yyVAL.node = yyDollar[1].node.append(yyDollar[2].node) + yyVAL.node = yyDollar[1].node.Append(yyDollar[2].node) } case 463: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:1129 + //line parser.y:1131 { - yyVAL.node = yyDollar[1].node.append(Node("String").attribute("value", yyDollar[2].token.String())) + yyVAL.node = yyDollar[1].node.Append(node.SimpleNode("String").Attribute("value", yyDollar[2].token.String())) } case 464: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1130 + //line parser.y:1132 { - yyVAL.node = Node("EncapsList").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("EncapsList").Append(yyDollar[1].node) } case 465: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:1131 + //line parser.y:1133 { - yyVAL.node = Node("EncapsList").append(Node("String").attribute("value", yyDollar[1].token.String())).append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("EncapsList").Append(node.SimpleNode("String").Attribute("value", yyDollar[1].token.String())).Append(yyDollar[2].node) } case 466: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1135 + //line parser.y:1137 { - yyVAL.node = Node("Variable").attribute("value", yyDollar[1].token.String()) + yyVAL.node = node.SimpleNode("Variable").Attribute("value", yyDollar[1].token.String()) } case 467: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1136 + //line parser.y:1138 { - yyVAL.node = Node("Variable").attribute("value", yyDollar[1].token.String()).append(Node("offset").append(yyDollar[3].node)) + yyVAL.node = node.SimpleNode("Variable").Attribute("value", yyDollar[1].token.String()).Append(node.SimpleNode("offset").Append(yyDollar[3].node)) } case 468: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1137 + //line parser.y:1139 { - yyVAL.node = Node("Variable").attribute("value", yyDollar[1].token.String()).append(Node("property").attribute("value", yyDollar[3].token.String())) + yyVAL.node = node.SimpleNode("Variable").Attribute("value", yyDollar[1].token.String()).Append(node.SimpleNode("property").Attribute("value", yyDollar[3].token.String())) } case 469: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1138 + //line parser.y:1140 { - yyVAL.node = Node("Variable").append(Node("expr").append(yyDollar[2].node)) + yyVAL.node = node.SimpleNode("Variable").Append(node.SimpleNode("expr").Append(yyDollar[2].node)) } case 470: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1139 + //line parser.y:1141 { - yyVAL.node = Node("Variable").attribute("value", yyDollar[2].token.String()) + yyVAL.node = node.SimpleNode("Variable").Attribute("value", yyDollar[2].token.String()) } case 471: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:1141 + //line parser.y:1143 { - yyVAL.node = Node("Variable").attribute("value", yyDollar[2].token.String()).append(Node("offset").append(yyDollar[4].node)) + yyVAL.node = node.SimpleNode("Variable").Attribute("value", yyDollar[2].token.String()).Append(node.SimpleNode("offset").Append(yyDollar[4].node)) } case 472: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1142 + //line parser.y:1144 { yyVAL.node = yyDollar[2].node } case 473: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1145 + //line parser.y:1147 { - yyVAL.node = Node("OffsetString").attribute("value", yyDollar[1].token.String()) + yyVAL.node = node.SimpleNode("OffsetString").Attribute("value", yyDollar[1].token.String()) } case 474: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1146 + //line parser.y:1148 { - yyVAL.node = Node("OffsetNumString").attribute("value", yyDollar[1].token.String()) + yyVAL.node = node.SimpleNode("OffsetNumString").Attribute("value", yyDollar[1].token.String()) } case 475: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:1147 + //line parser.y:1149 { - yyVAL.node = Node("OffsetNegateNumString").attribute("value", yyDollar[2].token.String()) + yyVAL.node = node.SimpleNode("OffsetNegateNumString").Attribute("value", yyDollar[2].token.String()) } case 476: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1148 + //line parser.y:1150 { - yyVAL.node = Node("OffsetVariable").attribute("value", yyDollar[1].token.String()) + yyVAL.node = node.SimpleNode("OffsetVariable").Attribute("value", yyDollar[1].token.String()) } case 477: yyDollar = yyS[yypt-5 : yypt+1] - //line parser.y:1152 + //line parser.y:1154 { yyVAL.node = yyDollar[3].node } case 478: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1153 + //line parser.y:1155 { - yyVAL.node = Node("Empty").append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Empty").Append(yyDollar[3].node) } case 479: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:1154 + //line parser.y:1156 { - yyVAL.node = Node("Include").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("Include").Append(yyDollar[2].node) } case 480: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:1155 + //line parser.y:1157 { - yyVAL.node = Node("IncludeOnce").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("IncludeOnce").Append(yyDollar[2].node) } case 481: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1156 + //line parser.y:1158 { - yyVAL.node = Node("Eval").append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("Eval").Append(yyDollar[3].node) } case 482: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:1157 + //line parser.y:1159 { - yyVAL.node = Node("Require").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("Require").Append(yyDollar[2].node) } case 483: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:1158 + //line parser.y:1160 { - yyVAL.node = Node("RequireOnce").append(yyDollar[2].node) + yyVAL.node = node.SimpleNode("RequireOnce").Append(yyDollar[2].node) } case 484: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1162 + //line parser.y:1164 { yyVAL.node = yyDollar[1].node } case 485: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1163 + //line parser.y:1165 { - yyVAL.node = Node("AndIsset").append(yyDollar[1].node).append(yyDollar[3].node) + yyVAL.node = node.SimpleNode("AndIsset").Append(yyDollar[1].node).Append(yyDollar[3].node) } case 486: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1167 + //line parser.y:1169 { - yyVAL.node = Node("Isset").append(yyDollar[1].node) + yyVAL.node = node.SimpleNode("Isset").Append(yyDollar[1].node) } } goto yystack /* stack new state and value */ diff --git a/parser.y b/parser.y index aed27d8..1db49d7 100644 --- a/parser.y +++ b/parser.y @@ -2,22 +2,24 @@ package main import ( - "io" + "io" + "github.com/z7zmey/php-parser/token" + "github.com/z7zmey/php-parser/node" ) -var rootNode = Node("Root") +var rootnode = node.SimpleNode("Root") -func parse(src io.Reader, fName string) node { - rootNode = Node("Root") //reset +func parse(src io.Reader, fName string) node.Node { + rootnode = node.SimpleNode("Root") //reset yyParse(newLexer(src, fName)) - return rootNode + return rootnode } %} %union{ - node node - token token + node node.Node + token token.Token value string } @@ -203,7 +205,7 @@ func parse(src io.Reader, fName string) node { ///////////////////////////////////////////////////////////////////////// start: - top_statement_list { rootNode = $1; } + top_statement_list { rootnode = $1; } ; reserved_non_modifiers: @@ -222,24 +224,24 @@ semi_reserved: ; identifier: - T_STRING { $$ = Node("identifier").attribute("value", $1.String()) } - | semi_reserved { $$ = Node("identifier").attribute("value", $1.String()) } + T_STRING { $$ = node.TokenNode("identifier", $1) } + | semi_reserved { $$ = node.TokenNode("identifier", $1) } ; top_statement_list: - top_statement_list top_statement { $$ = $1.append($2); } - | /* empty */ { $$ = Node("Statements") } + top_statement_list top_statement { $$ = $1.Append($2); } + | /* empty */ { $$ = node.SimpleNode("Statements") } ; namespace_name: - T_STRING { $$ = Node("NamespaceParts").append(Node($1.String())); } - | namespace_name T_NS_SEPARATOR T_STRING { $$ = $1.append(Node($3.String())); } + T_STRING { $$ = node.SimpleNode("NamespaceParts").Append(node.TokenNode("NsPart", $1)); } + | namespace_name T_NS_SEPARATOR T_STRING { $$ = $1.Append(node.TokenNode("NsPart", $3)); } ; name: - namespace_name { $$ = Node("Name").append($1); } - | T_NAMESPACE T_NS_SEPARATOR namespace_name { $$ = Node("Name").append($3).attribute("Relative", "true"); } - | T_NS_SEPARATOR namespace_name { $$ = Node("Name").append($2).attribute("FullyQualified", "true"); } + namespace_name { $$ = node.SimpleNode("Name").Append($1); } + | T_NAMESPACE T_NS_SEPARATOR namespace_name { $$ = node.SimpleNode("Name").Append($3).Attribute("Relative", "true"); } + | T_NS_SEPARATOR namespace_name { $$ = node.SimpleNode("Name").Append($2).Attribute("FullyQualified", "true"); } ; top_statement: @@ -248,35 +250,35 @@ top_statement: | class_declaration_statement { $$ = $1; } | trait_declaration_statement { $$ = $1; } | interface_declaration_statement { $$ = $1; } - | T_HALT_COMPILER '(' ')' ';' { $$ = Node("THaltCompiler") } - | T_NAMESPACE namespace_name ';' { $$ = Node("Namespace").append($2); } + | T_HALT_COMPILER '(' ')' ';' { $$ = node.SimpleNode("THaltCompiler") } + | T_NAMESPACE namespace_name ';' { $$ = node.SimpleNode("Namespace").Append($2); } | T_NAMESPACE namespace_name '{' top_statement_list '}' - { $$ = Node("Namespace").append($2).append($4) } - | T_NAMESPACE '{' top_statement_list '}' { $$ = Node("Namespace").append($3) } + { $$ = node.SimpleNode("Namespace").Append($2).Append($4) } + | T_NAMESPACE '{' top_statement_list '}' { $$ = node.SimpleNode("Namespace").Append($3) } | T_USE mixed_group_use_declaration ';' { $$ = $2; } - | T_USE use_type group_use_declaration ';' { $$ = $3.append($2) } + | T_USE use_type group_use_declaration ';' { $$ = $3.Append($2) } | T_USE use_declarations ';' { $$ = $2; } - | T_USE use_type use_declarations ';' { $$ = $3.append($2) } + | T_USE use_type use_declarations ';' { $$ = $3.Append($2) } | T_CONST const_list ';' { $$ = $2; } ; use_type: - T_FUNCTION { $$ = Node("FuncUseType"); } - | T_CONST { $$ = Node("ConstUseType"); } + T_FUNCTION { $$ = node.SimpleNode("FuncUseType"); } + | T_CONST { $$ = node.SimpleNode("ConstUseType"); } ; group_use_declaration: namespace_name T_NS_SEPARATOR '{' unprefixed_use_declarations possible_comma '}' - { $$ = Node("GroupUse").append($1).append($4) } + { $$ = node.SimpleNode("GroupUse").Append($1).Append($4) } | T_NS_SEPARATOR namespace_name T_NS_SEPARATOR '{' unprefixed_use_declarations possible_comma '}' - { $$ = Node("GroupUse").append($2).append($5) } + { $$ = node.SimpleNode("GroupUse").Append($2).Append($5) } ; mixed_group_use_declaration: namespace_name T_NS_SEPARATOR '{' inline_use_declarations possible_comma '}' - { $$ = Node("MixedGroupUse").append($1).append($4); } + { $$ = node.SimpleNode("MixedGroupUse").Append($1).Append($4); } | T_NS_SEPARATOR namespace_name T_NS_SEPARATOR '{' inline_use_declarations possible_comma '}' - { $$ = Node("MixedGroupUse").append($2).append($5); } + { $$ = node.SimpleNode("MixedGroupUse").Append($2).Append($5); } ; possible_comma: @@ -286,29 +288,29 @@ possible_comma: inline_use_declarations: inline_use_declarations ',' inline_use_declaration - { $$ = $1.append($3) } - | inline_use_declaration { $$ = Node("UseList").append($1) } + { $$ = $1.Append($3) } + | inline_use_declaration { $$ = node.SimpleNode("UseList").Append($1) } ; unprefixed_use_declarations: unprefixed_use_declarations ',' unprefixed_use_declaration - { $$ = $1.append($3) } - | unprefixed_use_declaration { $$ = Node("UseList").append($1) } + { $$ = $1.Append($3) } + | unprefixed_use_declaration { $$ = node.SimpleNode("UseList").Append($1) } ; use_declarations: - use_declarations ',' use_declaration { $$ = $1.append($3) } - | use_declaration { $$ = Node("UseList").append($1) } + use_declarations ',' use_declaration { $$ = $1.Append($3) } + | use_declaration { $$ = node.SimpleNode("UseList").Append($1) } ; inline_use_declaration: unprefixed_use_declaration { $$ = $1; } - | use_type unprefixed_use_declaration { $$ = $2.append($1) } + | use_type unprefixed_use_declaration { $$ = $2.Append($1) } ; unprefixed_use_declaration: - namespace_name { $$ = Node("UseElem").append($1); } - | namespace_name T_AS T_STRING { $$ = Node("UseElem").append($1).append(Node("as").attribute("value", $3.String())); } + namespace_name { $$ = node.SimpleNode("UseElem").Append($1); } + | namespace_name T_AS T_STRING { $$ = node.SimpleNode("UseElem").Append($1).Append(node.SimpleNode("as").Attribute("value", $3.String())); } ; use_declaration: @@ -317,13 +319,13 @@ use_declaration: ; const_list: - const_list ',' const_decl { $$ = $1.append($3) } - | const_decl { $$ = Node("ConstList").append($1) } + const_list ',' const_decl { $$ = $1.Append($3) } + | const_decl { $$ = node.SimpleNode("ConstList").Append($1) } ; inner_statement_list: - inner_statement_list inner_statement { $$ = $1.append($2); } - | /* empty */ { $$ = Node("stmt") } + inner_statement_list inner_statement { $$ = $1.Append($2); } + | /* empty */ { $$ = node.SimpleNode("stmt") } ; inner_statement: @@ -332,7 +334,7 @@ inner_statement: | class_declaration_statement { $$ = $1; } | trait_declaration_statement { $$ = $1; } | interface_declaration_statement { $$ = $1; } - | T_HALT_COMPILER '(' ')' ';' { $$ = Node("THaltCompiler") } + | T_HALT_COMPILER '(' ')' ';' { $$ = node.SimpleNode("THaltCompiler") } statement: '{' inner_statement_list '}' { $$ = $2; } @@ -340,81 +342,81 @@ statement: | alt_if_stmt { $$ = $1; } | T_WHILE '(' expr ')' while_statement { - $$ = Node("While"). - append(Node("expr").append($3)). - append(Node("stmt").append($5)); + $$ = node.SimpleNode("While"). + Append(node.SimpleNode("expr").Append($3)). + Append(node.SimpleNode("stmt").Append($5)); } | T_DO statement T_WHILE '(' expr ')' ';' { - $$ = Node("DoWhile"). - append(Node("expr").append($5)). - append(Node("stmt").append($2)); + $$ = node.SimpleNode("DoWhile"). + Append(node.SimpleNode("expr").Append($5)). + Append(node.SimpleNode("stmt").Append($2)); } | T_FOR '(' for_exprs ';' for_exprs ';' for_exprs ')' for_statement { - $$ = Node("For"). - append(Node("expr1").append($3)). - append(Node("expr2").append($5)). - append(Node("expr3").append($7)). - append(Node("stmt").append($9)) + $$ = node.SimpleNode("For"). + Append(node.SimpleNode("expr1").Append($3)). + Append(node.SimpleNode("expr2").Append($5)). + Append(node.SimpleNode("expr3").Append($7)). + Append(node.SimpleNode("stmt").Append($9)) } - | T_SWITCH '(' expr ')' switch_case_list { $$ = Node("Switch").append(Node("expr").append($3)).append($5); } - | T_BREAK optional_expr ';' { $$ = Node("Break").append($2) } - | T_CONTINUE optional_expr ';' { $$ = Node("Continue").append($2) } - | T_RETURN optional_expr ';' { $$ = Node("Return").append($2) } + | T_SWITCH '(' expr ')' switch_case_list { $$ = node.SimpleNode("Switch").Append(node.SimpleNode("expr").Append($3)).Append($5); } + | T_BREAK optional_expr ';' { $$ = node.SimpleNode("Break").Append($2) } + | T_CONTINUE optional_expr ';' { $$ = node.SimpleNode("Continue").Append($2) } + | T_RETURN optional_expr ';' { $$ = node.SimpleNode("Return").Append($2) } | T_GLOBAL global_var_list ';' { $$ = $2; } | T_STATIC static_var_list ';' { $$ = $2; } | T_ECHO echo_expr_list ';' { $$ = $2; } - | T_INLINE_HTML { $$ = Node("Echo").append(Node("InlineHtml").attribute("value", $1.String())) } + | T_INLINE_HTML { $$ = node.SimpleNode("Echo").Append(node.SimpleNode("InlineHtml").Attribute("value", $1.String())) } | expr ';' { $$ = $1; } | T_UNSET '(' unset_variables possible_comma ')' ';' - { $$ = Node("Unset").append($3); } + { $$ = node.SimpleNode("Unset").Append($3); } | T_FOREACH '(' expr T_AS foreach_variable ')' foreach_statement { - $$ = Node("Foreach"). - append(Node("expr").append($3)). - append(Node("ForeachVariable").append($5)). - append($7); + $$ = node.SimpleNode("Foreach"). + Append(node.SimpleNode("expr").Append($3)). + Append(node.SimpleNode("ForeachVariable").Append($5)). + Append($7); } | T_FOREACH '(' expr T_AS foreach_variable T_DOUBLE_ARROW foreach_variable ')' foreach_statement { - $$ = Node("Foreach"). - append(Node("expr").append($3)). - append(Node("ForeachKey").append($5)). - append(Node("ForeachVariable").append($7)). - append($9); + $$ = node.SimpleNode("Foreach"). + Append(node.SimpleNode("expr").Append($3)). + Append(node.SimpleNode("ForeachKey").Append($5)). + Append(node.SimpleNode("ForeachVariable").Append($7)). + Append($9); } - | T_DECLARE '(' const_list ')' declare_statement { $$ = Node("Declare").append($3).append($5) } - | ';' /* empty statement */ { $$ = Node(""); } + | T_DECLARE '(' const_list ')' declare_statement { $$ = node.SimpleNode("Declare").Append($3).Append($5) } + | ';' /* empty statement */ { $$ = node.SimpleNode(""); } | T_TRY '{' inner_statement_list '}' catch_list finally_statement { - $$ = Node("Try"). - append($3). - append($5). - append($6); + $$ = node.SimpleNode("Try"). + Append($3). + Append($5). + Append($6); } - | T_THROW expr ';' { $$ = Node("Throw").append($2) } - | T_GOTO T_STRING ';' { $$ = Node("GoTo").attribute("Label", $2.String()) } - | T_STRING ':' { $$ = Node("Label").attribute("name", $1.String()) } + | T_THROW expr ';' { $$ = node.SimpleNode("Throw").Append($2) } + | T_GOTO T_STRING ';' { $$ = node.SimpleNode("GoTo").Attribute("Label", $2.String()) } + | T_STRING ':' { $$ = node.SimpleNode("Label").Attribute("name", $1.String()) } catch_list: - /* empty */ { $$ = Node("CatchList") } + /* empty */ { $$ = node.SimpleNode("CatchList") } | catch_list T_CATCH '(' catch_name_list T_VARIABLE ')' '{' inner_statement_list '}' - { $$ = $1.append($4).append(Node("Variable").attribute("name", $5.String())).append($8) } + { $$ = $1.Append($4).Append(node.SimpleNode("Variable").Attribute("name", $5.String())).Append($8) } ; catch_name_list: - name { $$ = Node("CatchNameList").append($1) } - | catch_name_list '|' name { $$ = $1.append($3) } + name { $$ = node.SimpleNode("CatchNameList").Append($1) } + | catch_name_list '|' name { $$ = $1.Append($3) } ; finally_statement: - /* empty */ { $$ = Node(""); } - | T_FINALLY '{' inner_statement_list '}' { $$ = Node("Finnaly").append($3) } + /* empty */ { $$ = node.SimpleNode(""); } + | T_FINALLY '{' inner_statement_list '}' { $$ = node.SimpleNode("Finnaly").Append($3) } ; unset_variables: - unset_variable { $$ = Node("UnsetVariablesList").append($1) } - | unset_variables ',' unset_variable { $$ = $1.append($3) } + unset_variable { $$ = node.SimpleNode("UnsetVariablesList").Append($1) } + | unset_variables ',' unset_variable { $$ = $1.Append($3) } ; unset_variable: @@ -424,12 +426,12 @@ unset_variable: function_declaration_statement: T_FUNCTION returns_ref T_STRING '(' parameter_list ')' return_type '{' inner_statement_list '}' { - $$ = Node("Function"). - attribute("name", $3.String()). - attribute("returns_ref", $2). - append($5). - append($7). - append($9); + $$ = node.SimpleNode("Function"). + Attribute("name", $3.String()). + Attribute("returns_ref", $2). + Append($5). + Append($7). + Append($9); } ; @@ -446,26 +448,26 @@ is_variadic: class_declaration_statement: class_modifiers T_CLASS T_STRING extends_from implements_list '{' class_statement_list '}' { - $$ = Node("Class"). - attribute("name", $3.String()). - append($1). - append(Node("Extends").append($4)). - append(Node("Implements").append($5)). - append($7); + $$ = node.SimpleNode("Class"). + Attribute("name", $3.String()). + Append($1). + Append(node.SimpleNode("Extends").Append($4)). + Append(node.SimpleNode("Implements").Append($5)). + Append($7); } | T_CLASS T_STRING extends_from implements_list '{' class_statement_list '}' { - $$ = Node("Class"). - attribute("name", $2.String()). - append(Node("Extends").append($3)). - append(Node("Implements").append($4)). - append($6); + $$ = node.SimpleNode("Class"). + Attribute("name", $2.String()). + Append(node.SimpleNode("Extends").Append($3)). + Append(node.SimpleNode("Implements").Append($4)). + Append($6); } ; class_modifiers: - class_modifier { $$ = Node("Class").attribute($1, "true") } - | class_modifiers class_modifier { $$ = $1.attribute($2, "true") } + class_modifier { $$ = node.SimpleNode("Class").Attribute($1, "true") } + | class_modifiers class_modifier { $$ = $1.Attribute($2, "true") } ; class_modifier: @@ -474,39 +476,39 @@ class_modifier: ; trait_declaration_statement: - T_TRAIT T_STRING '{' class_statement_list '}' { $$ = Node("Trait").attribute("name", $2.String()).append($4) } + T_TRAIT T_STRING '{' class_statement_list '}' { $$ = node.SimpleNode("Trait").Attribute("name", $2.String()).Append($4) } ; interface_declaration_statement: T_INTERFACE T_STRING interface_extends_list '{' class_statement_list '}' { - $$ = Node("Interface"). - attribute("name", $2.String()). - append(Node("Extends").append($3)). - append($5); + $$ = node.SimpleNode("Interface"). + Attribute("name", $2.String()). + Append(node.SimpleNode("Extends").Append($3)). + Append($5); } ; extends_from: - /* empty */ { $$ = Node(""); } + /* empty */ { $$ = node.SimpleNode(""); } | T_EXTENDS name { $$ = $2; } ; interface_extends_list: - /* empty */ { $$ = Node("") } + /* empty */ { $$ = node.SimpleNode("") } | T_EXTENDS name_list { $$ = $2; } ; implements_list: - /* empty */ { $$ = Node(""); } + /* empty */ { $$ = node.SimpleNode(""); } | T_IMPLEMENTS name_list { $$ = $2; } ; foreach_variable: variable { $$ = $1; } - | '&' variable { $$ = Node("Ref").append($2); } - | T_LIST '(' array_pair_list ')' { $$ = Node("List").append($3) } - | '[' array_pair_list ']' { $$ = Node("ShortList").append($2) } + | '&' variable { $$ = node.SimpleNode("Ref").Append($2); } + | T_LIST '(' array_pair_list ')' { $$ = node.SimpleNode("List").Append($3) } + | '[' array_pair_list ']' { $$ = node.SimpleNode("ShortList").Append($2) } ; for_statement: @@ -532,14 +534,14 @@ switch_case_list: ; case_list: - /* empty */ { $$ = Node("CaseList") } + /* empty */ { $$ = node.SimpleNode("CaseList") } | case_list T_CASE expr case_separator inner_statement_list { - $$ = $1.append(Node("Case").append(Node("expr").append($3)).append($5)) + $$ = $1.Append(node.SimpleNode("Case").Append(node.SimpleNode("expr").Append($3)).Append($5)) } | case_list T_DEFAULT case_separator inner_statement_list { - $$ = $1.append(Node("Default").append($4)) + $$ = $1.Append(node.SimpleNode("Default").Append($4)) } ; @@ -556,11 +558,11 @@ while_statement: if_stmt_without_else: T_IF '(' expr ')' statement { - $$ = Node("If").append(Node("expr").append($3)).append(Node("stmt").append($5)) + $$ = node.SimpleNode("If").Append(node.SimpleNode("expr").Append($3)).Append(node.SimpleNode("stmt").Append($5)) } | if_stmt_without_else T_ELSEIF '(' expr ')' statement { - $$ = $1.append(Node("ElseIf").append(Node("expr").append($4)).append(Node("stmt").append($6))) + $$ = $1.Append(node.SimpleNode("ElseIf").Append(node.SimpleNode("expr").Append($4)).Append(node.SimpleNode("stmt").Append($6))) } ; @@ -568,18 +570,18 @@ if_stmt: if_stmt_without_else %prec T_NOELSE { $$ = $1; } | if_stmt_without_else T_ELSE statement { - $$ = $1.append(Node("Else").append(Node("stmt").append($3))) + $$ = $1.Append(node.SimpleNode("Else").Append(node.SimpleNode("stmt").Append($3))) } ; alt_if_stmt_without_else: T_IF '(' expr ')' ':' inner_statement_list { - $$ = Node("AltIf").append(Node("expr").append($3)).append(Node("stmt").append($6)) + $$ = node.SimpleNode("AltIf").Append(node.SimpleNode("expr").Append($3)).Append(node.SimpleNode("stmt").Append($6)) } | alt_if_stmt_without_else T_ELSEIF '(' expr ')' ':' inner_statement_list { - $$ = $1.append(Node("AltElseIf").append(Node("expr").append($4)).append(Node("stmt").append($7))) + $$ = $1.Append(node.SimpleNode("AltElseIf").Append(node.SimpleNode("expr").Append($4)).Append(node.SimpleNode("stmt").Append($7))) } ; @@ -587,79 +589,79 @@ alt_if_stmt: alt_if_stmt_without_else T_ENDIF ';' { $$ = $1; } | alt_if_stmt_without_else T_ELSE ':' inner_statement_list T_ENDIF ';' { - $$ = $1.append(Node("AltElse").append(Node("stmt").append($4))) + $$ = $1.Append(node.SimpleNode("AltElse").Append(node.SimpleNode("stmt").Append($4))) } ; parameter_list: non_empty_parameter_list { $$ = $1; } - | /* empty */ { $$ = Node("Parameter list"); } + | /* empty */ { $$ = node.SimpleNode("Parameter list"); } ; non_empty_parameter_list: - parameter { $$ = Node("Parameter list").append($1) } - | non_empty_parameter_list ',' parameter { $$ = $1.append($3); } + parameter { $$ = node.SimpleNode("Parameter list").Append($1) } + | non_empty_parameter_list ',' parameter { $$ = $1.Append($3); } ; parameter: optional_type is_reference is_variadic T_VARIABLE { - $$ = Node("Parameter"). - append($1). - attribute("is_reference", $2). - attribute("is_variadic", $3). - attribute("var", $4.String()); + $$ = node.SimpleNode("Parameter"). + Append($1). + Attribute("is_reference", $2). + Attribute("is_variadic", $3). + Attribute("var", $4.String()); } | optional_type is_reference is_variadic T_VARIABLE '=' expr { - $$ = Node("Parameter"). - append($1). - attribute("is_reference", $2). - attribute("is_variadic", $3). - attribute("var", $4.String()). - append($6); + $$ = node.SimpleNode("Parameter"). + Append($1). + Attribute("is_reference", $2). + Attribute("is_variadic", $3). + Attribute("var", $4.String()). + Append($6); } ; optional_type: - /* empty */ { $$ = Node("No type") } + /* empty */ { $$ = node.SimpleNode("No type") } | type_expr { $$ = $1; } ; type_expr: type { $$ = $1; } - | '?' type { $$ = $2; $$.attribute("nullable", "true") } + | '?' type { $$ = $2; $$.Attribute("nullable", "true") } ; type: - T_ARRAY { $$ = Node("array type"); } - | T_CALLABLE { $$ = Node("callable type"); } + T_ARRAY { $$ = node.SimpleNode("array type"); } + | T_CALLABLE { $$ = node.SimpleNode("callable type"); } | name { $$ = $1; } ; return_type: - /* empty */ { $$ = Node("No return type"); } + /* empty */ { $$ = node.SimpleNode("No return type"); } | ':' type_expr { $$ = $2; } ; argument_list: - '(' ')' { $$ = Node("ArgumentList") } + '(' ')' { $$ = node.SimpleNode("ArgumentList") } | '(' non_empty_argument_list possible_comma ')' { $$ = $2; } ; non_empty_argument_list: - argument { $$ = Node("ArgumentList").append($1) } - | non_empty_argument_list ',' argument { $$ = $1.append($3) } + argument { $$ = node.SimpleNode("ArgumentList").Append($1) } + | non_empty_argument_list ',' argument { $$ = $1.Append($3) } ; argument: expr { $$ = $1; } - | T_ELLIPSIS expr { $$ = Node("Unpack").append($2) } + | T_ELLIPSIS expr { $$ = node.SimpleNode("Unpack").Append($2) } ; global_var_list: - global_var_list ',' global_var { $$ = $1.append($3); } - | global_var { $$ = Node("GlobalVarList").append($1); } + global_var_list ',' global_var { $$ = $1.Append($3); } + | global_var { $$ = node.SimpleNode("GlobalVarList").Append($1); } ; global_var: @@ -667,51 +669,51 @@ global_var: ; static_var_list: - static_var_list ',' static_var { $$ = $1.append($3); } - | static_var { $$ = Node("StaticVarList").append($1); } + static_var_list ',' static_var { $$ = $1.Append($3); } + | static_var { $$ = node.SimpleNode("StaticVarList").Append($1); } ; static_var: - T_VARIABLE { $$ = Node("StaticVariable").attribute("Name", $1.String()); } - | T_VARIABLE '=' expr { $$ = Node("StaticVariable").attribute("Name", $1.String()).append(Node("expr").append($3)); } + T_VARIABLE { $$ = node.SimpleNode("StaticVariable").Attribute("Name", $1.String()); } + | T_VARIABLE '=' expr { $$ = node.SimpleNode("StaticVariable").Attribute("Name", $1.String()).Append(node.SimpleNode("expr").Append($3)); } ; class_statement_list: - class_statement_list class_statement { $$ = $1.append($2) } - | /* empty */ { $$ = Node("Stmt") } + class_statement_list class_statement { $$ = $1.Append($2) } + | /* empty */ { $$ = node.SimpleNode("Stmt") } ; class_statement: - variable_modifiers property_list ';' { $$ = $2.append($1) } - | method_modifiers T_CONST class_const_list ';' { $$ = $3.append($1); } - | T_USE name_list trait_adaptations { $$ = Node("Use").append($2).append($3); } + variable_modifiers property_list ';' { $$ = $2.Append($1) } + | method_modifiers T_CONST class_const_list ';' { $$ = $3.Append($1); } + | T_USE name_list trait_adaptations { $$ = node.SimpleNode("Use").Append($2).Append($3); } | method_modifiers T_FUNCTION returns_ref identifier '(' parameter_list ')' return_type method_body { - $$ = Node("Function"). - append($1). - append(Node("name").append($4)). - attribute("returns_ref", $3). - append($6). - append($8). - append($9); + $$ = node.SimpleNode("Function"). + Append($1). + Append(node.SimpleNode("name").Append($4)). + Attribute("returns_ref", $3). + Append($6). + Append($8). + Append($9); } ; name_list: - name { $$ = Node("NameList").append($1) } - | name_list ',' name { $$ = $1.append($3) } + name { $$ = node.SimpleNode("NameList").Append($1) } + | name_list ',' name { $$ = $1.Append($3) } ; trait_adaptations: - ';' { $$ = Node(""); } - | '{' '}' { $$ = Node(""); } + ';' { $$ = node.SimpleNode(""); } + | '{' '}' { $$ = node.SimpleNode(""); } | '{' trait_adaptation_list '}' { $$ = $2; } ; trait_adaptation_list: - trait_adaptation { $$ = Node("TraitAdaptionList").append($1) } - | trait_adaptation_list trait_adaptation { $$ = $1.append($2) } + trait_adaptation { $$ = node.SimpleNode("TraitAdaptionList").Append($1) } + | trait_adaptation_list trait_adaptation { $$ = $1.Append($2) } ; trait_adaptation: @@ -721,206 +723,206 @@ trait_adaptation: trait_precedence: absolute_trait_method_reference T_INSTEADOF name_list - { $$ = Node("TraitPrecedence").append($1).append($3) } + { $$ = node.SimpleNode("TraitPrecedence").Append($1).Append($3) } ; trait_alias: - trait_method_reference T_AS T_STRING { $$ = $1.append(Node("as").attribute("value", $3.String())); } + trait_method_reference T_AS T_STRING { $$ = $1.Append(node.SimpleNode("as").Attribute("value", $3.String())); } | trait_method_reference T_AS reserved_non_modifiers - { $$ = $1.append(Node("as").append(Node("reservedNonModifiers"))); } + { $$ = $1.Append(node.SimpleNode("as").Append(node.SimpleNode("reservedNonModifiers"))); } | trait_method_reference T_AS member_modifier identifier - { $$ = $1.append($3).append($4); } - | trait_method_reference T_AS member_modifier { $$ = $1.append($3); } + { $$ = $1.Append($3).Append($4); } + | trait_method_reference T_AS member_modifier { $$ = $1.Append($3); } ; trait_method_reference: - identifier { $$ = Node("TraitMethodRef").append($1); } + identifier { $$ = node.SimpleNode("TraitMethodRef").Append($1); } | absolute_trait_method_reference { $$ = $1; } ; absolute_trait_method_reference: - name T_PAAMAYIM_NEKUDOTAYIM identifier { $$ = Node("TraitMethodRef").append($1).append($3) } + name T_PAAMAYIM_NEKUDOTAYIM identifier { $$ = node.SimpleNode("TraitMethodRef").Append($1).Append($3) } ; method_body: - ';' /* abstract method */ { $$ = Node(""); } + ';' /* abstract method */ { $$ = node.SimpleNode(""); } | '{' inner_statement_list '}' { $$ = $2; } ; variable_modifiers: non_empty_member_modifiers { $$ = $1; } - | T_VAR { $$ = Node("VarMemberModifier") } + | T_VAR { $$ = node.SimpleNode("VarMemberModifier") } ; method_modifiers: - /* empty */ { $$ = Node("PublicMemberModifier"); } + /* empty */ { $$ = node.SimpleNode("PublicMemberModifier"); } | non_empty_member_modifiers { $$ = $1; } ; non_empty_member_modifiers: member_modifier { $$ = $1; } - | non_empty_member_modifiers member_modifier { $$ = $1.append($2) } + | non_empty_member_modifiers member_modifier { $$ = $1.Append($2) } ; member_modifier: - T_PUBLIC { $$ = Node("PublicMemberModifier"); } - | T_PROTECTED { $$ = Node("ProtectedMemberModifier"); } - | T_PRIVATE { $$ = Node("PrivateMemberModifier"); } - | T_STATIC { $$ = Node("StaticMemberModifier"); } - | T_ABSTRACT { $$ = Node("AbstractMemberModifier"); } - | T_FINAL { $$ = Node("FinalMemberModifier"); } + T_PUBLIC { $$ = node.SimpleNode("PublicMemberModifier"); } + | T_PROTECTED { $$ = node.SimpleNode("ProtectedMemberModifier"); } + | T_PRIVATE { $$ = node.SimpleNode("PrivateMemberModifier"); } + | T_STATIC { $$ = node.SimpleNode("StaticMemberModifier"); } + | T_ABSTRACT { $$ = node.SimpleNode("AbstractMemberModifier"); } + | T_FINAL { $$ = node.SimpleNode("FinalMemberModifier"); } ; property_list: - property_list ',' property { $$ = $1.append($3) } - | property { $$ = Node("PropertyList").append($1) } + property_list ',' property { $$ = $1.Append($3) } + | property { $$ = node.SimpleNode("PropertyList").Append($1) } ; property: - T_VARIABLE { $$ = Node("Property").attribute("name", $1.String()) } - | T_VARIABLE '=' expr { $$ = Node("Property").attribute("name", $1.String()).append(Node("Default").append($3)) } + T_VARIABLE { $$ = node.SimpleNode("Property").Attribute("name", $1.String()) } + | T_VARIABLE '=' expr { $$ = node.SimpleNode("Property").Attribute("name", $1.String()).Append(node.SimpleNode("Default").Append($3)) } ; class_const_list: - class_const_list ',' class_const_decl { $$ = $1.append($3) } - | class_const_decl { $$ = Node("ConstList").append($1) } + class_const_list ',' class_const_decl { $$ = $1.Append($3) } + | class_const_decl { $$ = node.SimpleNode("ConstList").Append($1) } ; class_const_decl: - identifier '=' expr { $$ = Node("Const").append($3) } + identifier '=' expr { $$ = node.SimpleNode("Const").Append($3) } ; const_decl: - T_STRING '=' expr { $$ = Node("Const").attribute("name", $1.String()).append($3) } + T_STRING '=' expr { $$ = node.SimpleNode("Const").Attribute("name", $1.String()).Append($3) } ; echo_expr_list: - echo_expr_list ',' echo_expr { $$ = $1.append($3) } - | echo_expr { $$ = Node("EchoList").append($1) } + echo_expr_list ',' echo_expr { $$ = $1.Append($3) } + | echo_expr { $$ = node.SimpleNode("EchoList").Append($1) } ; echo_expr: - expr { $$ = Node("Echo").append($1) } + expr { $$ = node.SimpleNode("Echo").Append($1) } ; for_exprs: - /* empty */ { $$ = Node(""); } + /* empty */ { $$ = node.SimpleNode(""); } | non_empty_for_exprs { $$ = $1; } ; non_empty_for_exprs: - non_empty_for_exprs ',' expr { $$ = $1.append($3) } - | expr { $$ = Node("ExpressionList").append($1) } + non_empty_for_exprs ',' expr { $$ = $1.Append($3) } + | expr { $$ = node.SimpleNode("ExpressionList").Append($1) } ; anonymous_class: T_CLASS ctor_arguments extends_from implements_list '{' class_statement_list '}' { - $$ = Node("AnonymousClass"). - attribute("name", $1.String()). - append($2). - append($3). - append($4). - append($6); + $$ = node.SimpleNode("AnonymousClass"). + Attribute("name", $1.String()). + Append($2). + Append($3). + Append($4). + Append($6); } ; new_expr: - T_NEW class_name_reference ctor_arguments { $$ = Node("New").append($2).append($3) } - | T_NEW anonymous_class { $$ = Node("New").append($2) } + T_NEW class_name_reference ctor_arguments { $$ = node.SimpleNode("New").Append($2).Append($3) } + | T_NEW anonymous_class { $$ = node.SimpleNode("New").Append($2) } ; expr_without_variable: - T_LIST '(' array_pair_list ')' '=' expr { $$ = Node("Assign").append($3).append($6); } - | '[' array_pair_list ']' '=' expr { $$ = Node("Assign").append($2).append($5); } - | variable '=' expr { $$ = Node("Assign").append($1).append($3); } - | variable '=' '&' expr { $$ = Node("AssignRef").append($1).append($4); } - | T_CLONE expr { $$ = Node("Clone").append($2); } - | variable T_PLUS_EQUAL expr { $$ = Node("AssignAdd").append($1).append($3); } - | variable T_MINUS_EQUAL expr { $$ = Node("AssignSub").append($1).append($3); } - | variable T_MUL_EQUAL expr { $$ = Node("AssignMul").append($1).append($3); } - | variable T_POW_EQUAL expr { $$ = Node("AssignPow").append($1).append($3); } - | variable T_DIV_EQUAL expr { $$ = Node("AssignDiv").append($1).append($3); } - | variable T_CONCAT_EQUAL expr { $$ = Node("AssignConcat").append($1).append($3); } - | variable T_MOD_EQUAL expr { $$ = Node("AssignMod").append($1).append($3); } - | variable T_AND_EQUAL expr { $$ = Node("AssignAnd").append($1).append($3); } - | variable T_OR_EQUAL expr { $$ = Node("AssignOr").append($1).append($3); } - | variable T_XOR_EQUAL expr { $$ = Node("AssignXor").append($1).append($3); } - | variable T_SL_EQUAL expr { $$ = Node("AssignShiftLeft").append($1).append($3); } - | variable T_SR_EQUAL expr { $$ = Node("AssignShiftRight").append($1).append($3); } - | variable T_INC { $$ = Node("PostIncrement").append($1) } - | T_INC variable { $$ = Node("PreIncrement").append($2) } - | variable T_DEC { $$ = Node("PostDecrement").append($1) } - | T_DEC variable { $$ = Node("PreDecrement").append($2) } - | expr T_BOOLEAN_OR expr { $$ = Node("Or").append($1).append($3) } - | expr T_BOOLEAN_AND expr { $$ = Node("And").append($1).append($3) } - | expr T_LOGICAL_OR expr { $$ = Node("Or").append($1).append($3) } - | expr T_LOGICAL_AND expr { $$ = Node("And").append($1).append($3) } - | expr T_LOGICAL_XOR expr { $$ = Node("Xor").append($1).append($3) } - | expr '|' expr { $$ = Node("BitwiseOr").append($1).append($3) } - | expr '&' expr { $$ = Node("BitwiseAnd").append($1).append($3) } - | expr '^' expr { $$ = Node("BitwiseXor").append($1).append($3) } - | expr '.' expr { $$ = Node("Concat").append($1).append($3) } - | expr '+' expr { $$ = Node("Add").append($1).append($3) } - | expr '-' expr { $$ = Node("Sub").append($1).append($3) } - | expr '*' expr { $$ = Node("Mul").append($1).append($3) } - | expr T_POW expr { $$ = Node("Pow").append($1).append($3) } - | expr '/' expr { $$ = Node("Div").append($1).append($3) } - | expr '%' expr { $$ = Node("Mod").append($1).append($3) } - | expr T_SL expr { $$ = Node("ShiftLeft").append($1).append($3) } - | expr T_SR expr { $$ = Node("ShiftRight").append($1).append($3) } - | '+' expr %prec T_INC { $$ = Node("UnaryPlus").append($2) } - | '-' expr %prec T_INC { $$ = Node("UnaryMinus").append($2) } - | '!' expr { $$ = Node("BooleanNot").append($2) } - | '~' expr { $$ = Node("BitwiseNot").append($2) } - | expr T_IS_IDENTICAL expr { $$ = Node("Identical").append($1).append($3) } - | expr T_IS_NOT_IDENTICAL expr { $$ = Node("NotIdentical").append($1).append($3) } - | expr T_IS_EQUAL expr { $$ = Node("Equal").append($1).append($3) } - | expr T_IS_NOT_EQUAL expr { $$ = Node("NotEqual").append($1).append($3) } - | expr '<' expr { $$ = Node("Smaller").append($1).append($3) } - | expr T_IS_SMALLER_OR_EQUAL expr { $$ = Node("SmallerOrEqual").append($1).append($3) } - | expr '>' expr { $$ = Node("Greater").append($1).append($3) } - | expr T_IS_GREATER_OR_EQUAL expr { $$ = Node("GreaterOrEqual").append($1).append($3) } - | expr T_SPACESHIP expr { $$ = Node("Spaceship").append($1).append($3); } - | expr T_INSTANCEOF class_name_reference { $$ = Node("InstanceOf").append($1).append($3) } + T_LIST '(' array_pair_list ')' '=' expr { $$ = node.SimpleNode("Assign").Append($3).Append($6); } + | '[' array_pair_list ']' '=' expr { $$ = node.SimpleNode("Assign").Append($2).Append($5); } + | variable '=' expr { $$ = node.SimpleNode("Assign").Append($1).Append($3); } + | variable '=' '&' expr { $$ = node.SimpleNode("AssignRef").Append($1).Append($4); } + | T_CLONE expr { $$ = node.SimpleNode("Clone").Append($2); } + | variable T_PLUS_EQUAL expr { $$ = node.SimpleNode("AssignAdd").Append($1).Append($3); } + | variable T_MINUS_EQUAL expr { $$ = node.SimpleNode("AssignSub").Append($1).Append($3); } + | variable T_MUL_EQUAL expr { $$ = node.SimpleNode("AssignMul").Append($1).Append($3); } + | variable T_POW_EQUAL expr { $$ = node.SimpleNode("AssignPow").Append($1).Append($3); } + | variable T_DIV_EQUAL expr { $$ = node.SimpleNode("AssignDiv").Append($1).Append($3); } + | variable T_CONCAT_EQUAL expr { $$ = node.SimpleNode("AssignConcat").Append($1).Append($3); } + | variable T_MOD_EQUAL expr { $$ = node.SimpleNode("AssignMod").Append($1).Append($3); } + | variable T_AND_EQUAL expr { $$ = node.SimpleNode("AssignAnd").Append($1).Append($3); } + | variable T_OR_EQUAL expr { $$ = node.SimpleNode("AssignOr").Append($1).Append($3); } + | variable T_XOR_EQUAL expr { $$ = node.SimpleNode("AssignXor").Append($1).Append($3); } + | variable T_SL_EQUAL expr { $$ = node.SimpleNode("AssignShiftLeft").Append($1).Append($3); } + | variable T_SR_EQUAL expr { $$ = node.SimpleNode("AssignShiftRight").Append($1).Append($3); } + | variable T_INC { $$ = node.SimpleNode("PostIncrement").Append($1) } + | T_INC variable { $$ = node.SimpleNode("PreIncrement").Append($2) } + | variable T_DEC { $$ = node.SimpleNode("PostDecrement").Append($1) } + | T_DEC variable { $$ = node.SimpleNode("PreDecrement").Append($2) } + | expr T_BOOLEAN_OR expr { $$ = node.SimpleNode("Or").Append($1).Append($3) } + | expr T_BOOLEAN_AND expr { $$ = node.SimpleNode("And").Append($1).Append($3) } + | expr T_LOGICAL_OR expr { $$ = node.SimpleNode("Or").Append($1).Append($3) } + | expr T_LOGICAL_AND expr { $$ = node.SimpleNode("And").Append($1).Append($3) } + | expr T_LOGICAL_XOR expr { $$ = node.SimpleNode("Xor").Append($1).Append($3) } + | expr '|' expr { $$ = node.SimpleNode("BitwiseOr").Append($1).Append($3) } + | expr '&' expr { $$ = node.SimpleNode("BitwiseAnd").Append($1).Append($3) } + | expr '^' expr { $$ = node.SimpleNode("BitwiseXor").Append($1).Append($3) } + | expr '.' expr { $$ = node.SimpleNode("Concat").Append($1).Append($3) } + | expr '+' expr { $$ = node.SimpleNode("Add").Append($1).Append($3) } + | expr '-' expr { $$ = node.SimpleNode("Sub").Append($1).Append($3) } + | expr '*' expr { $$ = node.SimpleNode("Mul").Append($1).Append($3) } + | expr T_POW expr { $$ = node.SimpleNode("Pow").Append($1).Append($3) } + | expr '/' expr { $$ = node.SimpleNode("Div").Append($1).Append($3) } + | expr '%' expr { $$ = node.SimpleNode("Mod").Append($1).Append($3) } + | expr T_SL expr { $$ = node.SimpleNode("ShiftLeft").Append($1).Append($3) } + | expr T_SR expr { $$ = node.SimpleNode("ShiftRight").Append($1).Append($3) } + | '+' expr %prec T_INC { $$ = node.SimpleNode("UnaryPlus").Append($2) } + | '-' expr %prec T_INC { $$ = node.SimpleNode("UnaryMinus").Append($2) } + | '!' expr { $$ = node.SimpleNode("BooleanNot").Append($2) } + | '~' expr { $$ = node.SimpleNode("BitwiseNot").Append($2) } + | expr T_IS_IDENTICAL expr { $$ = node.SimpleNode("Identical").Append($1).Append($3) } + | expr T_IS_NOT_IDENTICAL expr { $$ = node.SimpleNode("NotIdentical").Append($1).Append($3) } + | expr T_IS_EQUAL expr { $$ = node.SimpleNode("Equal").Append($1).Append($3) } + | expr T_IS_NOT_EQUAL expr { $$ = node.SimpleNode("NotEqual").Append($1).Append($3) } + | expr '<' expr { $$ = node.SimpleNode("Smaller").Append($1).Append($3) } + | expr T_IS_SMALLER_OR_EQUAL expr { $$ = node.SimpleNode("SmallerOrEqual").Append($1).Append($3) } + | expr '>' expr { $$ = node.SimpleNode("Greater").Append($1).Append($3) } + | expr T_IS_GREATER_OR_EQUAL expr { $$ = node.SimpleNode("GreaterOrEqual").Append($1).Append($3) } + | expr T_SPACESHIP expr { $$ = node.SimpleNode("Spaceship").Append($1).Append($3); } + | expr T_INSTANCEOF class_name_reference { $$ = node.SimpleNode("InstanceOf").Append($1).Append($3) } | '(' expr ')' { $$ = $2; } | new_expr { $$ = $1; } - | expr '?' expr ':' expr { $$ = Node("Ternary").append($1).append($3).append($5); } - | expr '?' ':' expr { $$ = Node("Ternary").append($1).append($4); } - | expr T_COALESCE expr { $$ = Node("Coalesce").append($1).append($3); } + | expr '?' expr ':' expr { $$ = node.SimpleNode("Ternary").Append($1).Append($3).Append($5); } + | expr '?' ':' expr { $$ = node.SimpleNode("Ternary").Append($1).Append($4); } + | expr T_COALESCE expr { $$ = node.SimpleNode("Coalesce").Append($1).Append($3); } | internal_functions_in_yacc { $$ = $1} - | T_INT_CAST expr { $$ = Node("CastInt").append($2); } - | T_DOUBLE_CAST expr { $$ = Node("CastDouble").append($2); } - | T_STRING_CAST expr { $$ = Node("CastString").append($2); } - | T_ARRAY_CAST expr { $$ = Node("CastArray").append($2); } - | T_OBJECT_CAST expr { $$ = Node("CastObject").append($2); } - | T_BOOL_CAST expr { $$ = Node("CastBool").append($2); } - | T_UNSET_CAST expr { $$ = Node("CastUnset").append($2); } - | T_EXIT exit_expr { $$ = Node("Exit").append($2); } - | '@' expr { $$ = Node("Silence").append($2); } + | T_INT_CAST expr { $$ = node.SimpleNode("CastInt").Append($2); } + | T_DOUBLE_CAST expr { $$ = node.SimpleNode("CastDouble").Append($2); } + | T_STRING_CAST expr { $$ = node.SimpleNode("CastString").Append($2); } + | T_ARRAY_CAST expr { $$ = node.SimpleNode("CastArray").Append($2); } + | T_OBJECT_CAST expr { $$ = node.SimpleNode("CastObject").Append($2); } + | T_BOOL_CAST expr { $$ = node.SimpleNode("CastBool").Append($2); } + | T_UNSET_CAST expr { $$ = node.SimpleNode("CastUnset").Append($2); } + | T_EXIT exit_expr { $$ = node.SimpleNode("Exit").Append($2); } + | '@' expr { $$ = node.SimpleNode("Silence").Append($2); } | scalar { $$ = $1; } - | '`' backticks_expr '`' { $$ = Node("ShellExec").append($2) } - | T_PRINT expr { $$ = Node("Print").append($2); } - | T_YIELD { $$ = Node("Yield"); } - | T_YIELD expr { $$ = Node("Yield").append($2); } - | T_YIELD expr T_DOUBLE_ARROW expr { $$ = Node("Yield").append($2).append($4); } - | T_YIELD_FROM expr { $$ = Node("YieldFrom").append($2); } + | '`' backticks_expr '`' { $$ = node.SimpleNode("ShellExec").Append($2) } + | T_PRINT expr { $$ = node.SimpleNode("Print").Append($2); } + | T_YIELD { $$ = node.SimpleNode("Yield"); } + | T_YIELD expr { $$ = node.SimpleNode("Yield").Append($2); } + | T_YIELD expr T_DOUBLE_ARROW expr { $$ = node.SimpleNode("Yield").Append($2).Append($4); } + | T_YIELD_FROM expr { $$ = node.SimpleNode("YieldFrom").Append($2); } | T_FUNCTION returns_ref '(' parameter_list ')' lexical_vars return_type '{' inner_statement_list '}' { - $$ = Node("Closure"). - attribute("returns_ref", $2). - append($4). - append($6). - append($7). - append($9); + $$ = node.SimpleNode("Closure"). + Attribute("returns_ref", $2). + Append($4). + Append($6). + Append($7). + Append($9); } | T_STATIC T_FUNCTION returns_ref '(' parameter_list ')' lexical_vars return_type '{' inner_statement_list '}' { - $$ = Node("StaticClosure"). - attribute("returns_ref", $3). - append($5). - append($7). - append($8). - append($10); + $$ = node.SimpleNode("StaticClosure"). + Attribute("returns_ref", $3). + Append($5). + Append($7). + Append($8). + Append($10); } ; @@ -930,31 +932,31 @@ returns_ref: ; lexical_vars: - /* empty */ { $$ = Node("") } + /* empty */ { $$ = node.SimpleNode("") } | T_USE '(' lexical_var_list ')' { $$ = $3; } ; lexical_var_list: - lexical_var_list ',' lexical_var { $$ = $1.append($3) } - | lexical_var { $$ = Node("ClosureUses").append($1) } + lexical_var_list ',' lexical_var { $$ = $1.Append($3) } + | lexical_var { $$ = node.SimpleNode("ClosureUses").Append($1) } ; lexical_var: - T_VARIABLE { $$ = Node("Variable").attribute("value", $1.String()) } - | '&' T_VARIABLE { $$ = Node("Variable").attribute("value", $2.String()).attribute("ref", "true") } + T_VARIABLE { $$ = node.SimpleNode("Variable").Attribute("value", $1.String()) } + | '&' T_VARIABLE { $$ = node.SimpleNode("Variable").Attribute("value", $2.String()).Attribute("ref", "true") } ; function_call: - name argument_list { $$ = Node("FunctionCall").append($1).append($2) } + name argument_list { $$ = node.SimpleNode("FunctionCall").Append($1).Append($2) } | class_name T_PAAMAYIM_NEKUDOTAYIM member_name argument_list - { $$ = Node("StaticCall").append($1).append($3).append($4) } + { $$ = node.SimpleNode("StaticCall").Append($1).Append($3).Append($4) } | variable_class_name T_PAAMAYIM_NEKUDOTAYIM member_name argument_list - { $$ = Node("StaticCall").append($1).append($3).append($4) } - | callable_expr argument_list { $$ = Node("Call").append($1).append($2); } + { $$ = node.SimpleNode("StaticCall").Append($1).Append($3).Append($4) } + | callable_expr argument_list { $$ = node.SimpleNode("Call").Append($1).Append($2); } ; class_name: - T_STATIC { $$ = Node("Static") } + T_STATIC { $$ = node.SimpleNode("Static") } | name { $$ = $1; } ; @@ -964,42 +966,42 @@ class_name_reference: ; exit_expr: - /* empty */ { $$ = Node("") } + /* empty */ { $$ = node.SimpleNode("") } | '(' optional_expr ')' { $$ = $2; } ; backticks_expr: - /* empty */ { $$ = Node("EmptyBackticks") } - | T_ENCAPSED_AND_WHITESPACE { $$ = Node("String").attribute("value", $1.String()) } + /* empty */ { $$ = node.SimpleNode("EmptyBackticks") } + | T_ENCAPSED_AND_WHITESPACE { $$ = node.TokenNode("String", $1) } | encaps_list { $$ = $1; } ; ctor_arguments: - /* empty */ { $$ = Node("ArgumentList") } + /* empty */ { $$ = node.SimpleNode("ArgumentList") } | argument_list { $$ = $1; } ; dereferencable_scalar: T_ARRAY '(' array_pair_list ')' { $$ = $3; } | '[' array_pair_list ']' { $$ = $2; } - | T_CONSTANT_ENCAPSED_STRING { $$ = Node("String").attribute("value", $1.String()) } + | T_CONSTANT_ENCAPSED_STRING { $$ = node.TokenNode("String", $1) } ; scalar: - T_LNUMBER { $$ = Node("Scalar").append(Node("Lnumber").attribute("value", $1.String())) } - | T_DNUMBER { $$ = Node("Scalar").append(Node("Dnumber").attribute("value", $1.String())) } - | T_LINE { $$ = Node("Scalar").append(Node("__LINE__")) } - | T_FILE { $$ = Node("Scalar").append(Node("__FILE__")) } - | T_DIR { $$ = Node("Scalar").append(Node("__DIR__")) } - | T_TRAIT_C { $$ = Node("Scalar").append(Node("__TRAIT__")) } - | T_METHOD_C { $$ = Node("Scalar").append(Node("__METHOD__")); } - | T_FUNC_C { $$ = Node("Scalar").append(Node("__FUNCTION__")); } - | T_NS_C { $$ = Node("Scalar").append(Node("__NAMESPACE__")); } - | T_CLASS_C { $$ = Node("Scalar").append(Node("__CLASS__")); } + T_LNUMBER { $$ = node.TokenNode("Lnumber", $1) } + | T_DNUMBER { $$ = node.TokenNode("Dnumber", $1) } + | T_LINE { $$ = node.TokenNode("MagicConst", $1) } + | T_FILE { $$ = node.TokenNode("MagicConst", $1) } + | T_DIR { $$ = node.TokenNode("MagicConst", $1) } + | T_TRAIT_C { $$ = node.TokenNode("MagicConst", $1) } + | T_METHOD_C { $$ = node.TokenNode("MagicConst", $1) } + | T_FUNC_C { $$ = node.TokenNode("MagicConst", $1) } + | T_NS_C { $$ = node.TokenNode("MagicConst", $1) } + | T_CLASS_C { $$ = node.TokenNode("MagicConst", $1) } | T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC - { $$ = Node("Scalar").append(Node("Heredoc").attribute("value", $2.String())) } + { $$ = node.SimpleNode("Scalar").Append(node.TokenNode("Heredoc", $1)).Append(node.TokenNode("string", $2)).Append(node.TokenNode("HeredocEnd", $3)) } | T_START_HEREDOC T_END_HEREDOC - { $$ = Node("Scalar").append(Node("Heredoc")) } + { $$ = node.SimpleNode("Scalar").Append(node.TokenNode("Heredoc", $1)).Append(node.TokenNode("HeredocEnd", $2)) } | '"' encaps_list '"' { $$ = $2; } | T_START_HEREDOC encaps_list T_END_HEREDOC { $$ = $2; } | dereferencable_scalar { $$ = $1; } @@ -1007,10 +1009,10 @@ scalar: ; constant: - name { $$ = Node("Const").append($1) } - | class_name T_PAAMAYIM_NEKUDOTAYIM identifier { $$ = Node("Const").append($1).append($3) } + name { $$ = node.SimpleNode("Const").Append($1) } + | class_name T_PAAMAYIM_NEKUDOTAYIM identifier { $$ = node.SimpleNode("Const").Append($1).Append($3) } | variable_class_name T_PAAMAYIM_NEKUDOTAYIM identifier - { $$ = Node("Const").append($1).append($3) } + { $$ = node.SimpleNode("Const").Append($1).Append($3) } ; expr: @@ -1019,7 +1021,7 @@ expr: ; optional_expr: - /* empty */ { $$ = Node("") } + /* empty */ { $$ = node.SimpleNode("") } | expr { $$ = $1; } ; @@ -1041,42 +1043,42 @@ callable_expr: callable_variable: simple_variable { $$ = $1; } - | dereferencable '[' optional_expr ']' { $$ = Node("Dim").append($1).append($3)} - | constant '[' optional_expr ']' { $$ = Node("Dim").append($1).append($3)} - | dereferencable '{' expr '}' { $$ = Node("Dim").append($1).append($3)} + | dereferencable '[' optional_expr ']' { $$ = node.SimpleNode("Dim").Append($1).Append($3)} + | constant '[' optional_expr ']' { $$ = node.SimpleNode("Dim").Append($1).Append($3)} + | dereferencable '{' expr '}' { $$ = node.SimpleNode("Dim").Append($1).Append($3)} | dereferencable T_OBJECT_OPERATOR property_name argument_list - { $$ = Node("MethodCall").append($1).append($3).append($4)} + { $$ = node.SimpleNode("MethodCall").Append($1).Append($3).Append($4)} | function_call { $$ = $1; } ; variable: callable_variable { $$ = $1; } | static_member { $$ = $1; } - | dereferencable T_OBJECT_OPERATOR property_name { $$ = Node("Property").append($1).append($3) } + | dereferencable T_OBJECT_OPERATOR property_name { $$ = node.SimpleNode("Property").Append($1).Append($3) } ; simple_variable: - T_VARIABLE { $$ = Node("Variable").attribute("name", $1.String()); } - | '$' '{' expr '}' { $$ = Node("Variable").append($3); } - | '$' simple_variable { $$ = Node("Variable").append($2); } + T_VARIABLE { $$ = node.SimpleNode("Variable").Attribute("name", $1.String()); } + | '$' '{' expr '}' { $$ = node.SimpleNode("Variable").Append($3); } + | '$' simple_variable { $$ = node.SimpleNode("Variable").Append($2); } ; static_member: class_name T_PAAMAYIM_NEKUDOTAYIM simple_variable - { $$ = Node("StaticProp").append($1).append($3) } + { $$ = node.SimpleNode("StaticProp").Append($1).Append($3) } | variable_class_name T_PAAMAYIM_NEKUDOTAYIM simple_variable - { $$ = Node("StaticProp").append($1).append($3) } + { $$ = node.SimpleNode("StaticProp").Append($1).Append($3) } ; new_variable: simple_variable { $$ = $1 } - | new_variable '[' optional_expr ']' { $$ = Node("Dim").append($1).append($3) } - | new_variable '{' expr '}' { $$ = Node("Dim").append($1).append($3) } - | new_variable T_OBJECT_OPERATOR property_name { $$ = Node("Property").append($1).append($3) } + | new_variable '[' optional_expr ']' { $$ = node.SimpleNode("Dim").Append($1).Append($3) } + | new_variable '{' expr '}' { $$ = node.SimpleNode("Dim").Append($1).Append($3) } + | new_variable T_OBJECT_OPERATOR property_name { $$ = node.SimpleNode("Property").Append($1).Append($3) } | class_name T_PAAMAYIM_NEKUDOTAYIM simple_variable - { $$ = Node("StaticProperty").append($1).append($3) } + { $$ = node.SimpleNode("StaticProperty").Append($1).Append($3) } | new_variable T_PAAMAYIM_NEKUDOTAYIM simple_variable - { $$ = Node("StaticProperty").append($1).append($3) } + { $$ = node.SimpleNode("StaticProperty").Append($1).Append($3) } ; member_name: @@ -1086,7 +1088,7 @@ member_name: ; property_name: - T_STRING { $$ = Node("PropertyName").attribute("value", $1.String()) } + T_STRING { $$ = node.SimpleNode("PropertyName").Attribute("value", $1.String()) } | '{' expr '}' { $$ = $2; } | simple_variable { $$ = $1 } ; @@ -1096,75 +1098,75 @@ array_pair_list: ; possible_array_pair: - /* empty */ { $$ = Node(""); } + /* empty */ { $$ = node.SimpleNode(""); } | array_pair { $$ = $1; } ; non_empty_array_pair_list: non_empty_array_pair_list ',' possible_array_pair - { $$ = $1.append($3) } - | possible_array_pair { $$ = Node("ArrayPairList").append($1) } + { $$ = $1.Append($3) } + | possible_array_pair { $$ = node.SimpleNode("ArrayPairList").Append($1) } ; array_pair: - expr T_DOUBLE_ARROW expr { $$ = Node("ArrayElement").append($1).append($3) } - | expr { $$ = Node("ArrayElement").append($1) } - | expr T_DOUBLE_ARROW '&' variable { $$ = Node("ArrayElement").append($1).append(Node("Ref").append($4)) } - | '&' variable { $$ = Node("ArrayElement").append(Node("Ref").append($2)) } + expr T_DOUBLE_ARROW expr { $$ = node.SimpleNode("ArrayElement").Append($1).Append($3) } + | expr { $$ = node.SimpleNode("ArrayElement").Append($1) } + | expr T_DOUBLE_ARROW '&' variable { $$ = node.SimpleNode("ArrayElement").Append($1).Append(node.SimpleNode("Ref").Append($4)) } + | '&' variable { $$ = node.SimpleNode("ArrayElement").Append(node.SimpleNode("Ref").Append($2)) } | expr T_DOUBLE_ARROW T_LIST '(' array_pair_list ')' { - $$ = Node("ArrayElement"). - append($1). - append(Node("ArrayList").append($5)) + $$ = node.SimpleNode("ArrayElement"). + Append($1). + Append(node.SimpleNode("ArrayList").Append($5)) } | T_LIST '(' array_pair_list ')' { - $$ = Node("ArrayElement"). - append(Node("ArrayList").append($3)) + $$ = node.SimpleNode("ArrayElement"). + Append(node.SimpleNode("ArrayList").Append($3)) } ; encaps_list: - encaps_list encaps_var { $$ = $1.append($2) } - | encaps_list T_ENCAPSED_AND_WHITESPACE { $$ = $1.append(Node("String").attribute("value", $2.String())) } - | encaps_var { $$ = Node("EncapsList").append($1) } - | T_ENCAPSED_AND_WHITESPACE encaps_var { $$ = Node("EncapsList").append(Node("String").attribute("value", $1.String())).append($2) } + encaps_list encaps_var { $$ = $1.Append($2) } + | encaps_list T_ENCAPSED_AND_WHITESPACE { $$ = $1.Append(node.SimpleNode("String").Attribute("value", $2.String())) } + | encaps_var { $$ = node.SimpleNode("EncapsList").Append($1) } + | T_ENCAPSED_AND_WHITESPACE encaps_var { $$ = node.SimpleNode("EncapsList").Append(node.SimpleNode("String").Attribute("value", $1.String())).Append($2) } ; encaps_var: - T_VARIABLE { $$ = Node("Variable").attribute("value", $1.String()) } - | T_VARIABLE '[' encaps_var_offset ']' { $$ = Node("Variable").attribute("value", $1.String()).append(Node("offset").append($3)) } - | T_VARIABLE T_OBJECT_OPERATOR T_STRING { $$ = Node("Variable").attribute("value", $1.String()).append(Node("property").attribute("value", $3.String())) } - | T_DOLLAR_OPEN_CURLY_BRACES expr '}' { $$ = Node("Variable").append(Node("expr").append($2)) } - | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}' { $$ = Node("Variable").attribute("value", $2.String()) } + T_VARIABLE { $$ = node.SimpleNode("Variable").Attribute("value", $1.String()) } + | T_VARIABLE '[' encaps_var_offset ']' { $$ = node.SimpleNode("Variable").Attribute("value", $1.String()).Append(node.SimpleNode("offset").Append($3)) } + | T_VARIABLE T_OBJECT_OPERATOR T_STRING { $$ = node.SimpleNode("Variable").Attribute("value", $1.String()).Append(node.SimpleNode("property").Attribute("value", $3.String())) } + | T_DOLLAR_OPEN_CURLY_BRACES expr '}' { $$ = node.SimpleNode("Variable").Append(node.SimpleNode("expr").Append($2)) } + | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}' { $$ = node.SimpleNode("Variable").Attribute("value", $2.String()) } | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}' - { $$ = Node("Variable").attribute("value", $2.String()).append(Node("offset").append($4)) } + { $$ = node.SimpleNode("Variable").Attribute("value", $2.String()).Append(node.SimpleNode("offset").Append($4)) } | T_CURLY_OPEN variable '}' { $$ = $2; } ; encaps_var_offset: - T_STRING { $$ = Node("OffsetString").attribute("value", $1.String()) } - | T_NUM_STRING { $$ = Node("OffsetNumString").attribute("value", $1.String()) } - | '-' T_NUM_STRING { $$ = Node("OffsetNegateNumString").attribute("value", $2.String()) } - | T_VARIABLE { $$ = Node("OffsetVariable").attribute("value", $1.String()) } + T_STRING { $$ = node.SimpleNode("OffsetString").Attribute("value", $1.String()) } + | T_NUM_STRING { $$ = node.SimpleNode("OffsetNumString").Attribute("value", $1.String()) } + | '-' T_NUM_STRING { $$ = node.SimpleNode("OffsetNegateNumString").Attribute("value", $2.String()) } + | T_VARIABLE { $$ = node.SimpleNode("OffsetVariable").Attribute("value", $1.String()) } ; internal_functions_in_yacc: T_ISSET '(' isset_variables possible_comma ')' { $$ = $3; } - | T_EMPTY '(' expr ')' { $$ = Node("Empty").append($3); } - | T_INCLUDE expr { $$ = Node("Include").append($2); } - | T_INCLUDE_ONCE expr { $$ = Node("IncludeOnce").append($2); } - | T_EVAL '(' expr ')' { $$ = Node("Eval").append($3); } - | T_REQUIRE expr { $$ = Node("Require").append($2); } - | T_REQUIRE_ONCE expr { $$ = Node("RequireOnce").append($2); } + | T_EMPTY '(' expr ')' { $$ = node.SimpleNode("Empty").Append($3); } + | T_INCLUDE expr { $$ = node.SimpleNode("Include").Append($2); } + | T_INCLUDE_ONCE expr { $$ = node.SimpleNode("IncludeOnce").Append($2); } + | T_EVAL '(' expr ')' { $$ = node.SimpleNode("Eval").Append($3); } + | T_REQUIRE expr { $$ = node.SimpleNode("Require").Append($2); } + | T_REQUIRE_ONCE expr { $$ = node.SimpleNode("RequireOnce").Append($2); } ; isset_variables: isset_variable { $$ = $1; } - | isset_variables ',' isset_variable { $$ = Node("AndIsset").append($1).append($3); } + | isset_variables ',' isset_variable { $$ = node.SimpleNode("AndIsset").Append($1).Append($3); } ; isset_variable: - expr { $$ = Node("Isset").append($1) } + expr { $$ = node.SimpleNode("Isset").Append($1) } ; ///////////////////////////////////////////////////////////////////////// diff --git a/scanner.go b/scanner.go index 86ebdef..7df35ac 100644 --- a/scanner.go +++ b/scanner.go @@ -11,6 +11,7 @@ package main import ( "bytes" "fmt" + "github.com/z7zmey/php-parser/token" ) const ( @@ -7661,7 +7662,7 @@ yystate614: yyrule1: // [ \t\n\r]+ { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) goto yystate0 } yyrule2: // . @@ -7684,43 +7685,43 @@ yyrule2: // . } c = l.Next() } - lval.token = newToken(l.handleNewLine(tb)) + lval.token = token.NewToken(l.handleNewLine(tb)) return T_INLINE_HTML } yyrule3: // \<\?php([ \t]|{NEW_LINE}) { l.begin(PHP) - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) // return T_OPEN_TAG; + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) // return T_OPEN_TAG; goto yystate0 } yyrule4: // \<\? { l.begin(PHP) - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) // return T_OPEN_TAG; + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) // return T_OPEN_TAG; goto yystate0 } yyrule5: // \<\?= { l.begin(PHP) - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_ECHO goto yystate0 } yyrule6: // [ \t\n\r]+ { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) // return T_WHITESPACE + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) // return T_WHITESPACE goto yystate0 } yyrule7: // \?\>{NEW_LINE}? { l.begin(INITIAL) - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return rune2Class(';') goto yystate0 } yyrule8: // {DNUM}|{EXPONENT_DNUM} { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_DNUMBER goto yystate0 } @@ -7739,10 +7740,10 @@ yyrule9: // {BNUM} } } if len(tb)-i < 64 { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_LNUMBER } else { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_DNUMBER } goto yystate0 @@ -7751,10 +7752,10 @@ yyrule10: // {LNUM} { if len(l.TokenBytes(nil)) < 20 { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_LNUMBER } else { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_DNUMBER } goto yystate0 @@ -7775,768 +7776,768 @@ yyrule11: // {HNUM} } length := len(tb) - i if length < 16 || (length == 16 && tb[i] <= '7') { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_LNUMBER } else { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_DNUMBER } goto yystate0 } yyrule12: // abstract { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_ABSTRACT goto yystate0 } yyrule13: // array { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_ARRAY goto yystate0 } yyrule14: // as { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_AS goto yystate0 } yyrule15: // break { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_BREAK goto yystate0 } yyrule16: // callable { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_CALLABLE goto yystate0 } yyrule17: // case { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_CASE goto yystate0 } yyrule18: // catch { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_CATCH goto yystate0 } yyrule19: // class { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_CLASS goto yystate0 } yyrule20: // clone { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_CLONE goto yystate0 } yyrule21: // const { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_CONST goto yystate0 } yyrule22: // continue { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_CONTINUE goto yystate0 } yyrule23: // declare { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_DECLARE goto yystate0 } yyrule24: // default { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_DEFAULT goto yystate0 } yyrule25: // do { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_DO goto yystate0 } yyrule26: // echo { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_ECHO goto yystate0 } yyrule27: // else { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_ELSE goto yystate0 } yyrule28: // elseif { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_ELSEIF goto yystate0 } yyrule29: // empty { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_EMPTY goto yystate0 } yyrule30: // enddeclare { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_ENDDECLARE goto yystate0 } yyrule31: // endfor { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_ENDFOR goto yystate0 } yyrule32: // endforeach { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_ENDFOREACH goto yystate0 } yyrule33: // endif { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_ENDIF goto yystate0 } yyrule34: // endswitch { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_ENDSWITCH goto yystate0 } yyrule35: // endwhile { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_ENDWHILE goto yystate0 } yyrule36: // eval { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_EVAL goto yystate0 } yyrule37: // exit|die { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_EXIT goto yystate0 } yyrule38: // extends { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_EXTENDS goto yystate0 } yyrule39: // final { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_FINAL goto yystate0 } yyrule40: // finally { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_FINALLY goto yystate0 } yyrule41: // for { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_FOR goto yystate0 } yyrule42: // foreach { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_FOREACH goto yystate0 } yyrule43: // function|cfunction { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_FUNCTION goto yystate0 } yyrule44: // global { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_GLOBAL goto yystate0 } yyrule45: // goto { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_GOTO goto yystate0 } yyrule46: // if { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_IF goto yystate0 } yyrule47: // isset { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_ISSET goto yystate0 } yyrule48: // implements { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_IMPLEMENTS goto yystate0 } yyrule49: // instanceof { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_INSTANCEOF goto yystate0 } yyrule50: // insteadof { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_INSTEADOF goto yystate0 } yyrule51: // interface { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_INTERFACE goto yystate0 } yyrule52: // list { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_LIST goto yystate0 } yyrule53: // namespace { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_NAMESPACE goto yystate0 } yyrule54: // private { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_PRIVATE goto yystate0 } yyrule55: // public { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_PUBLIC goto yystate0 } yyrule56: // print { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_PRINT goto yystate0 } yyrule57: // protected { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_PROTECTED goto yystate0 } yyrule58: // return { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_RETURN goto yystate0 } yyrule59: // static { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_STATIC goto yystate0 } yyrule60: // switch { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_SWITCH goto yystate0 } yyrule61: // throw { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_THROW goto yystate0 } yyrule62: // trait { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_TRAIT goto yystate0 } yyrule63: // try { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_TRY goto yystate0 } yyrule64: // unset { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_UNSET goto yystate0 } yyrule65: // use { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_USE goto yystate0 } yyrule66: // var { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_VAR goto yystate0 } yyrule67: // while { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_WHILE goto yystate0 } yyrule68: // yield[ \t\n\r]+from[^a-zA-Z0-9_\x80-\xff] { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_YIELD_FROM goto yystate0 } yyrule69: // yield { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_YIELD goto yystate0 } yyrule70: // include { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_INCLUDE goto yystate0 } yyrule71: // include_once { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_INCLUDE_ONCE goto yystate0 } yyrule72: // require { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_REQUIRE goto yystate0 } yyrule73: // require_once { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_REQUIRE_ONCE goto yystate0 } yyrule74: // __CLASS__ { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_CLASS_C goto yystate0 } yyrule75: // __DIR__ { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_DIR goto yystate0 } yyrule76: // __FILE__ { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_FILE goto yystate0 } yyrule77: // __FUNCTION__ { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_FUNC_C goto yystate0 } yyrule78: // __LINE__ { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_LINE goto yystate0 } yyrule79: // __NAMESPACE__ { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_NS_C goto yystate0 } yyrule80: // __METHOD__ { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_METHOD_C goto yystate0 } yyrule81: // __TRAIT__ { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_TRAIT_C goto yystate0 } yyrule82: // __halt_compiler { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_HALT_COMPILER goto yystate0 } yyrule83: // \([ \t]*array[ \t]*\) { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_ARRAY_CAST goto yystate0 } yyrule84: // \([ \t]*(bool|boolean)[ \t]*\) { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_BOOL_CAST goto yystate0 } yyrule85: // \([ \t]*(real|double|float)[ \t]*\) { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_DOUBLE_CAST goto yystate0 } yyrule86: // \([ \t]*(int|integer)[ \t]*\) { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_INT_CAST goto yystate0 } yyrule87: // \([ \t]*object[ \t]*\) { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_OBJECT_CAST goto yystate0 } yyrule88: // \([ \t]*string[ \t]*\) { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_STRING_CAST goto yystate0 } yyrule89: // \([ \t]*unset[ \t]*\) { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_UNSET_CAST goto yystate0 } yyrule90: // new { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_NEW goto yystate0 } yyrule91: // and { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_LOGICAL_AND goto yystate0 } yyrule92: // or { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_LOGICAL_OR goto yystate0 } yyrule93: // xor { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_LOGICAL_XOR goto yystate0 } yyrule94: // \\ { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_NS_SEPARATOR goto yystate0 } yyrule95: // \.\.\. { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_ELLIPSIS goto yystate0 } yyrule96: // :: { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_PAAMAYIM_NEKUDOTAYIM // T_DOUBLE_COLON goto yystate0 } yyrule97: // && { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_BOOLEAN_AND goto yystate0 } yyrule98: // \|\| { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_BOOLEAN_OR goto yystate0 } yyrule99: // &= { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_AND_EQUAL goto yystate0 } yyrule100: // \|= { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_OR_EQUAL goto yystate0 } yyrule101: // \.= { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_CONCAT_EQUAL goto yystate0 } yyrule102: // \*= { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_MUL_EQUAL goto yystate0 } yyrule103: // \*\*= { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_POW_EQUAL goto yystate0 } yyrule104: // [/]= { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_DIV_EQUAL goto yystate0 } yyrule105: // \+= { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_PLUS_EQUAL goto yystate0 } yyrule106: // -= { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_MINUS_EQUAL goto yystate0 } yyrule107: // \^= { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_XOR_EQUAL goto yystate0 } yyrule108: // %= { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_MOD_EQUAL goto yystate0 } yyrule109: // -- { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_DEC goto yystate0 } yyrule110: // \+\+ { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_INC goto yystate0 } yyrule111: // => { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_DOUBLE_ARROW goto yystate0 } yyrule112: // \<=\> { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_SPACESHIP goto yystate0 } yyrule113: // \!=|\<\> { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_IS_NOT_EQUAL goto yystate0 } yyrule114: // \!== { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_IS_NOT_IDENTICAL goto yystate0 } yyrule115: // == { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_IS_EQUAL goto yystate0 } yyrule116: // === { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_IS_IDENTICAL goto yystate0 } yyrule117: // \<\<= { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_SL_EQUAL goto yystate0 } yyrule118: // \>\>= { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_SR_EQUAL goto yystate0 } yyrule119: // \>= { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_IS_GREATER_OR_EQUAL goto yystate0 } yyrule120: // \<= { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_IS_SMALLER_OR_EQUAL goto yystate0 } yyrule121: // \*\* { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_POW goto yystate0 } yyrule122: // \<\< { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_SL goto yystate0 } yyrule123: // \>\> { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_SR goto yystate0 } yyrule124: // \?\? { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_COALESCE goto yystate0 } yyrule125: // (#|[/][/]).*{NEW_LINE} { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) // return T_COMMENT; // TODO: handle ?> + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) // return T_COMMENT; // TODO: handle ?> goto yystate0 } yyrule126: // [/][*][^*]*[*]+([^*/][^*]*[*]+)*[/] { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) // return T_COMMENT; // TODO: handle ?> + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) // return T_COMMENT; // TODO: handle ?> goto yystate0 } yyrule127: // [/][*][*][^*]*[*]+([^*/][^*]*[*]+)*[/] { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) // return T_DOC_COMMENT; // TODO: handle ?> + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) // return T_DOC_COMMENT; // TODO: handle ?> goto yystate0 } yyrule128: // '[^']*(\\')*' { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_CONSTANT_ENCAPSED_STRING goto yystate0 } yyrule129: // {OPERATORS} { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return rune2Class(rune(l.TokenBytes(nil)[0])) goto yystate0 } yyrule130: // \{ { l.pushState(PHP) - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return rune2Class(rune(l.TokenBytes(nil)[0])) goto yystate0 } yyrule131: // \} { l.popState() - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return rune2Class(rune(l.TokenBytes(nil)[0])) goto yystate0 } yyrule132: // \${VAR_NAME} { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_VARIABLE goto yystate0 } yyrule133: // {VAR_NAME} { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_STRING goto yystate0 } yyrule134: // -> { l.begin(PROPERTY) - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_OBJECT_OPERATOR goto yystate0 } yyrule135: // [ \t\n\r]+ { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_WHITESPACE goto yystate0 } yyrule136: // -> { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_OBJECT_OPERATOR goto yystate0 } yyrule137: // {VAR_NAME} { l.begin(PHP) - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_STRING goto yystate0 } @@ -8548,21 +8549,21 @@ yyrule138: // . } yyrule139: // [\']([^\\\']*([\\][\'])*)*[\'] { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_CONSTANT_ENCAPSED_STRING goto yystate0 } yyrule140: // ` { l.begin(BACKQUOTE) - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) rune2Class(rune(l.TokenBytes(nil)[0])) goto yystate0 } yyrule141: // ` { l.begin(PHP) - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) rune2Class(rune(l.TokenBytes(nil)[0])) goto yystate0 } @@ -8619,7 +8620,7 @@ yyrule142: // [b]?\<\<\<[ \t]*({VAR_NAME}|([']{VAR_NAME}['])|(["]{VAR_NAME}["])) } } l.ungetN(ungetCnt) - lval.token = newToken(l.handleNewLine(tb)) + lval.token = token.NewToken(l.handleNewLine(tb)) return T_START_HEREDOC } yyrule143: // . @@ -8645,13 +8646,13 @@ yyrule143: // . } c = l.Next() } - lval.token = newToken(l.handleNewLine(tb)) + lval.token = token.NewToken(l.handleNewLine(tb)) return T_ENCAPSED_AND_WHITESPACE } yyrule144: // {VAR_NAME}\; { l.begin(PHP) - lval.token = newToken(l.handleNewLine(l.ungetN(1))) + lval.token = token.NewToken(l.handleNewLine(l.ungetN(1))) return T_END_HEREDOC goto yystate0 } @@ -8668,7 +8669,7 @@ yyrule145: // [b]?[\"] l.ungetN(len(l.TokenBytes(nil)) - cnt) tokenBytes := l.TokenBytes(nil)[:cnt] l.pushState(STRING) - lval.token = newToken(l.handleNewLine(tokenBytes)) + lval.token = token.NewToken(l.handleNewLine(tokenBytes)) return rune2Class('"') } F: @@ -8679,7 +8680,7 @@ yyrule145: // [b]?[\"] switch c { case '"': c = l.Next() - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_CONSTANT_ENCAPSED_STRING break F @@ -8708,13 +8709,13 @@ yyrule145: // [b]?[\"] yyrule146: // \" { l.popState() - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return rune2Class(rune(l.TokenBytes(nil)[0])) goto yystate0 } yyrule147: // \{\$ { - lval.token = newToken(l.handleNewLine(l.ungetN(1))) + lval.token = token.NewToken(l.handleNewLine(l.ungetN(1))) l.pushState(PHP) return T_CURLY_OPEN goto yystate0 @@ -8722,7 +8723,7 @@ yyrule147: // \{\$ yyrule148: // \$\{ { l.pushState(STRING_VAR_NAME) - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_DOLLAR_OPEN_CURLY_BRACES goto yystate0 } @@ -8742,7 +8743,7 @@ yyrule150: // .|[ \t\n\r] } switch c { case '"': - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_ENCAPSED_AND_WHITESPACE break F1 @@ -8751,7 +8752,7 @@ yyrule150: // .|[ \t\n\r] if rune(c) == '{' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ' { l.ungetN(1) tb := l.TokenBytes(nil) - lval.token = newToken(l.handleNewLine(tb[:len(tb)-1])) + lval.token = token.NewToken(l.handleNewLine(tb[:len(tb)-1])) return T_ENCAPSED_AND_WHITESPACE break F1 } @@ -8762,7 +8763,7 @@ yyrule150: // .|[ \t\n\r] if rune(c) == '$' { l.ungetN(1) tb := l.TokenBytes(nil) - lval.token = newToken(l.handleNewLine(tb[:len(tb)-1])) + lval.token = token.NewToken(l.handleNewLine(tb[:len(tb)-1])) return T_ENCAPSED_AND_WHITESPACE break F1 } @@ -8784,7 +8785,7 @@ yyrule151: // . } switch c { case '`': - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_ENCAPSED_AND_WHITESPACE break F2 @@ -8793,7 +8794,7 @@ yyrule151: // . if rune(c) == '{' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ' { l.ungetN(1) tb := l.TokenBytes(nil) - lval.token = newToken(l.handleNewLine(tb[:len(tb)-1])) + lval.token = token.NewToken(l.handleNewLine(tb[:len(tb)-1])) return T_ENCAPSED_AND_WHITESPACE break F2 } @@ -8804,7 +8805,7 @@ yyrule151: // . if rune(c) == '$' { l.ungetN(1) tb := l.TokenBytes(nil) - lval.token = newToken(l.handleNewLine(tb[:len(tb)-1])) + lval.token = token.NewToken(l.handleNewLine(tb[:len(tb)-1])) return T_ENCAPSED_AND_WHITESPACE break F2 } @@ -8866,32 +8867,32 @@ yyrule152: // .|[ \t\n\r] c = l.Next() } - lval.token = newToken(l.handleNewLine(tb)) + lval.token = token.NewToken(l.handleNewLine(tb)) return T_ENCAPSED_AND_WHITESPACE } yyrule153: // \${VAR_NAME} { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_VARIABLE goto yystate0 } yyrule154: // ->{VAR_NAME} { - lval.token = newToken(l.handleNewLine(l.ungetN(len(l.TokenBytes(nil)) - 2))) + lval.token = token.NewToken(l.handleNewLine(l.ungetN(len(l.TokenBytes(nil)) - 2))) return T_OBJECT_OPERATOR goto yystate0 } yyrule155: // {VAR_NAME} { l.popState() - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_STRING goto yystate0 } yyrule156: // \[ { l.pushState(STRING_VAR_INDEX) - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return rune2Class(rune(l.TokenBytes(nil)[0])) goto yystate0 } @@ -8903,19 +8904,19 @@ yyrule157: // .|[ \t\n\r] } yyrule158: // {LNUM}|{HNUM}|{BNUM} { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_NUM_STRING goto yystate0 } yyrule159: // \${VAR_NAME} { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_VARIABLE goto yystate0 } yyrule160: // {VAR_NAME} { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_STRING goto yystate0 } @@ -8923,7 +8924,7 @@ yyrule161: // \] { l.popState() l.popState() - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return rune2Class(rune(l.TokenBytes(nil)[0])) goto yystate0 } @@ -8931,19 +8932,19 @@ yyrule162: // [ \n\r\t\\'#] { l.popState() l.popState() - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return T_ENCAPSED_AND_WHITESPACE goto yystate0 } yyrule163: // {OPERATORS} { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return rune2Class(rune(l.TokenBytes(nil)[0])) goto yystate0 } yyrule164: // . { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) return rune2Class(rune(l.TokenBytes(nil)[0])) goto yystate0 } @@ -8951,7 +8952,7 @@ yyrule165: // {VAR_NAME}[\[\}] { l.popState() l.pushState(PHP) - lval.token = newToken(l.handleNewLine(l.ungetN(1))) + lval.token = token.NewToken(l.handleNewLine(l.ungetN(1))) return T_STRING_VARNAME goto yystate0 } diff --git a/scanner.l b/scanner.l index d2b01c1..9016014 100644 --- a/scanner.l +++ b/scanner.l @@ -10,6 +10,7 @@ package main import ( "fmt" "bytes" + "github.com/z7zmey/php-parser/token" ) const ( @@ -53,7 +54,7 @@ NEW_LINE (\r|\n|\r\n) %% c = l.Rule0() -[ \t\n\r]+ lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); +[ \t\n\r]+ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); . tb := []byte{} @@ -77,17 +78,17 @@ NEW_LINE (\r|\n|\r\n) c = l.Next() } - lval.token = newToken(l.handleNewLine(tb)); + lval.token = token.NewToken(l.handleNewLine(tb)); return T_INLINE_HTML -\<\?php([ \t]|{NEW_LINE}) l.begin(PHP);lval.token = newToken(l.handleNewLine(l.TokenBytes(nil)));// return T_OPEN_TAG; -\<\? l.begin(PHP);lval.token = newToken(l.handleNewLine(l.TokenBytes(nil)));// return T_OPEN_TAG; -\<\?= l.begin(PHP);lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_ECHO; +\<\?php([ \t]|{NEW_LINE}) l.begin(PHP);lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil)));// return T_OPEN_TAG; +\<\? l.begin(PHP);lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil)));// return T_OPEN_TAG; +\<\?= l.begin(PHP);lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ECHO; -[ \t\n\r]+ lval.token = newToken(l.handleNewLine(l.TokenBytes(nil)));// return T_WHITESPACE -\?\>{NEW_LINE}? l.begin(INITIAL);lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(';'); +[ \t\n\r]+ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil)));// return T_WHITESPACE +\?\>{NEW_LINE}? l.begin(INITIAL);lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(';'); -{DNUM}|{EXPONENT_DNUM} lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_DNUMBER +{DNUM}|{EXPONENT_DNUM} lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DNUMBER {BNUM} tb := l.TokenBytes(nil) i:=2 @@ -98,15 +99,15 @@ NEW_LINE (\r|\n|\r\n) } } if len(tb) - i < 64 { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_LNUMBER + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_LNUMBER } else { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_DNUMBER + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DNUMBER } {LNUM} if len(l.TokenBytes(nil)) < 20 { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_LNUMBER + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_LNUMBER } else { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_DNUMBER + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DNUMBER } {HNUM} tb := l.TokenBytes(nil) @@ -119,145 +120,145 @@ NEW_LINE (\r|\n|\r\n) } length := len(tb) - i if length < 16 || (length == 16 && tb[i] <= '7') { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_LNUMBER + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_LNUMBER } else { - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_DNUMBER + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DNUMBER } -abstract lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_ABSTRACT -array lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_ARRAY -as lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_AS -break lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_BREAK -callable lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_CALLABLE -case lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_CASE -catch lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_CATCH -class lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_CLASS -clone lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_CLONE -const lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_CONST; -continue lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_CONTINUE; -declare lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_DECLARE; -default lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_DEFAULT; -do lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_DO; -echo lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_ECHO; -else lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_ELSE; -elseif lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_ELSEIF; -empty lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_EMPTY; -enddeclare lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_ENDDECLARE -endfor lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_ENDFOR -endforeach lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_ENDFOREACH -endif lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_ENDIF -endswitch lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_ENDSWITCH -endwhile lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_ENDWHILE -eval lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_EVAL -exit|die lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_EXIT -extends lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_EXTENDS -final lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_FINAL -finally lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_FINALLY -for lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_FOR -foreach lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_FOREACH -function|cfunction lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_FUNCTION -global lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_GLOBAL -goto lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_GOTO -if lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_IF -isset lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_ISSET -implements lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_IMPLEMENTS -instanceof lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_INSTANCEOF -insteadof lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_INSTEADOF -interface lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_INTERFACE -list lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_LIST -namespace lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_NAMESPACE -private lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_PRIVATE -public lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_PUBLIC -print lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_PRINT -protected lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_PROTECTED -return lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_RETURN -static lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_STATIC -switch lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_SWITCH -throw lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_THROW -trait lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_TRAIT -try lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_TRY -unset lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_UNSET -use lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_USE -var lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_VAR -while lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_WHILE -yield[ \t\n\r]+from[^a-zA-Z0-9_\x80-\xff] lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_YIELD_FROM -yield lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_YIELD -include lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_INCLUDE -include_once lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_INCLUDE_ONCE -require lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_REQUIRE -require_once lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_REQUIRE_ONCE -__CLASS__ lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_CLASS_C -__DIR__ lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_DIR -__FILE__ lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_FILE -__FUNCTION__ lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_FUNC_C -__LINE__ lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_LINE -__NAMESPACE__ lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_NS_C -__METHOD__ lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_METHOD_C -__TRAIT__ lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_TRAIT_C -__halt_compiler lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_HALT_COMPILER -\([ \t]*array[ \t]*\) lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_ARRAY_CAST -\([ \t]*(bool|boolean)[ \t]*\) lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_BOOL_CAST -\([ \t]*(real|double|float)[ \t]*\) lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_DOUBLE_CAST -\([ \t]*(int|integer)[ \t]*\) lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_INT_CAST -\([ \t]*object[ \t]*\) lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_OBJECT_CAST -\([ \t]*string[ \t]*\) lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_STRING_CAST -\([ \t]*unset[ \t]*\) lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_UNSET_CAST -new lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_NEW -and lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_LOGICAL_AND -or lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_LOGICAL_OR -xor lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_LOGICAL_XOR -\\ lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_NS_SEPARATOR -\.\.\. lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_ELLIPSIS; -:: lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_PAAMAYIM_NEKUDOTAYIM; // T_DOUBLE_COLON -&& lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_BOOLEAN_AND -\|\| lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_BOOLEAN_OR -&= lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_AND_EQUAL -\|= lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_OR_EQUAL -\.= lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_CONCAT_EQUAL; -\*= lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_MUL_EQUAL -\*\*= lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_POW_EQUAL -[/]= lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_DIV_EQUAL; -\+= lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_PLUS_EQUAL --= lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_MINUS_EQUAL -\^= lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_XOR_EQUAL -%= lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_MOD_EQUAL --- lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_DEC; -\+\+ lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_INC -=> lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_DOUBLE_ARROW; -\<=\> lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_SPACESHIP -\!=|\<\> lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_IS_NOT_EQUAL -\!== lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_IS_NOT_IDENTICAL -== lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_IS_EQUAL -=== lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_IS_IDENTICAL -\<\<= lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_SL_EQUAL -\>\>= lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_SR_EQUAL -\>= lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_IS_GREATER_OR_EQUAL -\<= lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_IS_SMALLER_OR_EQUAL -\*\* lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_POW -\<\< lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_SL -\>\> lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_SR -\?\? lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_COALESCE -(#|[/][/]).*{NEW_LINE} lval.token = newToken(l.handleNewLine(l.TokenBytes(nil)));// return T_COMMENT; // TODO: handle ?> -[/][*][^*]*[*]+([^*/][^*]*[*]+)*[/] lval.token = newToken(l.handleNewLine(l.TokenBytes(nil)));// return T_COMMENT; // TODO: handle ?> -[/][*][*][^*]*[*]+([^*/][^*]*[*]+)*[/] lval.token = newToken(l.handleNewLine(l.TokenBytes(nil)));// return T_DOC_COMMENT; // TODO: handle ?> -'[^']*(\\')*' lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_CONSTANT_ENCAPSED_STRING -{OPERATORS} lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) +abstract lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ABSTRACT +array lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ARRAY +as lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_AS +break lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_BREAK +callable lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_CALLABLE +case lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_CASE +catch lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_CATCH +class lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_CLASS +clone lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_CLONE +const lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_CONST; +continue lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_CONTINUE; +declare lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DECLARE; +default lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DEFAULT; +do lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DO; +echo lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ECHO; +else lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ELSE; +elseif lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ELSEIF; +empty lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_EMPTY; +enddeclare lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ENDDECLARE +endfor lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ENDFOR +endforeach lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ENDFOREACH +endif lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ENDIF +endswitch lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ENDSWITCH +endwhile lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ENDWHILE +eval lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_EVAL +exit|die lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_EXIT +extends lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_EXTENDS +final lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_FINAL +finally lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_FINALLY +for lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_FOR +foreach lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_FOREACH +function|cfunction lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_FUNCTION +global lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_GLOBAL +goto lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_GOTO +if lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_IF +isset lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ISSET +implements lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_IMPLEMENTS +instanceof lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_INSTANCEOF +insteadof lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_INSTEADOF +interface lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_INTERFACE +list lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_LIST +namespace lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_NAMESPACE +private lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_PRIVATE +public lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_PUBLIC +print lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_PRINT +protected lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_PROTECTED +return lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_RETURN +static lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_STATIC +switch lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_SWITCH +throw lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_THROW +trait lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_TRAIT +try lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_TRY +unset lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_UNSET +use lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_USE +var lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_VAR +while lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_WHILE +yield[ \t\n\r]+from[^a-zA-Z0-9_\x80-\xff] lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_YIELD_FROM +yield lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_YIELD +include lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_INCLUDE +include_once lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_INCLUDE_ONCE +require lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_REQUIRE +require_once lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_REQUIRE_ONCE +__CLASS__ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_CLASS_C +__DIR__ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DIR +__FILE__ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_FILE +__FUNCTION__ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_FUNC_C +__LINE__ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_LINE +__NAMESPACE__ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_NS_C +__METHOD__ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_METHOD_C +__TRAIT__ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_TRAIT_C +__halt_compiler lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_HALT_COMPILER +\([ \t]*array[ \t]*\) lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ARRAY_CAST +\([ \t]*(bool|boolean)[ \t]*\) lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_BOOL_CAST +\([ \t]*(real|double|float)[ \t]*\) lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DOUBLE_CAST +\([ \t]*(int|integer)[ \t]*\) lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_INT_CAST +\([ \t]*object[ \t]*\) lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_OBJECT_CAST +\([ \t]*string[ \t]*\) lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_STRING_CAST +\([ \t]*unset[ \t]*\) lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_UNSET_CAST +new lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_NEW +and lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_LOGICAL_AND +or lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_LOGICAL_OR +xor lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_LOGICAL_XOR +\\ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_NS_SEPARATOR +\.\.\. lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ELLIPSIS; +:: lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_PAAMAYIM_NEKUDOTAYIM; // T_DOUBLE_COLON +&& lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_BOOLEAN_AND +\|\| lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_BOOLEAN_OR +&= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_AND_EQUAL +\|= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_OR_EQUAL +\.= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_CONCAT_EQUAL; +\*= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_MUL_EQUAL +\*\*= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_POW_EQUAL +[/]= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DIV_EQUAL; +\+= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_PLUS_EQUAL +-= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_MINUS_EQUAL +\^= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_XOR_EQUAL +%= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_MOD_EQUAL +-- lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DEC; +\+\+ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_INC +=> lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DOUBLE_ARROW; +\<=\> lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_SPACESHIP +\!=|\<\> lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_IS_NOT_EQUAL +\!== lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_IS_NOT_IDENTICAL +== lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_IS_EQUAL +=== lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_IS_IDENTICAL +\<\<= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_SL_EQUAL +\>\>= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_SR_EQUAL +\>= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_IS_GREATER_OR_EQUAL +\<= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_IS_SMALLER_OR_EQUAL +\*\* lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_POW +\<\< lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_SL +\>\> lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_SR +\?\? lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_COALESCE +(#|[/][/]).*{NEW_LINE} lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil)));// return T_COMMENT; // TODO: handle ?> +[/][*][^*]*[*]+([^*/][^*]*[*]+)*[/] lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil)));// return T_COMMENT; // TODO: handle ?> +[/][*][*][^*]*[*]+([^*/][^*]*[*]+)*[/] lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil)));// return T_DOC_COMMENT; // TODO: handle ?> +'[^']*(\\')*' lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_CONSTANT_ENCAPSED_STRING +{OPERATORS} lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) -\{ l.pushState(PHP); lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) -\} l.popState(); lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) -\${VAR_NAME} lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_VARIABLE -{VAR_NAME} lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_STRING +\{ l.pushState(PHP); lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) +\} l.popState(); lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) +\${VAR_NAME} lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_VARIABLE +{VAR_NAME} lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_STRING --> l.begin(PROPERTY);lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_OBJECT_OPERATOR; -[ \t\n\r]+ lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_WHITESPACE; --> lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_OBJECT_OPERATOR; -{VAR_NAME} l.begin(PHP);lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_STRING; +-> l.begin(PROPERTY);lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_OBJECT_OPERATOR; +[ \t\n\r]+ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_WHITESPACE; +-> lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_OBJECT_OPERATOR; +{VAR_NAME} l.begin(PHP);lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_STRING; . l.ungetN(1);l.begin(PHP) -[\']([^\\\']*([\\][\'])*)*[\'] lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_CONSTANT_ENCAPSED_STRING; +[\']([^\\\']*([\\][\'])*)*[\'] lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_CONSTANT_ENCAPSED_STRING; -` l.begin(BACKQUOTE); lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); rune2Class(rune(l.TokenBytes(nil)[0])) -` l.begin(PHP); lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); rune2Class(rune(l.TokenBytes(nil)[0])) +` l.begin(BACKQUOTE); lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); rune2Class(rune(l.TokenBytes(nil)[0])) +` l.begin(PHP); lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); rune2Class(rune(l.TokenBytes(nil)[0])) [b]?\<\<\<[ \t]*({VAR_NAME}|([']{VAR_NAME}['])|(["]{VAR_NAME}["])){NEW_LINE} tb := l.TokenBytes(nil) @@ -317,7 +318,7 @@ NEW_LINE (\r|\n|\r\n) l.ungetN(ungetCnt) - lval.token = newToken(l.handleNewLine(tb)); + lval.token = token.NewToken(l.handleNewLine(tb)); return T_START_HEREDOC . @@ -344,10 +345,10 @@ NEW_LINE (\r|\n|\r\n) c = l.Next() } - lval.token = newToken(l.handleNewLine(tb)); + lval.token = token.NewToken(l.handleNewLine(tb)); return T_ENCAPSED_AND_WHITESPACE -{VAR_NAME}\; l.begin(PHP);lval.token = newToken(l.handleNewLine(l.ungetN(1))); return T_END_HEREDOC +{VAR_NAME}\; l.begin(PHP);lval.token = token.NewToken(l.handleNewLine(l.ungetN(1))); return T_END_HEREDOC [b]?[\"] binPrefix := l.TokenBytes(nil)[0] == 'b' @@ -359,7 +360,7 @@ NEW_LINE (\r|\n|\r\n) tokenBytes := l.TokenBytes(nil)[:cnt] l.pushState(STRING) - lval.token = newToken(l.handleNewLine(tokenBytes)); return rune2Class('"') + lval.token = token.NewToken(l.handleNewLine(tokenBytes)); return rune2Class('"') } F:for { @@ -370,7 +371,7 @@ NEW_LINE (\r|\n|\r\n) switch c { case '"' : c = l.Next(); - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_CONSTANT_ENCAPSED_STRING + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_CONSTANT_ENCAPSED_STRING break F; case '$': @@ -396,9 +397,9 @@ NEW_LINE (\r|\n|\r\n) c = l.Next() } -\" l.popState(); lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) -\{\$ lval.token = newToken(l.handleNewLine(l.ungetN(1))); l.pushState(PHP); return T_CURLY_OPEN -\$\{ l.pushState(STRING_VAR_NAME);lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_DOLLAR_OPEN_CURLY_BRACES +\" l.popState(); lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) +\{\$ lval.token = token.NewToken(l.handleNewLine(l.ungetN(1))); l.pushState(PHP); return T_CURLY_OPEN +\$\{ l.pushState(STRING_VAR_NAME);lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DOLLAR_OPEN_CURLY_BRACES \$ l.ungetN(1);l.pushState(STRING_VAR) .|[ \t\n\r] F1:for { @@ -408,7 +409,7 @@ NEW_LINE (\r|\n|\r\n) switch c { case '"' : - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ENCAPSED_AND_WHITESPACE break F1; @@ -417,7 +418,7 @@ NEW_LINE (\r|\n|\r\n) if rune(c) == '{' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ' { l.ungetN(1) tb := l.TokenBytes(nil) - lval.token = newToken(l.handleNewLine(tb[:len(tb)-1])); + lval.token = token.NewToken(l.handleNewLine(tb[:len(tb)-1])); return T_ENCAPSED_AND_WHITESPACE break F1; } @@ -428,7 +429,7 @@ NEW_LINE (\r|\n|\r\n) if rune(c) == '$' { l.ungetN(1) tb := l.TokenBytes(nil) - lval.token = newToken(l.handleNewLine(tb[:len(tb)-1])); + lval.token = token.NewToken(l.handleNewLine(tb[:len(tb)-1])); return T_ENCAPSED_AND_WHITESPACE break F1; } @@ -449,7 +450,7 @@ NEW_LINE (\r|\n|\r\n) switch c { case '`' : - lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); + lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ENCAPSED_AND_WHITESPACE break F2; @@ -458,7 +459,7 @@ NEW_LINE (\r|\n|\r\n) if rune(c) == '{' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z' || c >= '\u007f' && c <= 'ÿ' { l.ungetN(1) tb := l.TokenBytes(nil) - lval.token = newToken(l.handleNewLine(tb[:len(tb)-1])); + lval.token = token.NewToken(l.handleNewLine(tb[:len(tb)-1])); return T_ENCAPSED_AND_WHITESPACE break F2; } @@ -469,7 +470,7 @@ NEW_LINE (\r|\n|\r\n) if rune(c) == '$' { l.ungetN(1) tb := l.TokenBytes(nil) - lval.token = newToken(l.handleNewLine(tb[:len(tb)-1])); + lval.token = token.NewToken(l.handleNewLine(tb[:len(tb)-1])); return T_ENCAPSED_AND_WHITESPACE break F2; } @@ -531,24 +532,24 @@ NEW_LINE (\r|\n|\r\n) c = l.Next() } - lval.token = newToken(l.handleNewLine(tb)); + lval.token = token.NewToken(l.handleNewLine(tb)); return T_ENCAPSED_AND_WHITESPACE -\${VAR_NAME} lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_VARIABLE -->{VAR_NAME} lval.token = newToken(l.handleNewLine(l.ungetN(len(l.TokenBytes(nil))-2))); return T_OBJECT_OPERATOR -{VAR_NAME} l.popState();lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_STRING -\[ l.pushState(STRING_VAR_INDEX);lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) +\${VAR_NAME} lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_VARIABLE +->{VAR_NAME} lval.token = token.NewToken(l.handleNewLine(l.ungetN(len(l.TokenBytes(nil))-2))); return T_OBJECT_OPERATOR +{VAR_NAME} l.popState();lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_STRING +\[ l.pushState(STRING_VAR_INDEX);lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) .|[ \t\n\r] l.ungetN(1);l.popState() -{LNUM}|{HNUM}|{BNUM} lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_NUM_STRING -\${VAR_NAME} lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_VARIABLE -{VAR_NAME} lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_STRING -\] l.popState(); l.popState();lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) -[ \n\r\t\\'#] l.popState(); l.popState();lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return T_ENCAPSED_AND_WHITESPACE -{OPERATORS} lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) -. lval.token = newToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) +{LNUM}|{HNUM}|{BNUM} lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_NUM_STRING +\${VAR_NAME} lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_VARIABLE +{VAR_NAME} lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_STRING +\] l.popState(); l.popState();lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) +[ \n\r\t\\'#] l.popState(); l.popState();lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ENCAPSED_AND_WHITESPACE +{OPERATORS} lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) +. lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) -{VAR_NAME}[\[\}] l.popState();l.pushState(PHP);lval.token = newToken(l.handleNewLine(l.ungetN(1))); return T_STRING_VARNAME +{VAR_NAME}[\[\}] l.popState();l.pushState(PHP);lval.token = token.NewToken(l.handleNewLine(l.ungetN(1))); return T_STRING_VARNAME . l.ungetN(1);l.popState();l.pushState(PHP) %% diff --git a/token.go b/token.go deleted file mode 100644 index 73b46e9..0000000 --- a/token.go +++ /dev/null @@ -1,15 +0,0 @@ -package main - -type token struct { - value []byte - startLine int - endLine int -} - -func newToken(value []byte, startLine int, endLine int) token { - return token{value, startLine, endLine} -} - -func (t token) String() string { - return string(t.value) -} diff --git a/token/token.go b/token/token.go new file mode 100644 index 0000000..c197e52 --- /dev/null +++ b/token/token.go @@ -0,0 +1,15 @@ +package token + +type Token struct { + Value string + StartLine int + EndLine int +} + +func NewToken(value []byte, startLine int, endLine int) Token { + return Token{string(value), startLine, endLine} +} + +func (t Token) String() string { + return string(t.Value) +}