From 880749fbda0d5046c7cddd6b6d8d77433e82c91c Mon Sep 17 00:00:00 2001 From: z7zmey Date: Fri, 1 Dec 2017 18:04:31 +0200 Subject: [PATCH] parse files --- Makefile | 2 +- example.php | 16 + lexer.go | 2 +- main.go | 48 ++- parser.go | 980 ++++++++++++++++++++++++++-------------------------- parser.y | 12 +- scanner.go | 15 + scanner.l | 15 + 8 files changed, 572 insertions(+), 518 deletions(-) create mode 100644 example.php diff --git a/Makefile b/Makefile index 29ffc1d..f1a6e8c 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ all: parser.go scanner.go go build run: all - ./php-parser + ./php-parser example.php scanner.go: scanner.l golex -o $@ $< diff --git a/example.php b/example.php new file mode 100644 index 0000000..50e3491 --- /dev/null +++ b/example.php @@ -0,0 +1,16 @@ + %s", real) + + src, _ := os.Open(string(real)) + rn := parse(src, real) + fmt.Println(rn) + } } -func rune2Class(r rune) int { - if r >= 0 && r < 0x80 { // Keep ASCII as it is. - return int(r) +func checkErr(err error) { + if err != nil { + log.Fatal(err) } - if unicode.IsLetter(r) { - return classUnicodeLeter - } - if unicode.IsDigit(r) { - return classUnicodeDigit - } - // return classOther - return -1 } diff --git a/parser.go b/parser.go index 9880e52..636ec98 100644 --- a/parser.go +++ b/parser.go @@ -5,10 +5,18 @@ import __yyfmt__ "fmt" //line parser.y:2 import ( - "fmt" + "io" ) -//line parser.y:10 +var rootNode = Node("Root") + +func parse(src io.Reader, fName string) node { + rootNode = Node("Root") //reset + yyParse(newLexer(src, fName)) + return rootNode +} + +//line parser.y:18 type yySymType struct { yys int node node @@ -328,7 +336,7 @@ const yyEofCode = 1 const yyErrCode = 2 const yyInitialStackSize = 16 -//line parser.y:1163 +//line parser.y:1171 //line yacctab:1 var yyExca = [...]int{ @@ -2024,781 +2032,781 @@ yydefault: case 1: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:197 + //line parser.y:205 { - fmt.Println(yyDollar[1].node) + rootNode = yyDollar[1].node } case 2: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:201 + //line parser.y:209 { yyVAL.value = yyDollar[1].token } case 3: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:201 + //line parser.y:209 { yyVAL.value = yyDollar[1].token } case 4: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:201 + //line parser.y:209 { yyVAL.value = yyDollar[1].token } case 5: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:201 + //line parser.y:209 { yyVAL.value = yyDollar[1].token } case 6: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:201 + //line parser.y:209 { yyVAL.value = yyDollar[1].token } case 7: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:201 + //line parser.y:209 { yyVAL.value = yyDollar[1].token } case 8: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:201 + //line parser.y:209 { yyVAL.value = yyDollar[1].token } case 9: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:201 + //line parser.y:209 { yyVAL.value = yyDollar[1].token } case 10: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:202 + //line parser.y:210 { yyVAL.value = yyDollar[1].token } case 11: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:202 + //line parser.y:210 { yyVAL.value = yyDollar[1].token } case 12: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:202 + //line parser.y:210 { yyVAL.value = yyDollar[1].token } case 13: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:202 + //line parser.y:210 { yyVAL.value = yyDollar[1].token } case 14: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:202 + //line parser.y:210 { yyVAL.value = yyDollar[1].token } case 15: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:202 + //line parser.y:210 { yyVAL.value = yyDollar[1].token } case 16: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:202 + //line parser.y:210 { yyVAL.value = yyDollar[1].token } case 17: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:202 + //line parser.y:210 { yyVAL.value = yyDollar[1].token } case 18: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:202 + //line parser.y:210 { yyVAL.value = yyDollar[1].token } case 19: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:202 + //line parser.y:210 { yyVAL.value = yyDollar[1].token } case 20: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:202 + //line parser.y:210 { yyVAL.value = yyDollar[1].token } case 21: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:202 + //line parser.y:210 { yyVAL.value = yyDollar[1].token } case 22: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:203 + //line parser.y:211 { yyVAL.value = yyDollar[1].token } case 23: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:203 + //line parser.y:211 { yyVAL.value = yyDollar[1].token } case 24: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:203 + //line parser.y:211 { yyVAL.value = yyDollar[1].token } case 25: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:203 + //line parser.y:211 { yyVAL.value = yyDollar[1].token } case 26: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:203 + //line parser.y:211 { yyVAL.value = yyDollar[1].token } case 27: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:203 + //line parser.y:211 { yyVAL.value = yyDollar[1].token } case 28: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:203 + //line parser.y:211 { yyVAL.value = yyDollar[1].token } case 29: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:203 + //line parser.y:211 { yyVAL.value = yyDollar[1].token } case 30: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:203 + //line parser.y:211 { yyVAL.value = yyDollar[1].token } case 31: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:203 + //line parser.y:211 { yyVAL.value = yyDollar[1].token } case 32: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:204 + //line parser.y:212 { yyVAL.value = yyDollar[1].token } case 33: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:204 + //line parser.y:212 { yyVAL.value = yyDollar[1].token } case 34: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:204 + //line parser.y:212 { yyVAL.value = yyDollar[1].token } case 35: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:204 + //line parser.y:212 { yyVAL.value = yyDollar[1].token } case 36: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:204 + //line parser.y:212 { yyVAL.value = yyDollar[1].token } case 37: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:204 + //line parser.y:212 { yyVAL.value = yyDollar[1].token } case 38: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:204 + //line parser.y:212 { yyVAL.value = yyDollar[1].token } case 39: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:204 + //line parser.y:212 { yyVAL.value = yyDollar[1].token } case 40: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:204 + //line parser.y:212 { yyVAL.value = yyDollar[1].token } case 41: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:204 + //line parser.y:212 { yyVAL.value = yyDollar[1].token } case 42: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:205 + //line parser.y:213 { yyVAL.value = yyDollar[1].token } case 43: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:205 + //line parser.y:213 { yyVAL.value = yyDollar[1].token } case 44: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:205 + //line parser.y:213 { yyVAL.value = yyDollar[1].token } case 45: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:205 + //line parser.y:213 { yyVAL.value = yyDollar[1].token } case 46: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:205 + //line parser.y:213 { yyVAL.value = yyDollar[1].token } case 47: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:205 + //line parser.y:213 { yyVAL.value = yyDollar[1].token } case 48: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:205 + //line parser.y:213 { yyVAL.value = yyDollar[1].token } case 49: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:205 + //line parser.y:213 { yyVAL.value = yyDollar[1].token } case 50: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:205 + //line parser.y:213 { yyVAL.value = yyDollar[1].token } case 51: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:205 + //line parser.y:213 { yyVAL.value = yyDollar[1].token } case 52: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:205 + //line parser.y:213 { yyVAL.value = yyDollar[1].token } case 53: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:206 + //line parser.y:214 { yyVAL.value = yyDollar[1].token } case 54: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:206 + //line parser.y:214 { yyVAL.value = yyDollar[1].token } case 55: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:206 + //line parser.y:214 { yyVAL.value = yyDollar[1].token } case 56: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:206 + //line parser.y:214 { yyVAL.value = yyDollar[1].token } case 57: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:206 + //line parser.y:214 { yyVAL.value = yyDollar[1].token } case 58: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:206 + //line parser.y:214 { yyVAL.value = yyDollar[1].token } case 59: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:206 + //line parser.y:214 { yyVAL.value = yyDollar[1].token } case 60: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:206 + //line parser.y:214 { yyVAL.value = yyDollar[1].token } case 61: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:207 + //line parser.y:215 { yyVAL.value = yyDollar[1].token } case 62: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:207 + //line parser.y:215 { yyVAL.value = yyDollar[1].token } case 63: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:207 + //line parser.y:215 { yyVAL.value = yyDollar[1].token } case 64: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:207 + //line parser.y:215 { yyVAL.value = yyDollar[1].token } case 65: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:207 + //line parser.y:215 { yyVAL.value = yyDollar[1].token } case 66: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:207 + //line parser.y:215 { yyVAL.value = yyDollar[1].token } case 67: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:207 + //line parser.y:215 { yyVAL.value = yyDollar[1].token } case 68: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:207 + //line parser.y:215 { yyVAL.value = yyDollar[1].token } case 69: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:211 + //line parser.y:219 { yyVAL.value = yyDollar[1].value } case 70: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:212 + //line parser.y:220 { yyVAL.value = yyDollar[1].token } case 71: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:212 + //line parser.y:220 { yyVAL.value = yyDollar[1].token } case 72: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:212 + //line parser.y:220 { yyVAL.value = yyDollar[1].token } case 73: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:212 + //line parser.y:220 { yyVAL.value = yyDollar[1].token } case 74: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:212 + //line parser.y:220 { yyVAL.value = yyDollar[1].token } case 75: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:212 + //line parser.y:220 { yyVAL.value = yyDollar[1].token } case 76: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:216 + //line parser.y:224 { yyVAL.node = Node("identifier").attribute("value", yyDollar[1].token) } case 77: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:217 + //line parser.y:225 { yyVAL.node = Node("identifier").attribute("value", yyDollar[1].value) } case 78: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:221 + //line parser.y:229 { yyVAL.node = yyDollar[1].node.append(yyDollar[2].node) } case 79: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:222 + //line parser.y:230 { yyVAL.node = Node("Statements") } case 80: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:226 + //line parser.y:234 { yyVAL.node = Node("NamespaceParts").append(Node(yyDollar[1].token)) } case 81: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:227 + //line parser.y:235 { yyVAL.node = yyDollar[1].node.append(Node(yyDollar[3].token)) } case 82: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:231 + //line parser.y:239 { yyVAL.node = Node("Name").append(yyDollar[1].node) } case 83: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:232 + //line parser.y:240 { yyVAL.node = Node("Name").append(yyDollar[3].node).attribute("Relative", "true") } case 84: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:233 + //line parser.y:241 { yyVAL.node = Node("Name").append(yyDollar[2].node).attribute("FullyQualified", "true") } case 85: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:237 + //line parser.y:245 { yyVAL.node = yyDollar[1].node } case 86: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:238 + //line parser.y:246 { yyVAL.node = yyDollar[1].node } case 87: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:239 + //line parser.y:247 { yyVAL.node = yyDollar[1].node } case 88: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:240 + //line parser.y:248 { yyVAL.node = yyDollar[1].node } case 89: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:241 + //line parser.y:249 { yyVAL.node = yyDollar[1].node } case 90: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:242 + //line parser.y:250 { yyVAL.node = Node("THaltCompiler") } case 91: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:243 + //line parser.y:251 { yyVAL.node = Node("Namespace").append(yyDollar[2].node) } case 92: yyDollar = yyS[yypt-5 : yypt+1] - //line parser.y:245 + //line parser.y:253 { yyVAL.node = Node("Namespace").append(yyDollar[2].node).append(yyDollar[4].node) } case 93: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:246 + //line parser.y:254 { yyVAL.node = Node("Namespace").append(yyDollar[3].node) } case 94: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:247 + //line parser.y:255 { yyVAL.node = yyDollar[2].node } case 95: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:248 + //line parser.y:256 { yyVAL.node = yyDollar[3].node.append(yyDollar[2].node) } case 96: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:249 + //line parser.y:257 { yyVAL.node = yyDollar[2].node } case 97: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:250 + //line parser.y:258 { yyVAL.node = yyDollar[3].node.append(yyDollar[2].node) } case 98: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:251 + //line parser.y:259 { yyVAL.node = yyDollar[2].node } case 99: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:255 + //line parser.y:263 { yyVAL.node = Node("FuncUseType") } case 100: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:256 + //line parser.y:264 { yyVAL.node = Node("ConstUseType") } case 101: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:261 + //line parser.y:269 { yyVAL.node = Node("GroupUse").append(yyDollar[1].node).append(yyDollar[4].node) } case 102: yyDollar = yyS[yypt-7 : yypt+1] - //line parser.y:263 + //line parser.y:271 { yyVAL.node = Node("GroupUse").append(yyDollar[2].node).append(yyDollar[5].node) } case 103: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:268 + //line parser.y:276 { yyVAL.node = Node("MixedGroupUse").append(yyDollar[1].node).append(yyDollar[4].node) } case 104: yyDollar = yyS[yypt-7 : yypt+1] - //line parser.y:270 + //line parser.y:278 { yyVAL.node = Node("MixedGroupUse").append(yyDollar[2].node).append(yyDollar[5].node) } case 107: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:280 + //line parser.y:288 { yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) } case 108: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:281 + //line parser.y:289 { yyVAL.node = Node("UseList").append(yyDollar[1].node) } case 109: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:286 + //line parser.y:294 { yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) } case 110: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:287 + //line parser.y:295 { yyVAL.node = Node("UseList").append(yyDollar[1].node) } case 111: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:291 + //line parser.y:299 { yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) } case 112: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:292 + //line parser.y:300 { yyVAL.node = Node("UseList").append(yyDollar[1].node) } case 113: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:296 + //line parser.y:304 { yyVAL.node = yyDollar[1].node } case 114: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:297 + //line parser.y:305 { yyVAL.node = yyDollar[2].node.append(yyDollar[1].node) } case 115: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:301 + //line parser.y:309 { yyVAL.node = Node("UseElem").append(yyDollar[1].node) } case 116: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:302 + //line parser.y:310 { yyVAL.node = Node("UseElem").append(yyDollar[1].node).append(Node("as").attribute("value", yyDollar[3].token)) } case 117: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:306 + //line parser.y:314 { yyVAL.node = yyDollar[1].node } case 118: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:307 + //line parser.y:315 { yyVAL.node = yyDollar[2].node } case 119: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:311 + //line parser.y:319 { yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) } case 120: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:312 + //line parser.y:320 { yyVAL.node = Node("ConstList").append(yyDollar[1].node) } case 121: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:316 + //line parser.y:324 { yyVAL.node = yyDollar[1].node.append(yyDollar[2].node) } case 122: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:317 + //line parser.y:325 { yyVAL.node = Node("stmt") } case 123: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:321 + //line parser.y:329 { yyVAL.node = yyDollar[1].node } case 124: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:322 + //line parser.y:330 { yyVAL.node = yyDollar[1].node } case 125: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:323 + //line parser.y:331 { yyVAL.node = yyDollar[1].node } case 126: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:324 + //line parser.y:332 { yyVAL.node = yyDollar[1].node } case 127: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:325 + //line parser.y:333 { yyVAL.node = yyDollar[1].node } case 128: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:326 + //line parser.y:334 { yyVAL.node = Node("THaltCompiler") } case 129: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:329 + //line parser.y:337 { yyVAL.node = yyDollar[2].node } case 130: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:330 + //line parser.y:338 { yyVAL.node = yyDollar[1].node } case 131: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:331 + //line parser.y:339 { yyVAL.node = yyDollar[1].node } case 132: yyDollar = yyS[yypt-5 : yypt+1] - //line parser.y:333 + //line parser.y:341 { yyVAL.node = Node("While"). append(Node("expr").append(yyDollar[3].node)). @@ -2806,7 +2814,7 @@ yydefault: } case 133: yyDollar = yyS[yypt-7 : yypt+1] - //line parser.y:339 + //line parser.y:347 { yyVAL.node = Node("DoWhile"). append(Node("expr").append(yyDollar[5].node)). @@ -2814,7 +2822,7 @@ yydefault: } case 134: yyDollar = yyS[yypt-9 : yypt+1] - //line parser.y:345 + //line parser.y:353 { yyVAL.node = Node("For"). append(Node("expr1").append(yyDollar[3].node)). @@ -2824,67 +2832,67 @@ yydefault: } case 135: yyDollar = yyS[yypt-5 : yypt+1] - //line parser.y:352 + //line parser.y:360 { yyVAL.node = Node("Switch").append(Node("expr").append(yyDollar[3].node)).append(yyDollar[5].node) } case 136: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:353 + //line parser.y:361 { yyVAL.node = Node("Break").append(yyDollar[2].node) } case 137: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:354 + //line parser.y:362 { yyVAL.node = Node("Continue").append(yyDollar[2].node) } case 138: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:355 + //line parser.y:363 { yyVAL.node = Node("Return").append(yyDollar[2].node) } case 139: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:356 + //line parser.y:364 { yyVAL.node = yyDollar[2].node } case 140: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:357 + //line parser.y:365 { yyVAL.node = yyDollar[2].node } case 141: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:358 + //line parser.y:366 { yyVAL.node = yyDollar[2].node } case 142: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:359 + //line parser.y:367 { yyVAL.node = Node("Echo").append(Node("InlineHtml").attribute("value", yyDollar[1].token)) } case 143: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:360 + //line parser.y:368 { yyVAL.node = yyDollar[1].node } case 144: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:362 + //line parser.y:370 { yyVAL.node = Node("Unset").append(yyDollar[3].node) } case 145: yyDollar = yyS[yypt-7 : yypt+1] - //line parser.y:364 + //line parser.y:372 { yyVAL.node = Node("Foreach"). append(Node("expr").append(yyDollar[3].node)). @@ -2893,7 +2901,7 @@ yydefault: } case 146: yyDollar = yyS[yypt-9 : yypt+1] - //line parser.y:371 + //line parser.y:379 { yyVAL.node = Node("Foreach"). append(Node("expr").append(yyDollar[3].node)). @@ -2903,19 +2911,19 @@ yydefault: } case 147: yyDollar = yyS[yypt-5 : yypt+1] - //line parser.y:378 + //line parser.y:386 { yyVAL.node = Node("Declare").append(yyDollar[3].node).append(yyDollar[5].node) } case 148: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:379 + //line parser.y:387 { yyVAL.node = Node("") } case 149: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:381 + //line parser.y:389 { yyVAL.node = Node("Try"). append(yyDollar[3].node). @@ -2924,79 +2932,79 @@ yydefault: } case 150: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:387 + //line parser.y:395 { yyVAL.node = Node("Throw").append(yyDollar[2].node) } case 151: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:388 + //line parser.y:396 { yyVAL.node = Node("GoTo").attribute("Label", yyDollar[2].token) } case 152: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:389 + //line parser.y:397 { yyVAL.node = Node("Label").attribute("name", yyDollar[1].token) } case 153: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:392 + //line parser.y:400 { yyVAL.node = Node("CatchList") } case 154: yyDollar = yyS[yypt-9 : yypt+1] - //line parser.y:394 + //line parser.y:402 { yyVAL.node = yyDollar[1].node.append(yyDollar[4].node).append(Node("Variable").attribute("name", yyDollar[5].token)).append(yyDollar[8].node) } case 155: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:397 + //line parser.y:405 { yyVAL.node = Node("CatchNameList").append(yyDollar[1].node) } case 156: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:398 + //line parser.y:406 { yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) } case 157: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:402 + //line parser.y:410 { yyVAL.node = Node("") } case 158: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:403 + //line parser.y:411 { yyVAL.node = Node("Finnaly").append(yyDollar[3].node) } case 159: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:407 + //line parser.y:415 { yyVAL.node = Node("UnsetVariablesList").append(yyDollar[1].node) } case 160: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:408 + //line parser.y:416 { yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) } case 161: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:412 + //line parser.y:420 { yyVAL.node = yyDollar[1].node } case 162: yyDollar = yyS[yypt-10 : yypt+1] - //line parser.y:417 + //line parser.y:425 { yyVAL.node = Node("Function"). attribute("name", yyDollar[3].token). @@ -3007,31 +3015,31 @@ yydefault: } case 163: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:428 + //line parser.y:436 { yyVAL.value = "false" } case 164: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:429 + //line parser.y:437 { yyVAL.value = "true" } case 165: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:433 + //line parser.y:441 { yyVAL.value = "false" } case 166: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:434 + //line parser.y:442 { yyVAL.value = "true" } case 167: yyDollar = yyS[yypt-8 : yypt+1] - //line parser.y:439 + //line parser.y:447 { yyVAL.node = Node("Class"). attribute("name", yyDollar[3].token). @@ -3042,7 +3050,7 @@ yydefault: } case 168: yyDollar = yyS[yypt-7 : yypt+1] - //line parser.y:448 + //line parser.y:456 { yyVAL.node = Node("Class"). attribute("name", yyDollar[2].token). @@ -3052,37 +3060,37 @@ yydefault: } case 169: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:458 + //line parser.y:466 { yyVAL.node = Node("Class").attribute(yyDollar[1].value, "true") } case 170: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:459 + //line parser.y:467 { yyVAL.node = yyDollar[1].node.attribute(yyDollar[2].value, "true") } case 171: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:463 + //line parser.y:471 { yyVAL.value = "abstract" } case 172: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:464 + //line parser.y:472 { yyVAL.value = "final" } case 173: yyDollar = yyS[yypt-5 : yypt+1] - //line parser.y:468 + //line parser.y:476 { yyVAL.node = Node("Trait").attribute("name", yyDollar[2].token).append(yyDollar[4].node) } case 174: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:473 + //line parser.y:481 { yyVAL.node = Node("Interface"). attribute("name", yyDollar[2].token). @@ -3091,229 +3099,229 @@ yydefault: } case 175: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:482 + //line parser.y:490 { yyVAL.node = Node("") } case 176: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:483 + //line parser.y:491 { yyVAL.node = yyDollar[2].node } case 177: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:487 + //line parser.y:495 { yyVAL.node = Node("") } case 178: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:488 + //line parser.y:496 { yyVAL.node = yyDollar[2].node } case 179: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:492 + //line parser.y:500 { yyVAL.node = Node("") } case 180: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:493 + //line parser.y:501 { yyVAL.node = yyDollar[2].node } case 181: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:497 + //line parser.y:505 { yyVAL.node = yyDollar[1].node } case 182: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:498 + //line parser.y:506 { yyVAL.node = Node("Ref").append(yyDollar[2].node) } case 183: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:499 + //line parser.y:507 { yyVAL.node = Node("List").append(yyDollar[3].node) } case 184: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:500 + //line parser.y:508 { yyVAL.node = Node("ShortList").append(yyDollar[2].node) } case 185: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:504 + //line parser.y:512 { yyVAL.node = yyDollar[1].node } case 186: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:505 + //line parser.y:513 { yyVAL.node = yyDollar[2].node } case 187: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:509 + //line parser.y:517 { yyVAL.node = yyDollar[1].node } case 188: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:510 + //line parser.y:518 { yyVAL.node = yyDollar[2].node } case 189: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:514 + //line parser.y:522 { yyVAL.node = yyDollar[1].node } case 190: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:515 + //line parser.y:523 { yyVAL.node = yyDollar[2].node } case 191: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:519 + //line parser.y:527 { yyVAL.node = yyDollar[2].node } case 192: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:520 + //line parser.y:528 { yyVAL.node = yyDollar[3].node } case 193: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:521 + //line parser.y:529 { yyVAL.node = yyDollar[2].node } case 194: yyDollar = yyS[yypt-5 : yypt+1] - //line parser.y:522 + //line parser.y:530 { yyVAL.node = yyDollar[3].node } case 195: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:526 + //line parser.y:534 { yyVAL.node = Node("CaseList") } case 196: yyDollar = yyS[yypt-5 : yypt+1] - //line parser.y:528 + //line parser.y:536 { yyVAL.node = yyDollar[1].node.append(Node("Case").append(Node("expr").append(yyDollar[3].node)).append(yyDollar[5].node)) } case 197: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:532 + //line parser.y:540 { yyVAL.node = yyDollar[1].node.append(Node("Default").append(yyDollar[4].node)) } case 200: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:543 + //line parser.y:551 { yyVAL.node = yyDollar[1].node } case 201: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:544 + //line parser.y:552 { yyVAL.node = yyDollar[2].node } case 202: yyDollar = yyS[yypt-5 : yypt+1] - //line parser.y:549 + //line parser.y:557 { yyVAL.node = Node("If").append(Node("expr").append(yyDollar[3].node)).append(Node("stmt").append(yyDollar[5].node)) } case 203: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:553 + //line parser.y:561 { yyVAL.node = yyDollar[1].node.append(Node("ElseIf").append(Node("expr").append(yyDollar[4].node)).append(Node("stmt").append(yyDollar[6].node))) } case 204: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:559 + //line parser.y:567 { yyVAL.node = yyDollar[1].node } case 205: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:561 + //line parser.y:569 { yyVAL.node = yyDollar[1].node.append(Node("Else").append(Node("stmt").append(yyDollar[3].node))) } case 206: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:568 + //line parser.y:576 { yyVAL.node = Node("AltIf").append(Node("expr").append(yyDollar[3].node)).append(Node("stmt").append(yyDollar[6].node)) } case 207: yyDollar = yyS[yypt-7 : yypt+1] - //line parser.y:572 + //line parser.y:580 { yyVAL.node = yyDollar[1].node.append(Node("AltElseIf").append(Node("expr").append(yyDollar[4].node)).append(Node("stmt").append(yyDollar[7].node))) } case 208: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:578 + //line parser.y:586 { yyVAL.node = yyDollar[1].node } case 209: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:580 + //line parser.y:588 { yyVAL.node = yyDollar[1].node.append(Node("AltElse").append(Node("stmt").append(yyDollar[4].node))) } case 210: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:586 + //line parser.y:594 { yyVAL.node = yyDollar[1].node } case 211: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:587 + //line parser.y:595 { yyVAL.node = Node("Parameter list") } case 212: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:591 + //line parser.y:599 { yyVAL.node = Node("Parameter list").append(yyDollar[1].node) } case 213: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:592 + //line parser.y:600 { yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) } case 214: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:597 + //line parser.y:605 { yyVAL.node = Node("Parameter"). append(yyDollar[1].node). @@ -3323,7 +3331,7 @@ yydefault: } case 215: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:605 + //line parser.y:613 { yyVAL.node = Node("Parameter"). append(yyDollar[1].node). @@ -3334,170 +3342,170 @@ yydefault: } case 216: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:616 + //line parser.y:624 { yyVAL.node = Node("No type") } case 217: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:617 + //line parser.y:625 { yyVAL.node = yyDollar[1].node } case 218: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:621 + //line parser.y:629 { yyVAL.node = yyDollar[1].node } case 219: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:622 + //line parser.y:630 { yyVAL.node = yyDollar[2].node yyVAL.node.attribute("nullable", "true") } case 220: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:626 + //line parser.y:634 { yyVAL.node = Node("array type") } case 221: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:627 + //line parser.y:635 { yyVAL.node = Node("callable type") } case 222: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:628 + //line parser.y:636 { yyVAL.node = yyDollar[1].node } case 223: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:632 + //line parser.y:640 { yyVAL.node = Node("No return type") } case 224: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:633 + //line parser.y:641 { yyVAL.node = yyDollar[2].node } case 225: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:637 + //line parser.y:645 { yyVAL.node = Node("ArgumentList") } case 226: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:638 + //line parser.y:646 { yyVAL.node = yyDollar[2].node } case 227: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:642 + //line parser.y:650 { yyVAL.node = Node("ArgumentList").append(yyDollar[1].node) } case 228: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:643 + //line parser.y:651 { yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) } case 229: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:647 + //line parser.y:655 { yyVAL.node = yyDollar[1].node } case 230: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:648 + //line parser.y:656 { yyVAL.node = Node("Unpack").append(yyDollar[2].node) } case 231: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:652 + //line parser.y:660 { yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) } case 232: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:653 + //line parser.y:661 { yyVAL.node = Node("GlobalVarList").append(yyDollar[1].node) } case 233: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:657 + //line parser.y:665 { yyVAL.node = yyDollar[1].node } case 234: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:661 + //line parser.y:669 { yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) } case 235: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:662 + //line parser.y:670 { yyVAL.node = Node("StaticVarList").append(yyDollar[1].node) } case 236: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:666 + //line parser.y:674 { yyVAL.node = Node("StaticVariable").attribute("Name", yyDollar[1].token) } case 237: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:667 + //line parser.y:675 { yyVAL.node = Node("StaticVariable").attribute("Name", yyDollar[1].token).append(Node("expr").append(yyDollar[3].node)) } case 238: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:671 + //line parser.y:679 { yyVAL.node = yyDollar[1].node.append(yyDollar[2].node) } case 239: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:672 + //line parser.y:680 { yyVAL.node = Node("Stmt") } case 240: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:676 + //line parser.y:684 { yyVAL.node = yyDollar[2].node.append(yyDollar[1].node) } case 241: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:677 + //line parser.y:685 { yyVAL.node = yyDollar[3].node.append(yyDollar[1].node) } case 242: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:678 + //line parser.y:686 { yyVAL.node = Node("Use").append(yyDollar[2].node).append(yyDollar[3].node) } case 243: yyDollar = yyS[yypt-9 : yypt+1] - //line parser.y:681 + //line parser.y:689 { yyVAL.node = Node("Function"). append(yyDollar[1].node). @@ -3509,283 +3517,283 @@ yydefault: } case 244: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:693 + //line parser.y:701 { yyVAL.node = Node("NameList").append(yyDollar[1].node) } case 245: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:694 + //line parser.y:702 { yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) } case 246: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:698 + //line parser.y:706 { yyVAL.node = Node("") } case 247: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:699 + //line parser.y:707 { yyVAL.node = Node("") } case 248: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:700 + //line parser.y:708 { yyVAL.node = yyDollar[2].node } case 249: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:704 + //line parser.y:712 { yyVAL.node = Node("TraitAdaptionList").append(yyDollar[1].node) } case 250: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:705 + //line parser.y:713 { yyVAL.node = yyDollar[1].node.append(yyDollar[2].node) } case 251: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:709 + //line parser.y:717 { yyVAL.node = yyDollar[1].node } case 252: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:710 + //line parser.y:718 { yyVAL.node = yyDollar[1].node } case 253: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:715 + //line parser.y:723 { yyVAL.node = Node("TraitPrecedence").append(yyDollar[1].node).append(yyDollar[3].node) } case 254: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:719 + //line parser.y:727 { yyVAL.node = yyDollar[1].node.append(Node("as").attribute("value", yyDollar[3].token)) } case 255: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:721 + //line parser.y:729 { yyVAL.node = yyDollar[1].node.append(Node("as").append(Node("reservedNonModifiers"))) } case 256: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:723 + //line parser.y:731 { yyVAL.node = yyDollar[1].node.append(yyDollar[3].node).append(yyDollar[4].node) } case 257: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:724 + //line parser.y:732 { yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) } case 258: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:728 + //line parser.y:736 { yyVAL.node = Node("TraitMethodRef").append(yyDollar[1].node) } case 259: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:729 + //line parser.y:737 { yyVAL.node = yyDollar[1].node } case 260: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:733 + //line parser.y:741 { yyVAL.node = Node("TraitMethodRef").append(yyDollar[1].node).append(yyDollar[3].node) } case 261: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:737 + //line parser.y:745 { yyVAL.node = Node("") } case 262: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:738 + //line parser.y:746 { yyVAL.node = yyDollar[2].node } case 263: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:742 + //line parser.y:750 { yyVAL.node = yyDollar[1].node } case 264: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:743 + //line parser.y:751 { yyVAL.node = Node("VarMemberModifier") } case 265: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:747 + //line parser.y:755 { yyVAL.node = Node("PublicMemberModifier") } case 266: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:748 + //line parser.y:756 { yyVAL.node = yyDollar[1].node } case 267: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:752 + //line parser.y:760 { yyVAL.node = yyDollar[1].node } case 268: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:753 + //line parser.y:761 { yyVAL.node = yyDollar[1].node.append(yyDollar[2].node) } case 269: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:757 + //line parser.y:765 { yyVAL.node = Node("PublicMemberModifier") } case 270: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:758 + //line parser.y:766 { yyVAL.node = Node("ProtectedMemberModifier") } case 271: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:759 + //line parser.y:767 { yyVAL.node = Node("PrivateMemberModifier") } case 272: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:760 + //line parser.y:768 { yyVAL.node = Node("StaticMemberModifier") } case 273: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:761 + //line parser.y:769 { yyVAL.node = Node("AbstractMemberModifier") } case 274: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:762 + //line parser.y:770 { yyVAL.node = Node("FinalMemberModifier") } case 275: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:766 + //line parser.y:774 { yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) } case 276: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:767 + //line parser.y:775 { yyVAL.node = Node("PropertyList").append(yyDollar[1].node) } case 277: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:771 + //line parser.y:779 { yyVAL.node = Node("Property").attribute("name", yyDollar[1].token) } case 278: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:772 + //line parser.y:780 { yyVAL.node = Node("Property").attribute("name", yyDollar[1].token).append(Node("Default").append(yyDollar[3].node)) } case 279: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:776 + //line parser.y:784 { yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) } case 280: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:777 + //line parser.y:785 { yyVAL.node = Node("ConstList").append(yyDollar[1].node) } case 281: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:781 + //line parser.y:789 { yyVAL.node = Node("Const").append(yyDollar[3].node) } case 282: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:785 + //line parser.y:793 { yyVAL.node = Node("Const").attribute("name", yyDollar[1].token).append(yyDollar[3].node) } case 283: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:789 + //line parser.y:797 { yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) } case 284: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:790 + //line parser.y:798 { yyVAL.node = Node("EchoList").append(yyDollar[1].node) } case 285: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:794 + //line parser.y:802 { yyVAL.node = Node("Echo").append(yyDollar[1].node) } case 286: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:798 + //line parser.y:806 { yyVAL.node = Node("") } case 287: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:799 + //line parser.y:807 { yyVAL.node = yyDollar[1].node } case 288: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:802 + //line parser.y:810 { yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) } case 289: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:803 + //line parser.y:811 { yyVAL.node = Node("ExpressionList").append(yyDollar[1].node) } case 290: yyDollar = yyS[yypt-7 : yypt+1] - //line parser.y:808 + //line parser.y:816 { yyVAL.node = Node("AnonymousClass"). attribute("name", yyDollar[1].token). @@ -3796,463 +3804,463 @@ yydefault: } case 291: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:819 + //line parser.y:827 { yyVAL.node = Node("New").append(yyDollar[2].node).append(yyDollar[3].node) } case 292: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:820 + //line parser.y:828 { yyVAL.node = Node("New").append(yyDollar[2].node) } case 293: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:824 + //line parser.y:832 { yyVAL.node = Node("Assign").append(yyDollar[3].node).append(yyDollar[6].node) } case 294: yyDollar = yyS[yypt-5 : yypt+1] - //line parser.y:825 + //line parser.y:833 { yyVAL.node = Node("Assign").append(yyDollar[2].node).append(yyDollar[5].node) } case 295: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:826 + //line parser.y:834 { yyVAL.node = Node("Assign").append(yyDollar[1].node).append(yyDollar[3].node) } case 296: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:827 + //line parser.y:835 { yyVAL.node = Node("AssignRef").append(yyDollar[1].node).append(yyDollar[4].node) } case 297: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:828 + //line parser.y:836 { yyVAL.node = Node("Clone").append(yyDollar[2].node) } case 298: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:829 + //line parser.y:837 { yyVAL.node = Node("AssignAdd").append(yyDollar[1].node).append(yyDollar[3].node) } case 299: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:830 + //line parser.y:838 { yyVAL.node = Node("AssignSub").append(yyDollar[1].node).append(yyDollar[3].node) } case 300: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:831 + //line parser.y:839 { yyVAL.node = Node("AssignMul").append(yyDollar[1].node).append(yyDollar[3].node) } case 301: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:832 + //line parser.y:840 { yyVAL.node = Node("AssignPow").append(yyDollar[1].node).append(yyDollar[3].node) } case 302: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:833 + //line parser.y:841 { yyVAL.node = Node("AssignDiv").append(yyDollar[1].node).append(yyDollar[3].node) } case 303: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:834 + //line parser.y:842 { yyVAL.node = Node("AssignConcat").append(yyDollar[1].node).append(yyDollar[3].node) } case 304: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:835 + //line parser.y:843 { yyVAL.node = Node("AssignMod").append(yyDollar[1].node).append(yyDollar[3].node) } case 305: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:836 + //line parser.y:844 { yyVAL.node = Node("AssignAnd").append(yyDollar[1].node).append(yyDollar[3].node) } case 306: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:837 + //line parser.y:845 { yyVAL.node = Node("AssignOr").append(yyDollar[1].node).append(yyDollar[3].node) } case 307: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:838 + //line parser.y:846 { yyVAL.node = Node("AssignXor").append(yyDollar[1].node).append(yyDollar[3].node) } case 308: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:839 + //line parser.y:847 { yyVAL.node = Node("AssignShiftLeft").append(yyDollar[1].node).append(yyDollar[3].node) } case 309: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:840 + //line parser.y:848 { yyVAL.node = Node("AssignShiftRight").append(yyDollar[1].node).append(yyDollar[3].node) } case 310: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:841 + //line parser.y:849 { yyVAL.node = Node("PostIncrement").append(yyDollar[1].node) } case 311: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:842 + //line parser.y:850 { yyVAL.node = Node("PreIncrement").append(yyDollar[2].node) } case 312: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:843 + //line parser.y:851 { yyVAL.node = Node("PostDecrement").append(yyDollar[1].node) } case 313: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:844 + //line parser.y:852 { yyVAL.node = Node("PreDecrement").append(yyDollar[2].node) } case 314: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:845 + //line parser.y:853 { yyVAL.node = Node("Or").append(yyDollar[1].node).append(yyDollar[3].node) } case 315: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:846 + //line parser.y:854 { yyVAL.node = Node("And").append(yyDollar[1].node).append(yyDollar[3].node) } case 316: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:847 + //line parser.y:855 { yyVAL.node = Node("Or").append(yyDollar[1].node).append(yyDollar[3].node) } case 317: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:848 + //line parser.y:856 { yyVAL.node = Node("And").append(yyDollar[1].node).append(yyDollar[3].node) } case 318: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:849 + //line parser.y:857 { yyVAL.node = Node("Xor").append(yyDollar[1].node).append(yyDollar[3].node) } case 319: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:850 + //line parser.y:858 { yyVAL.node = Node("BitwiseOr").append(yyDollar[1].node).append(yyDollar[3].node) } case 320: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:851 + //line parser.y:859 { yyVAL.node = Node("BitwiseAnd").append(yyDollar[1].node).append(yyDollar[3].node) } case 321: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:852 + //line parser.y:860 { yyVAL.node = Node("BitwiseXor").append(yyDollar[1].node).append(yyDollar[3].node) } case 322: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:853 + //line parser.y:861 { yyVAL.node = Node("Concat").append(yyDollar[1].node).append(yyDollar[3].node) } case 323: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:854 + //line parser.y:862 { yyVAL.node = Node("Add").append(yyDollar[1].node).append(yyDollar[3].node) } case 324: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:855 + //line parser.y:863 { yyVAL.node = Node("Sub").append(yyDollar[1].node).append(yyDollar[3].node) } case 325: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:856 + //line parser.y:864 { yyVAL.node = Node("Mul").append(yyDollar[1].node).append(yyDollar[3].node) } case 326: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:857 + //line parser.y:865 { yyVAL.node = Node("Pow").append(yyDollar[1].node).append(yyDollar[3].node) } case 327: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:858 + //line parser.y:866 { yyVAL.node = Node("Div").append(yyDollar[1].node).append(yyDollar[3].node) } case 328: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:859 + //line parser.y:867 { yyVAL.node = Node("Mod").append(yyDollar[1].node).append(yyDollar[3].node) } case 329: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:860 + //line parser.y:868 { yyVAL.node = Node("ShiftLeft").append(yyDollar[1].node).append(yyDollar[3].node) } case 330: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:861 + //line parser.y:869 { yyVAL.node = Node("ShiftRight").append(yyDollar[1].node).append(yyDollar[3].node) } case 331: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:862 + //line parser.y:870 { yyVAL.node = Node("UnaryPlus").append(yyDollar[2].node) } case 332: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:863 + //line parser.y:871 { yyVAL.node = Node("UnaryMinus").append(yyDollar[2].node) } case 333: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:864 + //line parser.y:872 { yyVAL.node = Node("BooleanNot").append(yyDollar[2].node) } case 334: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:865 + //line parser.y:873 { yyVAL.node = Node("BitwiseNot").append(yyDollar[2].node) } case 335: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:866 + //line parser.y:874 { yyVAL.node = Node("Identical").append(yyDollar[1].node).append(yyDollar[3].node) } case 336: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:867 + //line parser.y:875 { yyVAL.node = Node("NotIdentical").append(yyDollar[1].node).append(yyDollar[3].node) } case 337: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:868 + //line parser.y:876 { yyVAL.node = Node("Equal").append(yyDollar[1].node).append(yyDollar[3].node) } case 338: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:869 + //line parser.y:877 { yyVAL.node = Node("NotEqual").append(yyDollar[1].node).append(yyDollar[3].node) } case 339: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:870 + //line parser.y:878 { yyVAL.node = Node("Smaller").append(yyDollar[1].node).append(yyDollar[3].node) } case 340: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:871 + //line parser.y:879 { yyVAL.node = Node("SmallerOrEqual").append(yyDollar[1].node).append(yyDollar[3].node) } case 341: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:872 + //line parser.y:880 { yyVAL.node = Node("Greater").append(yyDollar[1].node).append(yyDollar[3].node) } case 342: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:873 + //line parser.y:881 { yyVAL.node = Node("GreaterOrEqual").append(yyDollar[1].node).append(yyDollar[3].node) } case 343: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:874 + //line parser.y:882 { yyVAL.node = Node("Spaceship").append(yyDollar[1].node).append(yyDollar[3].node) } case 344: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:875 + //line parser.y:883 { yyVAL.node = Node("InstanceOf").append(yyDollar[1].node).append(yyDollar[3].node) } case 345: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:876 + //line parser.y:884 { yyVAL.node = yyDollar[2].node } case 346: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:877 + //line parser.y:885 { yyVAL.node = yyDollar[1].node } case 347: yyDollar = yyS[yypt-5 : yypt+1] - //line parser.y:878 + //line parser.y:886 { yyVAL.node = Node("Ternary").append(yyDollar[1].node).append(yyDollar[3].node).append(yyDollar[5].node) } case 348: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:879 + //line parser.y:887 { yyVAL.node = Node("Ternary").append(yyDollar[1].node).append(yyDollar[4].node) } case 349: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:880 + //line parser.y:888 { yyVAL.node = Node("Coalesce").append(yyDollar[1].node).append(yyDollar[3].node) } case 350: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:881 + //line parser.y:889 { yyVAL.node = yyDollar[1].node } case 351: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:882 + //line parser.y:890 { yyVAL.node = Node("CastInt").append(yyDollar[2].node) } case 352: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:883 + //line parser.y:891 { yyVAL.node = Node("CastDouble").append(yyDollar[2].node) } case 353: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:884 + //line parser.y:892 { yyVAL.node = Node("CastString").append(yyDollar[2].node) } case 354: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:885 + //line parser.y:893 { yyVAL.node = Node("CastArray").append(yyDollar[2].node) } case 355: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:886 + //line parser.y:894 { yyVAL.node = Node("CastObject").append(yyDollar[2].node) } case 356: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:887 + //line parser.y:895 { yyVAL.node = Node("CastBool").append(yyDollar[2].node) } case 357: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:888 + //line parser.y:896 { yyVAL.node = Node("CastUnset").append(yyDollar[2].node) } case 358: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:889 + //line parser.y:897 { yyVAL.node = Node("Exit").append(yyDollar[2].node) } case 359: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:890 + //line parser.y:898 { yyVAL.node = Node("Silence").append(yyDollar[2].node) } case 360: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:891 + //line parser.y:899 { yyVAL.node = yyDollar[1].node } case 361: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:892 + //line parser.y:900 { yyVAL.node = Node("ShellExec").append(yyDollar[2].node) } case 362: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:893 + //line parser.y:901 { yyVAL.node = Node("Print").append(yyDollar[2].node) } case 363: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:894 + //line parser.y:902 { yyVAL.node = Node("Yield") } case 364: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:895 + //line parser.y:903 { yyVAL.node = Node("Yield").append(yyDollar[2].node) } case 365: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:896 + //line parser.y:904 { yyVAL.node = Node("Yield").append(yyDollar[2].node).append(yyDollar[4].node) } case 366: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:897 + //line parser.y:905 { yyVAL.node = Node("YieldFrom").append(yyDollar[2].node) } case 367: yyDollar = yyS[yypt-10 : yypt+1] - //line parser.y:899 + //line parser.y:907 { yyVAL.node = Node("Closure"). attribute("returns_ref", yyDollar[2].value). @@ -4263,7 +4271,7 @@ yydefault: } case 368: yyDollar = yyS[yypt-11 : yypt+1] - //line parser.y:908 + //line parser.y:916 { yyVAL.node = Node("StaticClosure"). attribute("returns_ref", yyDollar[3].value). @@ -4274,553 +4282,553 @@ yydefault: } case 369: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:919 + //line parser.y:927 { yyVAL.value = "false" } case 370: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:920 + //line parser.y:928 { yyVAL.value = "true" } case 371: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:924 + //line parser.y:932 { yyVAL.node = Node("") } case 372: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:925 + //line parser.y:933 { yyVAL.node = yyDollar[3].node } case 373: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:929 + //line parser.y:937 { yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) } case 374: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:930 + //line parser.y:938 { yyVAL.node = Node("ClosureUses").append(yyDollar[1].node) } case 375: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:934 + //line parser.y:942 { yyVAL.node = Node("Variable").attribute("value", yyDollar[1].token) } case 376: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:935 + //line parser.y:943 { yyVAL.node = Node("Variable").attribute("value", yyDollar[2].token).attribute("ref", "true") } case 377: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:939 + //line parser.y:947 { yyVAL.node = Node("FunctionCall").append(yyDollar[1].node).append(yyDollar[2].node) } case 378: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:941 + //line parser.y:949 { yyVAL.node = Node("StaticCall").append(yyDollar[1].node).append(yyDollar[3].node).append(yyDollar[4].node) } case 379: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:943 + //line parser.y:951 { yyVAL.node = Node("StaticCall").append(yyDollar[1].node).append(yyDollar[3].node).append(yyDollar[4].node) } case 380: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:944 + //line parser.y:952 { yyVAL.node = Node("Call").append(yyDollar[1].node).append(yyDollar[2].node) } case 381: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:948 + //line parser.y:956 { yyVAL.node = Node("Static") } case 382: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:949 + //line parser.y:957 { yyVAL.node = yyDollar[1].node } case 383: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:953 + //line parser.y:961 { yyVAL.node = yyDollar[1].node } case 384: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:954 + //line parser.y:962 { yyVAL.node = yyDollar[1].node } case 385: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:958 + //line parser.y:966 { yyVAL.node = Node("") } case 386: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:959 + //line parser.y:967 { yyVAL.node = yyDollar[2].node } case 387: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:963 + //line parser.y:971 { yyVAL.node = Node("EmptyBackticks") } case 388: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:964 + //line parser.y:972 { yyVAL.node = Node("String").attribute("value", yyDollar[1].token) } case 389: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:965 + //line parser.y:973 { yyVAL.node = yyDollar[1].node } case 390: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:969 + //line parser.y:977 { yyVAL.node = Node("ArgumentList") } case 391: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:970 + //line parser.y:978 { yyVAL.node = yyDollar[1].node } case 392: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:974 + //line parser.y:982 { yyVAL.node = yyDollar[3].node } case 393: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:975 + //line parser.y:983 { yyVAL.node = yyDollar[2].node } case 394: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:976 + //line parser.y:984 { yyVAL.node = Node("String").attribute("value", yyDollar[1].token) } case 395: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:980 + //line parser.y:988 { yyVAL.node = Node("Scalar").append(Node("Lnumber").attribute("value", yyDollar[1].token)) } case 396: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:981 + //line parser.y:989 { yyVAL.node = Node("Scalar").append(Node("Dnumber").attribute("value", yyDollar[1].token)) } case 397: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:982 + //line parser.y:990 { yyVAL.node = Node("Scalar").append(Node("__LINE__")) } case 398: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:983 + //line parser.y:991 { yyVAL.node = Node("Scalar").append(Node("__FILE__")) } case 399: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:984 + //line parser.y:992 { yyVAL.node = Node("Scalar").append(Node("__DIR__")) } case 400: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:985 + //line parser.y:993 { yyVAL.node = Node("Scalar").append(Node("__TRAIT__")) } case 401: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:986 + //line parser.y:994 { yyVAL.node = Node("Scalar").append(Node("__METHOD__")) } case 402: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:987 + //line parser.y:995 { yyVAL.node = Node("Scalar").append(Node("__FUNCTION__")) } case 403: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:988 + //line parser.y:996 { yyVAL.node = Node("Scalar").append(Node("__NAMESPACE__")) } case 404: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:989 + //line parser.y:997 { yyVAL.node = Node("Scalar").append(Node("__CLASS__")) } case 405: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:991 + //line parser.y:999 { yyVAL.node = Node("Scalar").append(Node("Heredoc").attribute("value", yyDollar[2].token)) } case 406: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:993 + //line parser.y:1001 { yyVAL.node = Node("Scalar").append(Node("Heredoc")) } case 407: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:994 + //line parser.y:1002 { yyVAL.node = yyDollar[2].node } case 408: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:995 + //line parser.y:1003 { yyVAL.node = yyDollar[2].node } case 409: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:996 + //line parser.y:1004 { yyVAL.node = yyDollar[1].node } case 410: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:997 + //line parser.y:1005 { yyVAL.node = yyDollar[1].node } case 411: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1001 + //line parser.y:1009 { yyVAL.node = Node("Const").append(yyDollar[1].node) } case 412: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1002 + //line parser.y:1010 { yyVAL.node = Node("Const").append(yyDollar[1].node).append(yyDollar[3].node) } case 413: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1004 + //line parser.y:1012 { yyVAL.node = Node("Const").append(yyDollar[1].node).append(yyDollar[3].node) } case 414: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1008 + //line parser.y:1016 { yyVAL.node = yyDollar[1].node } case 415: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1009 + //line parser.y:1017 { yyVAL.node = yyDollar[1].node } case 416: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:1013 + //line parser.y:1021 { yyVAL.node = Node("") } case 417: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1014 + //line parser.y:1022 { yyVAL.node = yyDollar[1].node } case 418: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1018 + //line parser.y:1026 { yyVAL.node = yyDollar[1].node } case 419: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1022 + //line parser.y:1030 { yyVAL.node = yyDollar[1].node } case 420: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1023 + //line parser.y:1031 { yyVAL.node = yyDollar[2].node } case 421: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1024 + //line parser.y:1032 { yyVAL.node = yyDollar[1].node } case 422: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1028 + //line parser.y:1036 { yyVAL.node = yyDollar[1].node } case 423: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1029 + //line parser.y:1037 { yyVAL.node = yyDollar[2].node } case 424: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1030 + //line parser.y:1038 { yyVAL.node = yyDollar[1].node } case 425: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1034 + //line parser.y:1042 { yyVAL.node = yyDollar[1].node } case 426: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1035 + //line parser.y:1043 { yyVAL.node = Node("Dim").append(yyDollar[1].node).append(yyDollar[3].node) } case 427: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1036 + //line parser.y:1044 { yyVAL.node = Node("Dim").append(yyDollar[1].node).append(yyDollar[3].node) } case 428: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1037 + //line parser.y:1045 { yyVAL.node = Node("Dim").append(yyDollar[1].node).append(yyDollar[3].node) } case 429: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1039 + //line parser.y:1047 { yyVAL.node = Node("MethodCall").append(yyDollar[1].node).append(yyDollar[3].node).append(yyDollar[4].node) } case 430: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1040 + //line parser.y:1048 { yyVAL.node = yyDollar[1].node } case 431: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1044 + //line parser.y:1052 { yyVAL.node = yyDollar[1].node } case 432: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1045 + //line parser.y:1053 { yyVAL.node = yyDollar[1].node } case 433: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1046 + //line parser.y:1054 { yyVAL.node = Node("Property").append(yyDollar[1].node).append(yyDollar[3].node) } case 434: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1050 + //line parser.y:1058 { yyVAL.node = Node("Variable").attribute("name", yyDollar[1].token) } case 435: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1051 + //line parser.y:1059 { yyVAL.node = Node("Variable").append(yyDollar[3].node) } case 436: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:1052 + //line parser.y:1060 { yyVAL.node = Node("Variable").append(yyDollar[2].node) } case 437: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1057 + //line parser.y:1065 { yyVAL.node = Node("StaticProp").append(yyDollar[1].node).append(yyDollar[3].node) } case 438: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1059 + //line parser.y:1067 { yyVAL.node = Node("StaticProp").append(yyDollar[1].node).append(yyDollar[3].node) } case 439: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1063 + //line parser.y:1071 { yyVAL.node = yyDollar[1].node } case 440: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1064 + //line parser.y:1072 { yyVAL.node = Node("Dim").append(yyDollar[1].node).append(yyDollar[3].node) } case 441: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1065 + //line parser.y:1073 { yyVAL.node = Node("Dim").append(yyDollar[1].node).append(yyDollar[3].node) } case 442: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1066 + //line parser.y:1074 { yyVAL.node = Node("Property").append(yyDollar[1].node).append(yyDollar[3].node) } case 443: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1068 + //line parser.y:1076 { yyVAL.node = Node("StaticProperty").append(yyDollar[1].node).append(yyDollar[3].node) } case 444: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1070 + //line parser.y:1078 { yyVAL.node = Node("StaticProperty").append(yyDollar[1].node).append(yyDollar[3].node) } case 445: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1074 + //line parser.y:1082 { yyVAL.node = yyDollar[1].node } case 446: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1075 + //line parser.y:1083 { yyVAL.node = yyDollar[2].node } case 447: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1076 + //line parser.y:1084 { yyVAL.node = yyDollar[1].node } case 448: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1080 + //line parser.y:1088 { yyVAL.node = Node("PropertyName").attribute("value", yyDollar[1].token) } case 449: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1081 + //line parser.y:1089 { yyVAL.node = yyDollar[2].node } case 450: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1082 + //line parser.y:1090 { yyVAL.node = yyDollar[1].node } case 451: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1086 + //line parser.y:1094 { /* TODO: allow single trailing comma */ yyVAL.node = yyDollar[1].node } case 452: yyDollar = yyS[yypt-0 : yypt+1] - //line parser.y:1090 + //line parser.y:1098 { yyVAL.node = Node("") } case 453: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1091 + //line parser.y:1099 { yyVAL.node = yyDollar[1].node } case 454: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1096 + //line parser.y:1104 { yyVAL.node = yyDollar[1].node.append(yyDollar[3].node) } case 455: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1097 + //line parser.y:1105 { yyVAL.node = Node("ArrayPairList").append(yyDollar[1].node) } case 456: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1101 + //line parser.y:1109 { yyVAL.node = Node("ArrayElement").append(yyDollar[1].node).append(yyDollar[3].node) } case 457: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1102 + //line parser.y:1110 { yyVAL.node = Node("ArrayElement").append(yyDollar[1].node) } case 458: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1103 + //line parser.y:1111 { yyVAL.node = Node("ArrayElement").append(yyDollar[1].node).append(Node("Ref").append(yyDollar[4].node)) } case 459: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:1104 + //line parser.y:1112 { yyVAL.node = Node("ArrayElement").append(Node("Ref").append(yyDollar[2].node)) } case 460: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:1106 + //line parser.y:1114 { yyVAL.node = Node("ArrayElement"). append(yyDollar[1].node). @@ -4828,158 +4836,158 @@ yydefault: } case 461: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1112 + //line parser.y:1120 { yyVAL.node = Node("ArrayElement"). append(Node("ArrayList").append(yyDollar[3].node)) } case 462: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:1119 + //line parser.y:1127 { yyVAL.node = yyDollar[1].node.append(yyDollar[2].node) } case 463: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:1120 + //line parser.y:1128 { yyVAL.node = yyDollar[1].node.append(Node("String").attribute("value", yyDollar[2].token)) } case 464: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1121 + //line parser.y:1129 { yyVAL.node = Node("EncapsList").append(yyDollar[1].node) } case 465: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:1122 + //line parser.y:1130 { yyVAL.node = Node("EncapsList").append(Node("String").attribute("value", yyDollar[1].token)).append(yyDollar[2].node) } case 466: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1126 + //line parser.y:1134 { yyVAL.node = Node("Variable").attribute("value", yyDollar[1].token) } case 467: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1127 + //line parser.y:1135 { yyVAL.node = Node("Variable").attribute("value", yyDollar[1].token).append(Node("offset").append(yyDollar[3].node)) } case 468: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1128 + //line parser.y:1136 { yyVAL.node = Node("Variable").attribute("value", yyDollar[1].token).append(Node("property").attribute("value", yyDollar[3].token)) } case 469: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1129 + //line parser.y:1137 { yyVAL.node = Node("Variable").append(Node("expr").append(yyDollar[2].node)) } case 470: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1130 + //line parser.y:1138 { yyVAL.node = Node("Variable").attribute("value", yyDollar[2].token) } case 471: yyDollar = yyS[yypt-6 : yypt+1] - //line parser.y:1132 + //line parser.y:1140 { yyVAL.node = Node("Variable").attribute("value", yyDollar[2].token).append(Node("offset").append(yyDollar[4].node)) } case 472: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1133 + //line parser.y:1141 { yyVAL.node = yyDollar[2].node } case 473: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1136 + //line parser.y:1144 { yyVAL.node = Node("OffsetString").attribute("value", yyDollar[1].token) } case 474: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1137 + //line parser.y:1145 { yyVAL.node = Node("OffsetNumString").attribute("value", yyDollar[1].token) } case 475: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:1138 + //line parser.y:1146 { yyVAL.node = Node("OffsetNegateNumString").attribute("value", yyDollar[2].token) } case 476: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1139 + //line parser.y:1147 { yyVAL.node = Node("OffsetVariable").attribute("value", yyDollar[1].token) } case 477: yyDollar = yyS[yypt-5 : yypt+1] - //line parser.y:1143 + //line parser.y:1151 { yyVAL.node = yyDollar[3].node } case 478: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1144 + //line parser.y:1152 { yyVAL.node = Node("Empty").append(yyDollar[3].node) } case 479: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:1145 + //line parser.y:1153 { yyVAL.node = Node("Include").append(yyDollar[2].node) } case 480: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:1146 + //line parser.y:1154 { yyVAL.node = Node("IncludeOnce").append(yyDollar[2].node) } case 481: yyDollar = yyS[yypt-4 : yypt+1] - //line parser.y:1147 + //line parser.y:1155 { yyVAL.node = Node("Eval").append(yyDollar[3].node) } case 482: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:1148 + //line parser.y:1156 { yyVAL.node = Node("Require").append(yyDollar[2].node) } case 483: yyDollar = yyS[yypt-2 : yypt+1] - //line parser.y:1149 + //line parser.y:1157 { yyVAL.node = Node("RequireOnce").append(yyDollar[2].node) } case 484: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1153 + //line parser.y:1161 { yyVAL.node = yyDollar[1].node } case 485: yyDollar = yyS[yypt-3 : yypt+1] - //line parser.y:1154 + //line parser.y:1162 { yyVAL.node = Node("AndIsset").append(yyDollar[1].node).append(yyDollar[3].node) } case 486: yyDollar = yyS[yypt-1 : yypt+1] - //line parser.y:1158 + //line parser.y:1166 { yyVAL.node = Node("Isset").append(yyDollar[1].node) } diff --git a/parser.y b/parser.y index fbf04a9..2b806f4 100644 --- a/parser.y +++ b/parser.y @@ -2,9 +2,17 @@ package main import ( - "fmt" + "io" ) +var rootNode = Node("Root") + +func parse(src io.Reader, fName string) node { + rootNode = Node("Root") //reset + yyParse(newLexer(src, fName)) + return rootNode +} + %} %union{ @@ -194,7 +202,7 @@ import ( ///////////////////////////////////////////////////////////////////////// start: - top_statement_list { fmt.Println($1) } + top_statement_list { rootNode = $1; } ; reserved_non_modifiers: diff --git a/scanner.go b/scanner.go index 47f8f98..eb0249e 100644 --- a/scanner.go +++ b/scanner.go @@ -11,6 +11,7 @@ package main import ( "bytes" "fmt" + "unicode" ) const ( @@ -29,6 +30,20 @@ const ( var heredocLabel []byte +func rune2Class(r rune) int { + if r >= 0 && r < 0x80 { // Keep ASCII as it is. + return int(r) + } + if unicode.IsLetter(r) { + return classUnicodeLeter + } + if unicode.IsDigit(r) { + return classUnicodeDigit + } + // return classOther + return -1 +} + func (l *lexer) Lex(lval *yySymType) int { // Lex(lval *yySymType) c := l.Enter() diff --git a/scanner.l b/scanner.l index c8bb2fc..702a682 100644 --- a/scanner.l +++ b/scanner.l @@ -10,6 +10,7 @@ package main import ( "fmt" "bytes" + "unicode" ) const ( @@ -28,6 +29,20 @@ const ( var heredocLabel []byte +func rune2Class(r rune) int { + if r >= 0 && r < 0x80 { // Keep ASCII as it is. + return int(r) + } + if unicode.IsLetter(r) { + return classUnicodeLeter + } + if unicode.IsDigit(r) { + return classUnicodeDigit + } + // return classOther + return -1 +} + func (l *lexer) Lex(lval *yySymType) int { // Lex(lval *yySymType) c := l.Enter()