From 1130c4efb7528e3a41ff623d770c75b5d63a72f7 Mon Sep 17 00:00:00 2001 From: itchyny Date: Thu, 18 Apr 2024 08:30:35 +0900 Subject: [PATCH] refactor program body, rename rules, remove empty actions in parser --- parser.go | 759 +++++++++++++++++++++------------------------------- parser.go.y | 136 +++++----- 2 files changed, 367 insertions(+), 528 deletions(-) diff --git a/parser.go b/parser.go index 81bd2298..61501f87 100644 --- a/parser.go +++ b/parser.go @@ -32,9 +32,9 @@ type yySymType struct { const tokAltOp = 57346 const tokUpdateOp = 57347 const tokDestAltOp = 57348 -const tokOrOp = 57349 -const tokAndOp = 57350 -const tokCompareOp = 57351 +const tokCompareOp = 57349 +const tokOrOp = 57350 +const tokAndOp = 57351 const tokModule = 57352 const tokImport = 57353 const tokInclude = 57354 @@ -45,33 +45,33 @@ const tokBreak = 57358 const tokNull = 57359 const tokTrue = 57360 const tokFalse = 57361 -const tokIdent = 57362 -const tokVariable = 57363 -const tokModuleIdent = 57364 -const tokModuleVariable = 57365 -const tokIndex = 57366 -const tokNumber = 57367 -const tokFormat = 57368 -const tokString = 57369 -const tokStringStart = 57370 -const tokStringQuery = 57371 -const tokStringEnd = 57372 -const tokIf = 57373 -const tokThen = 57374 -const tokElif = 57375 -const tokElse = 57376 -const tokEnd = 57377 -const tokTry = 57378 -const tokCatch = 57379 -const tokReduce = 57380 -const tokForeach = 57381 -const tokRecurse = 57382 -const tokFuncDefPost = 57383 -const tokTermPost = 57384 -const tokEmptyCatch = 57385 -const tokInvalid = 57386 -const tokInvalidEscapeSequence = 57387 -const tokUnterminatedString = 57388 +const tokIf = 57362 +const tokThen = 57363 +const tokElif = 57364 +const tokElse = 57365 +const tokEnd = 57366 +const tokTry = 57367 +const tokCatch = 57368 +const tokReduce = 57369 +const tokForeach = 57370 +const tokIdent = 57371 +const tokVariable = 57372 +const tokModuleIdent = 57373 +const tokModuleVariable = 57374 +const tokRecurse = 57375 +const tokIndex = 57376 +const tokNumber = 57377 +const tokFormat = 57378 +const tokString = 57379 +const tokStringStart = 57380 +const tokStringQuery = 57381 +const tokStringEnd = 57382 +const tokInvalid = 57383 +const tokInvalidEscapeSequence = 57384 +const tokUnterminatedString = 57385 +const tokFuncDefPost = 57386 +const tokTermPost = 57387 +const tokEmptyCatch = 57388 var yyToknames = [...]string{ "$end", @@ -80,9 +80,9 @@ var yyToknames = [...]string{ "tokAltOp", "tokUpdateOp", "tokDestAltOp", + "tokCompareOp", "tokOrOp", "tokAndOp", - "tokCompareOp", "tokModule", "tokImport", "tokInclude", @@ -93,10 +93,20 @@ var yyToknames = [...]string{ "tokNull", "tokTrue", "tokFalse", + "tokIf", + "tokThen", + "tokElif", + "tokElse", + "tokEnd", + "tokTry", + "tokCatch", + "tokReduce", + "tokForeach", "tokIdent", "tokVariable", "tokModuleIdent", "tokModuleVariable", + "tokRecurse", "tokIndex", "tokNumber", "tokFormat", @@ -104,22 +114,11 @@ var yyToknames = [...]string{ "tokStringStart", "tokStringQuery", "tokStringEnd", - "tokIf", - "tokThen", - "tokElif", - "tokElse", - "tokEnd", - "tokTry", - "tokCatch", - "tokReduce", - "tokForeach", - "tokRecurse", - "tokFuncDefPost", - "tokTermPost", - "tokEmptyCatch", "tokInvalid", "tokInvalidEscapeSequence", "tokUnterminatedString", + "tokFuncDefPost", + "tokTermPost", "'|'", "','", "'+'", @@ -129,6 +128,7 @@ var yyToknames = [...]string{ "'%'", "'.'", "'?'", + "tokEmptyCatch", "'['", "';'", "':'", @@ -156,163 +156,163 @@ var yyExca = [...]int16{ 5, 0, -2, 26, -1, 132, - 9, 0, + 7, 0, -2, 29, - -1, 193, + -1, 197, 58, 113, -2, 48, } const yyPrivate = 57344 -const yyLast = 1060 +const yyLast = 1055 var yyAct = [...]int16{ - 85, 139, 173, 198, 209, 189, 9, 102, 101, 174, - 12, 150, 107, 6, 47, 140, 7, 88, 31, 242, - 49, 178, 179, 180, 245, 241, 226, 109, 157, 176, - 98, 177, 122, 114, 115, 96, 97, 244, 119, 111, - 112, 225, 252, 156, 103, 116, 117, 121, 263, 113, - 141, 178, 179, 180, 236, 206, 142, 235, 205, 176, - 181, 177, 238, 152, 153, 218, 7, 74, 75, 253, - 76, 77, 78, 126, 127, 128, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 224, 239, 76, 77, 78, - 181, 228, 146, 227, 159, 201, 7, 158, 223, 155, - 125, 124, 123, 44, 151, 160, 185, 148, 143, 144, - 72, 73, 79, 80, 81, 82, 83, 42, 43, 164, - 265, 195, 258, 259, 194, 42, 43, 182, 183, 79, - 80, 81, 82, 83, 94, 49, 93, 172, 81, 82, - 83, 166, 169, 187, 170, 168, 91, 184, 196, 197, - 190, 87, 118, 202, 92, 74, 75, 204, 76, 77, - 78, 191, 95, 213, 211, 214, 208, 215, 216, 210, - 210, 217, 199, 200, 74, 75, 103, 76, 77, 78, - 149, 90, 89, 91, 220, 221, 3, 222, 79, 80, - 81, 82, 83, 229, 8, 165, 231, 24, 72, 73, - 79, 80, 81, 82, 83, 87, 84, 237, 151, 23, - 233, 219, 251, 175, 46, 86, 100, 72, 73, 79, - 80, 81, 82, 83, 163, 87, 246, 110, 257, 248, - 249, 232, 247, 11, 190, 90, 89, 91, 240, 11, - 254, 154, 260, 261, 256, 191, 120, 188, 262, 255, - 210, 186, 138, 203, 264, 90, 89, 91, 10, 266, - 267, 5, 87, 4, 2, 270, 1, 0, 0, 273, - 274, 0, 0, 275, 0, 0, 0, 51, 52, 279, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 105, 106, 90, 89, 91, 0, 0, 42, 43, 77, - 78, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 0, 0, 16, 0, 13, 36, 20, 21, 22, 38, - 40, 39, 41, 19, 27, 30, 42, 43, 0, 104, - 32, 0, 0, 207, 0, 33, 0, 34, 35, 18, - 79, 80, 81, 82, 83, 0, 0, 0, 28, 29, - 0, 0, 0, 17, 0, 26, 0, 147, 37, 0, - 145, 25, 51, 52, 0, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 105, 106, 0, 0, 0, - 0, 0, 42, 43, 0, 78, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 14, 15, 16, 0, 13, - 36, 20, 21, 22, 38, 40, 39, 41, 19, 27, - 30, 42, 43, 0, 104, 32, 0, 0, 99, 0, - 33, 0, 34, 35, 18, 79, 80, 81, 82, 83, - 0, 0, 0, 28, 29, 0, 0, 0, 17, 0, - 26, 0, 0, 37, 0, 16, 25, 13, 36, 20, - 21, 22, 38, 40, 39, 41, 19, 27, 30, 42, - 43, 0, 0, 32, 0, 0, 0, 0, 33, 0, - 34, 35, 18, 0, 0, 0, 0, 0, 0, 0, - 0, 28, 29, 0, 0, 0, 17, 0, 26, 0, - 0, 37, 0, 230, 25, 16, 0, 13, 36, 20, - 21, 22, 38, 40, 39, 41, 19, 27, 30, 42, - 43, 0, 0, 32, 0, 0, 0, 0, 33, 0, - 34, 35, 18, 0, 0, 0, 0, 0, 0, 0, - 0, 28, 29, 0, 0, 0, 17, 0, 26, 0, - 0, 37, 0, 108, 25, 16, 0, 13, 36, 20, - 21, 22, 38, 40, 39, 41, 19, 27, 30, 42, - 43, 74, 75, 32, 76, 77, 78, 0, 33, 0, - 34, 35, 18, 0, 0, 0, 0, 0, 0, 0, - 0, 28, 29, 0, 0, 0, 17, 0, 26, 0, - 0, 37, 51, 52, 25, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 48, 79, 80, 81, 82, - 83, 0, 50, 0, 0, 0, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 51, 52, 0, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 48, 0, - 0, 0, 0, 0, 0, 50, 0, 0, 171, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 0, 0, - 36, 20, 21, 22, 38, 40, 39, 41, 19, 27, - 30, 42, 43, 0, 0, 32, 0, 0, 0, 0, - 33, 45, 34, 35, 18, 0, 0, 0, 0, 0, - 0, 0, 0, 28, 29, 0, 0, 0, 17, 0, - 26, 0, 0, 37, 51, 52, 25, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 105, 193, 0, - 0, 0, 0, 0, 42, 43, 0, 0, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 74, 75, 0, - 76, 77, 78, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 74, 75, 192, 76, 77, 78, - 0, 74, 75, 0, 76, 77, 78, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 73, 79, 80, 81, 82, 83, 0, 0, 0, - 278, 74, 75, 277, 76, 77, 78, 72, 73, 79, - 80, 81, 82, 83, 72, 73, 79, 80, 81, 82, - 83, 161, 0, 0, 0, 74, 75, 280, 76, 77, - 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 87, 142, 173, 184, 209, 10, 193, 174, 102, 139, + 14, 5, 107, 47, 101, 227, 143, 90, 245, 49, + 157, 122, 6, 178, 179, 180, 242, 109, 241, 31, + 225, 226, 244, 114, 115, 96, 156, 121, 119, 111, + 112, 176, 144, 177, 224, 116, 117, 97, 145, 152, + 153, 178, 179, 180, 236, 103, 206, 235, 263, 205, + 113, 98, 181, 253, 238, 239, 89, 218, 6, 176, + 229, 177, 228, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 92, 91, 159, 93, 158, + 181, 166, 246, 140, 149, 125, 6, 74, 75, 155, + 78, 76, 77, 124, 123, 160, 42, 43, 187, 44, + 146, 89, 151, 85, 74, 75, 84, 78, 76, 77, + 118, 169, 147, 170, 168, 93, 94, 182, 183, 265, + 92, 91, 95, 93, 189, 49, 172, 42, 43, 72, + 73, 79, 80, 81, 82, 83, 191, 81, 82, 83, + 271, 200, 201, 202, 194, 164, 165, 204, 79, 80, + 81, 82, 83, 213, 211, 214, 88, 215, 216, 210, + 210, 217, 208, 78, 188, 195, 89, 138, 74, 75, + 3, 78, 76, 77, 220, 110, 89, 103, 24, 222, + 13, 223, 140, 23, 221, 92, 91, 230, 93, 13, + 232, 185, 186, 258, 259, 92, 91, 237, 93, 79, + 80, 81, 82, 83, 79, 80, 81, 82, 83, 9, + 72, 73, 79, 80, 81, 82, 83, 247, 219, 175, + 249, 250, 199, 86, 248, 198, 194, 46, 100, 163, + 254, 257, 260, 261, 256, 240, 154, 120, 262, 255, + 210, 192, 190, 141, 264, 203, 7, 195, 8, 266, + 267, 4, 78, 76, 77, 270, 2, 1, 0, 273, + 274, 74, 75, 275, 78, 76, 77, 0, 0, 279, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 105, 106, 79, 80, 81, 82, 83, 0, 42, + 43, 0, 0, 72, 73, 79, 80, 81, 82, 83, + 0, 0, 16, 0, 15, 36, 20, 21, 22, 32, + 0, 104, 0, 0, 33, 207, 34, 35, 38, 40, + 39, 41, 18, 19, 27, 30, 42, 43, 0, 0, + 0, 0, 0, 0, 78, 0, 77, 28, 29, 0, + 0, 0, 17, 0, 0, 26, 0, 150, 37, 0, + 148, 25, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 105, 106, 79, 80, 81, 82, 83, + 0, 42, 43, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 11, 12, 16, 0, 15, 36, 20, 21, + 22, 32, 0, 104, 0, 0, 33, 99, 34, 35, + 38, 40, 39, 41, 18, 19, 27, 30, 42, 43, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, + 29, 0, 0, 0, 17, 0, 0, 26, 0, 0, + 37, 0, 16, 25, 15, 36, 20, 21, 22, 32, + 0, 0, 0, 0, 33, 0, 34, 35, 38, 40, + 39, 41, 18, 19, 27, 30, 42, 43, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 28, 29, 0, + 0, 0, 17, 0, 0, 26, 0, 0, 37, 0, + 231, 25, 16, 0, 15, 36, 20, 21, 22, 32, + 0, 0, 0, 0, 33, 0, 34, 35, 38, 40, + 39, 41, 18, 19, 27, 30, 42, 43, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 28, 29, 0, + 0, 0, 17, 0, 0, 26, 0, 0, 37, 0, + 108, 25, 16, 0, 15, 36, 20, 21, 22, 32, + 0, 0, 0, 0, 33, 0, 34, 35, 38, 40, + 39, 41, 18, 19, 27, 30, 42, 43, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 28, 29, 0, + 0, 0, 17, 0, 0, 26, 0, 0, 37, 0, + 0, 25, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 48, 0, 0, 0, 0, 0, 0, + 0, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 48, 0, 0, 0, 171, 0, 0, + 0, 50, 36, 20, 21, 22, 32, 0, 0, 0, + 0, 33, 0, 34, 35, 38, 40, 39, 41, 18, + 19, 27, 30, 42, 43, 0, 0, 45, 0, 0, + 0, 0, 0, 0, 28, 29, 0, 0, 0, 17, + 0, 0, 26, 0, 0, 37, 0, 0, 25, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 105, 197, 74, 75, 0, 78, 76, 77, 42, 43, + 0, 0, 0, 0, 0, 0, 0, 74, 75, 0, + 78, 76, 77, 0, 74, 75, 0, 78, 76, 77, + 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 73, 79, 80, 81, 82, - 83, 74, 75, 0, 76, 77, 78, 276, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 72, 73, - 79, 80, 81, 82, 83, 74, 75, 0, 76, 77, - 78, 250, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 72, 73, 79, 80, 81, 82, - 83, 74, 75, 0, 76, 77, 78, 243, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 72, 73, - 79, 80, 81, 82, 83, 74, 75, 0, 76, 77, - 78, 212, 0, 0, 0, 0, 74, 75, 0, 76, - 77, 78, 0, 0, 72, 73, 79, 80, 81, 82, - 83, 74, 75, 0, 76, 77, 78, 167, 0, 0, - 0, 0, 74, 75, 0, 76, 77, 78, 72, 73, - 79, 80, 81, 82, 83, 0, 0, 0, 271, 72, - 73, 79, 80, 81, 82, 83, 0, 74, 75, 269, - 76, 77, 78, 0, 72, 73, 79, 80, 81, 82, - 83, 0, 0, 0, 268, 72, 73, 79, 80, 81, - 82, 83, 0, 74, 75, 234, 76, 77, 78, 0, - 74, 75, 0, 76, 77, 78, 0, 0, 0, 0, - 72, 73, 79, 80, 81, 82, 83, 0, 0, 0, - 0, 272, 0, 0, 0, 0, 0, 0, 162, 0, + 83, 0, 0, 0, 0, 278, 0, 0, 277, 72, + 73, 79, 80, 81, 82, 83, 72, 73, 79, 80, + 81, 82, 83, 0, 252, 74, 75, 0, 78, 76, + 77, 233, 74, 75, 0, 78, 76, 77, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 74, 75, 0, + 78, 76, 77, 0, 74, 75, 0, 78, 76, 77, + 0, 0, 0, 0, 0, 0, 0, 72, 73, 79, + 80, 81, 82, 83, 72, 73, 79, 80, 81, 82, + 83, 0, 161, 0, 0, 0, 0, 0, 280, 72, + 73, 79, 80, 81, 82, 83, 72, 73, 79, 80, + 81, 82, 83, 276, 74, 75, 0, 78, 76, 77, + 251, 74, 75, 0, 78, 76, 77, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 74, 75, 0, 78, + 76, 77, 0, 74, 75, 0, 78, 76, 77, 0, 0, 0, 0, 0, 0, 0, 72, 73, 79, 80, 81, 82, 83, 72, 73, 79, 80, 81, 82, 83, + 243, 74, 75, 0, 78, 76, 77, 212, 72, 73, + 79, 80, 81, 82, 83, 72, 73, 79, 80, 81, + 82, 83, 167, 0, 74, 75, 269, 78, 76, 77, + 0, 0, 0, 0, 0, 0, 74, 75, 0, 78, + 76, 77, 0, 72, 73, 79, 80, 81, 82, 83, + 0, 0, 0, 272, 268, 0, 74, 75, 0, 78, + 76, 77, 0, 0, 0, 0, 72, 73, 79, 80, + 81, 82, 83, 162, 0, 0, 0, 234, 72, 73, + 79, 80, 81, 82, 83, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 72, 73, + 79, 80, 81, 82, 83, } var yyPact = [...]int16{ - 176, -1000, -1000, -46, -1000, 384, 46, 618, -1000, 973, - -1000, 532, 201, 133, 109, 107, 142, 90, -1000, -1000, - -1000, -1000, -1000, -29, -1000, 355, 482, -1000, 644, 644, - 98, -1000, 532, 532, 644, 644, 131, 532, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -16, -1000, 44, 43, - 42, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 170, -1000, -1000, -40, 401, 52, 634, -1000, -1000, -1000, + 267, 79, 76, 549, 152, 96, 103, 69, -1000, -1000, + -1000, -1000, -1000, 2, -1000, 364, 499, -1000, 656, 656, + 100, -1000, 549, 549, 656, 656, 90, 549, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -26, -1000, 46, 45, + 37, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 532, 532, 532, 532, 532, 532, 532, 532, - 532, 532, 532, 532, -1000, 973, -6, -1000, -1000, -1000, - 90, 299, 60, 166, -46, 5, -1000, -1000, 532, -1000, - -20, -1000, 39, 36, 532, -1000, -1000, -1000, -1000, 750, - 532, 238, 238, -1000, 1006, 82, 181, 127, -1000, 887, - 115, -1000, 585, 34, 34, 34, 973, 557, 557, 80, - 291, 376, 139, 87, 87, -1000, -1000, -1000, 100, -1000, - -1000, -6, 697, -1000, -1000, -1000, 63, 532, 532, 152, - 38, -1000, 532, 152, -2, 973, -1000, 270, 644, 644, - 861, -1000, 532, -1000, 532, -6, -6, -1000, -1000, -1000, - 532, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 4, -1000, -1000, 532, -6, 37, -1000, -22, -1000, - 35, 33, 532, -1000, -1000, 432, 170, 973, -46, -1000, - -1000, -1000, 948, -3, -1000, -1000, 532, -1000, -1000, 15, - 238, 15, 28, 973, -1000, -34, -40, 837, -1000, -24, - -1000, 973, -1000, -1000, -6, -1000, 697, -6, -6, 811, - -1000, 151, -1000, -15, -1000, 11, 152, 973, 644, 644, - 89, 532, 532, -1000, -1000, 34, -1000, -1000, -1000, -1000, - -10, -1000, -1000, 532, -1000, 238, 15, 85, 532, 532, - 937, 922, -1000, -6, 911, -1000, 999, 973, 532, 532, - -1000, -1000, 532, 787, 733, 973, -1000, -1000, 532, 757, + -1000, -1000, 549, 549, 549, 549, 549, 549, 549, 549, + 549, 549, 549, 549, 163, -40, -1000, 267, -14, -1000, + -1000, -1000, 69, 309, 66, -9, -1000, -1000, 549, -1000, + -27, -1000, 31, 29, 549, -1000, -1000, -1000, -1000, 811, + 549, 32, 32, -1000, 1002, 129, 142, 77, -1000, 912, + 84, -1000, 604, 34, 34, 34, 267, 110, 110, 255, + 347, 166, 161, 97, 97, -1000, -1000, -1000, 172, 51, + -1000, 128, -1000, -1000, -14, 711, -1000, -1000, -1000, 174, + 549, 549, 549, 172, -1, 267, -1000, 272, 656, 656, + 897, -1000, 549, -1000, 549, -14, -14, -1000, -1000, -1000, + 549, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 6, -1000, -1000, -40, -1000, -1000, -1000, 549, -14, + -17, -1000, -32, -1000, 14, 12, 549, -1000, -1000, 449, + 760, 267, 970, -3, -1000, -1000, 549, -1000, -1000, 18, + 32, 18, 7, 267, -1000, -31, -33, 890, -1000, -29, + -1000, 35, 267, -1000, -1000, -14, -1000, 711, -14, -14, + 840, -1000, 753, -1000, -1000, 5, 172, 267, 656, 656, + 181, 549, 549, -1000, -1000, 34, -1000, -1000, -1000, -1000, + -1000, 0, -1000, 549, -1000, 32, 18, 105, 549, 549, + 947, 919, -1000, -14, 93, -1000, 982, 267, 549, 549, + -1000, -1000, 549, 833, 738, 267, -1000, -1000, 549, 818, -1000, } var yyPgo = [...]int16{ - 0, 266, 264, 263, 261, 258, 11, 194, 227, 253, - 0, 252, 1, 251, 247, 5, 10, 18, 246, 17, - 241, 238, 228, 224, 216, 8, 4, 2, 9, 214, - 14, 213, 211, 3, 209, 197, 12, 7, + 0, 267, 266, 261, 258, 9, 256, 219, 185, 255, + 0, 253, 1, 252, 251, 6, 10, 29, 247, 17, + 246, 245, 241, 239, 238, 14, 4, 2, 7, 237, + 13, 229, 228, 3, 193, 188, 12, 8, } var yyR1 = [...]int8{ @@ -335,8 +335,8 @@ var yyR1 = [...]int8{ } var yyR2 = [...]int8{ - 0, 2, 0, 3, 2, 2, 0, 2, 6, 4, - 0, 1, 0, 2, 5, 8, 1, 3, 1, 1, + 0, 3, 0, 3, 0, 2, 6, 4, 0, 1, + 1, 1, 0, 2, 5, 8, 1, 3, 1, 1, 2, 3, 5, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 3, 1, 3, 3, 1, 3, 1, 3, 3, 3, 5, 1, 1, @@ -354,64 +354,64 @@ var yyR2 = [...]int8{ } var yyChk = [...]int16{ - -1000, -1, -2, 10, -3, -4, -28, 62, -7, -10, - -5, -8, -16, 15, 11, 12, 13, 54, 40, 24, - 17, 18, 19, -34, -35, 62, 56, 25, 49, 50, - 26, -17, 31, 36, 38, 39, 16, 59, 20, 22, - 21, 23, 27, 28, 57, 63, -29, -30, 20, -36, - 27, 7, 8, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 47, 48, 4, 5, 7, 8, 9, 49, - 50, 51, 52, 53, -7, -10, 14, 24, -19, 55, - 54, 56, 21, 27, 27, 20, -19, -17, 59, 63, - -24, -25, -37, -17, 59, 20, 21, -36, 61, -10, - -8, -16, -16, -17, -10, -10, -16, -16, 21, -10, - -18, 63, 48, 58, 58, 58, -10, -10, -10, -10, - -10, -10, -10, -10, -10, -10, -10, -10, -11, -12, - 21, 56, 62, -19, -17, 61, -10, 58, 47, 14, - -6, -28, 58, 59, -20, -10, 63, 48, 58, 58, - -10, 61, 32, -23, 37, 14, 14, 60, 30, 27, - 29, 63, -30, -27, -28, -31, 25, 27, 17, 18, - 19, 56, -27, -27, 47, 6, -13, -12, -14, -15, - -37, -17, 59, 21, 61, 58, -10, -10, -33, 20, - 21, 57, -10, -9, -33, 60, 57, 63, -25, -26, + -1000, -1, -2, 10, -3, -28, 62, -6, -4, -7, + -10, 11, 12, -8, -16, 15, 13, 53, 33, 34, + 17, 18, 19, -34, -35, 62, 56, 35, 48, 49, + 36, -17, 20, 25, 27, 28, 16, 59, 29, 31, + 30, 32, 37, 38, 57, 63, -29, -30, 29, -36, + 37, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 46, 47, 4, 5, 8, 9, 7, 48, + 49, 50, 51, 52, 37, 37, -7, -10, 14, 34, + -19, 54, 53, 56, 30, 29, -19, -17, 59, 63, + -24, -25, -37, -17, 59, 29, 30, -36, 61, -10, + -8, -16, -16, -17, -10, -10, -16, -16, 30, -10, + -18, 63, 47, 58, 58, 58, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, 14, -5, + -28, -11, -12, 30, 56, 62, -19, -17, 61, -10, + 58, 46, 58, 59, -20, -10, 63, 47, 58, 58, + -10, 61, 21, -23, 26, 14, 14, 60, 40, 37, + 39, 63, -30, -27, -28, -31, 35, 37, 17, 18, + 19, 56, -27, -27, -33, 29, 30, 57, 46, 6, + -13, -12, -14, -15, -37, -17, 59, 30, 61, 58, + -10, -10, -10, -9, -33, 60, 57, 63, -25, -26, -16, -26, 60, -10, -10, -12, -12, -10, 61, -32, - -27, -10, -12, 61, 48, 63, 48, 58, 58, -10, - 61, -10, 61, -6, 57, 60, 57, -10, 47, 58, - -21, 59, 59, 60, 61, 48, -12, -15, -12, -12, - 60, 61, 57, 58, -33, -16, -26, -22, 33, 34, - -10, -10, -27, 58, -10, 35, -10, -10, 57, 57, - -12, 57, 32, -10, -10, -10, 60, 60, 57, -10, + -27, -5, -10, -12, 61, 47, 63, 47, 58, 58, + -10, 61, -10, 61, 57, 60, 57, -10, 46, 58, + -21, 59, 59, 60, 61, 47, 57, -12, -15, -12, + -12, 60, 61, 58, -33, -16, -26, -22, 22, 23, + -10, -10, -27, 58, -10, 24, -10, -10, 57, 57, + -12, 57, 21, -10, -10, -10, 60, 60, 57, -10, 60, } var yyDef = [...]int16{ - 2, -2, 6, 0, 1, 12, 0, 0, 4, 5, - 7, 12, 35, 0, 0, 0, 0, 49, 50, 51, + 2, -2, 4, 0, 12, 0, 0, 1, 5, 10, + 11, 0, 0, 12, 35, 0, 0, 49, 50, 51, 54, 55, 56, 57, 59, 0, 0, 65, 0, 0, 68, 70, 0, 0, 0, 0, 0, 0, 88, 89, 90, 91, 83, 85, 3, 124, 0, 127, 0, 0, 0, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 13, 20, 0, 78, 79, 80, - 0, 0, 0, 0, 10, 0, 52, 53, 0, 60, + 0, 0, 0, 0, 0, 8, 13, 20, 0, 78, + 79, 80, 0, 0, 0, 0, 52, 53, 0, 60, 0, 105, 110, 111, 0, 112, 113, 114, 63, 0, 0, 66, 67, 69, 0, 103, 0, 0, 76, 0, 0, 125, 0, 0, 0, 0, 21, 24, 25, -2, - 27, 28, -2, 30, 31, 32, 33, 34, 0, 36, - 38, 0, 0, 81, 82, 92, 0, 0, 0, 0, - 0, 11, 0, 0, 0, 97, 61, 0, 0, 0, + 27, 28, -2, 30, 31, 32, 33, 34, 0, 0, + 9, 0, 36, 38, 0, 0, 81, 82, 92, 0, + 0, 0, 0, 0, 0, 97, 61, 0, 0, 0, 0, 64, 0, 72, 0, 0, 0, 77, 84, 86, 0, 126, 128, 129, 117, 118, 119, 120, 121, 122, - 123, 0, 130, 131, 0, 0, 0, 41, 0, 43, - 0, 0, 0, -2, 93, 0, 0, 23, 10, 18, - 19, 9, 0, 0, 16, 58, 0, 62, 106, 107, + 123, 0, 130, 131, 8, 18, 19, 7, 0, 0, + 0, 41, 0, 43, 0, 0, 0, -2, 93, 0, + 0, 23, 0, 0, 16, 58, 0, 62, 106, 107, 115, 108, 0, 99, 104, 0, 0, 0, 132, 0, - 134, 22, 37, 39, 0, 40, 0, 0, 0, 0, - 94, 0, 95, 0, 14, 0, 0, 98, 0, 0, - 101, 0, 0, 87, 133, 0, 42, 44, 45, 46, - 0, 96, 8, 0, 17, 116, 109, 0, 0, 0, + 134, 0, 22, 37, 39, 0, 40, 0, 0, 0, + 0, 94, 0, 95, 14, 0, 0, 98, 0, 0, + 101, 0, 0, 87, 133, 0, 6, 42, 44, 45, + 46, 0, 96, 0, 17, 116, 109, 0, 0, 0, 0, 0, 135, 0, 0, 71, 0, 102, 0, 0, 47, 15, 0, 0, 0, 100, 73, 74, 0, 0, 75, @@ -421,16 +421,16 @@ var yyTok1 = [...]int8{ 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 53, 3, 3, - 59, 60, 51, 49, 48, 50, 54, 52, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 52, 3, 3, + 59, 60, 50, 48, 47, 49, 53, 51, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 58, 57, - 3, 3, 3, 55, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 54, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 56, 3, 61, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 62, 47, 63, + 3, 3, 3, 62, 46, 63, } var yyTok2 = [...]int8{ @@ -438,7 +438,7 @@ var yyTok2 = [...]int8{ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, + 42, 43, 44, 45, 55, } var yyTok3 = [...]int8{ @@ -783,324 +783,303 @@ yydefault: switch yynt { case 1: - yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:59 + yyDollar = yyS[yypt-3 : yypt+1] +//line parser.go.y:58 { - if yyDollar[1].value != nil { - yyDollar[2].value.(*Query).Meta = yyDollar[1].value.(*ConstObject) - } - yylex.(*lexer).result = yyDollar[2].value.(*Query) + query := yyDollar[3].value.(*Query) + query.Meta = yyDollar[1].value.(*ConstObject) + query.Imports = yyDollar[2].value.([]*Import) + yylex.(*lexer).result = query } case 2: yyDollar = yyS[yypt-0 : yypt+1] -//line parser.go.y:66 +//line parser.go.y:67 { - yyVAL.value = nil + yyVAL.value = (*ConstObject)(nil) } case 3: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:70 +//line parser.go.y:71 { yyVAL.value = yyDollar[2].value } case 4: - yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:76 - { - yyVAL.value = &Query{Imports: yyDollar[1].value.([]*Import), FuncDefs: reverseFuncDef(yyDollar[2].value.([]*FuncDef)), Term: &Term{Type: TermTypeIdentity}} - } - case 5: - yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:80 - { - if yyDollar[1].value != nil { - yyDollar[2].value.(*Query).Imports = yyDollar[1].value.([]*Import) - } - yyVAL.value = yyDollar[2].value - } - case 6: yyDollar = yyS[yypt-0 : yypt+1] -//line parser.go.y:87 +//line parser.go.y:77 { yyVAL.value = []*Import(nil) } - case 7: + case 5: yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:91 +//line parser.go.y:81 { yyVAL.value = append(yyDollar[1].value.([]*Import), yyDollar[2].value.(*Import)) } - case 8: + case 6: yyDollar = yyS[yypt-6 : yypt+1] -//line parser.go.y:97 +//line parser.go.y:87 { yyVAL.value = &Import{ImportPath: yyDollar[2].token, ImportAlias: yyDollar[4].token, Meta: yyDollar[5].value.(*ConstObject)} } - case 9: + case 7: yyDollar = yyS[yypt-4 : yypt+1] -//line parser.go.y:101 +//line parser.go.y:91 { yyVAL.value = &Import{IncludePath: yyDollar[2].token, Meta: yyDollar[3].value.(*ConstObject)} } - case 10: + case 8: yyDollar = yyS[yypt-0 : yypt+1] -//line parser.go.y:107 +//line parser.go.y:97 { yyVAL.value = (*ConstObject)(nil) } - case 11: + case 10: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:110 +//line parser.go.y:104 { + yyVAL.value = &Query{FuncDefs: reverseFuncDef(yyDollar[1].value.([]*FuncDef)), Term: &Term{Type: TermTypeIdentity}} } case 12: yyDollar = yyS[yypt-0 : yypt+1] -//line parser.go.y:114 +//line parser.go.y:111 { yyVAL.value = []*FuncDef(nil) } case 13: yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:118 +//line parser.go.y:115 { yyVAL.value = append(yyDollar[2].value.([]*FuncDef), yyDollar[1].value.(*FuncDef)) } case 14: yyDollar = yyS[yypt-5 : yypt+1] -//line parser.go.y:124 +//line parser.go.y:121 { yyVAL.value = &FuncDef{Name: yyDollar[2].token, Body: yyDollar[4].value.(*Query)} } case 15: yyDollar = yyS[yypt-8 : yypt+1] -//line parser.go.y:128 +//line parser.go.y:125 { yyVAL.value = &FuncDef{yyDollar[2].token, yyDollar[4].value.([]string), yyDollar[7].value.(*Query)} } case 16: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:134 +//line parser.go.y:131 { yyVAL.value = []string{yyDollar[1].token} } case 17: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:138 +//line parser.go.y:135 { yyVAL.value = append(yyDollar[1].value.([]string), yyDollar[3].token) } - case 18: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:143 - { - } - case 19: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:144 - { - } case 20: yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:148 +//line parser.go.y:145 { - yyDollar[2].value.(*Query).FuncDefs = prependFuncDef(yyDollar[2].value.(*Query).FuncDefs, yyDollar[1].value.(*FuncDef)) - yyVAL.value = yyDollar[2].value + query := yyDollar[2].value.(*Query) + query.FuncDefs = prependFuncDef(query.FuncDefs, yyDollar[1].value.(*FuncDef)) + yyVAL.value = query } case 21: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:153 +//line parser.go.y:151 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpPipe, Right: yyDollar[3].value.(*Query)} } case 22: yyDollar = yyS[yypt-5 : yypt+1] -//line parser.go.y:157 +//line parser.go.y:155 { - yyDollar[1].value.(*Term).SuffixList = append(yyDollar[1].value.(*Term).SuffixList, &Suffix{Bind: &Bind{yyDollar[3].value.([]*Pattern), yyDollar[5].value.(*Query)}}) - yyVAL.value = &Query{Term: yyDollar[1].value.(*Term)} + term := yyDollar[1].value.(*Term) + term.SuffixList = append(term.SuffixList, &Suffix{Bind: &Bind{yyDollar[3].value.([]*Pattern), yyDollar[5].value.(*Query)}}) + yyVAL.value = &Query{Term: term} } case 23: yyDollar = yyS[yypt-4 : yypt+1] -//line parser.go.y:162 +//line parser.go.y:161 { yyVAL.value = &Query{Term: &Term{Type: TermTypeLabel, Label: &Label{yyDollar[2].token, yyDollar[4].value.(*Query)}}} } case 24: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:166 +//line parser.go.y:165 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpComma, Right: yyDollar[3].value.(*Query)} } case 25: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:170 +//line parser.go.y:169 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: yyDollar[2].operator, Right: yyDollar[3].value.(*Query)} } case 26: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:174 +//line parser.go.y:173 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: yyDollar[2].operator, Right: yyDollar[3].value.(*Query)} } case 27: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:178 +//line parser.go.y:177 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpOr, Right: yyDollar[3].value.(*Query)} } case 28: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:182 +//line parser.go.y:181 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpAnd, Right: yyDollar[3].value.(*Query)} } case 29: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:186 +//line parser.go.y:185 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: yyDollar[2].operator, Right: yyDollar[3].value.(*Query)} } case 30: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:190 +//line parser.go.y:189 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpAdd, Right: yyDollar[3].value.(*Query)} } case 31: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:194 +//line parser.go.y:193 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpSub, Right: yyDollar[3].value.(*Query)} } case 32: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:198 +//line parser.go.y:197 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpMul, Right: yyDollar[3].value.(*Query)} } case 33: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:202 +//line parser.go.y:201 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpDiv, Right: yyDollar[3].value.(*Query)} } case 34: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:206 +//line parser.go.y:205 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpMod, Right: yyDollar[3].value.(*Query)} } case 35: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:210 +//line parser.go.y:209 { yyVAL.value = &Query{Term: yyDollar[1].value.(*Term)} } case 36: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:216 +//line parser.go.y:215 { yyVAL.value = []*Pattern{yyDollar[1].value.(*Pattern)} } case 37: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:220 +//line parser.go.y:219 { yyVAL.value = append(yyDollar[1].value.([]*Pattern), yyDollar[3].value.(*Pattern)) } case 38: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:226 +//line parser.go.y:225 { yyVAL.value = &Pattern{Name: yyDollar[1].token} } case 39: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:230 +//line parser.go.y:229 { yyVAL.value = &Pattern{Array: yyDollar[2].value.([]*Pattern)} } case 40: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:234 +//line parser.go.y:233 { yyVAL.value = &Pattern{Object: yyDollar[2].value.([]*PatternObject)} } case 41: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:240 +//line parser.go.y:239 { yyVAL.value = []*Pattern{yyDollar[1].value.(*Pattern)} } case 42: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:244 +//line parser.go.y:243 { yyVAL.value = append(yyDollar[1].value.([]*Pattern), yyDollar[3].value.(*Pattern)) } case 43: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:250 +//line parser.go.y:249 { yyVAL.value = []*PatternObject{yyDollar[1].value.(*PatternObject)} } case 44: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:254 +//line parser.go.y:253 { yyVAL.value = append(yyDollar[1].value.([]*PatternObject), yyDollar[3].value.(*PatternObject)) } case 45: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:260 +//line parser.go.y:259 { yyVAL.value = &PatternObject{Key: yyDollar[1].token, Val: yyDollar[3].value.(*Pattern)} } case 46: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:264 +//line parser.go.y:263 { yyVAL.value = &PatternObject{KeyString: yyDollar[1].value.(*String), Val: yyDollar[3].value.(*Pattern)} } case 47: yyDollar = yyS[yypt-5 : yypt+1] -//line parser.go.y:268 +//line parser.go.y:267 { yyVAL.value = &PatternObject{KeyQuery: yyDollar[2].value.(*Query), Val: yyDollar[5].value.(*Pattern)} } case 48: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:272 +//line parser.go.y:271 { yyVAL.value = &PatternObject{Key: yyDollar[1].token} } case 49: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:278 +//line parser.go.y:277 { yyVAL.value = &Term{Type: TermTypeIdentity} } case 50: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:282 +//line parser.go.y:281 { yyVAL.value = &Term{Type: TermTypeRecurse} } case 51: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:286 +//line parser.go.y:285 { yyVAL.value = &Term{Type: TermTypeIndex, Index: &Index{Name: yyDollar[1].token}} } case 52: yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:290 +//line parser.go.y:289 { - if yyDollar[2].value.(*Suffix).Iter { - yyVAL.value = &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{yyDollar[2].value.(*Suffix)}} + suffix := yyDollar[2].value.(*Suffix) + if suffix.Iter { + yyVAL.value = &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{suffix}} } else { - yyVAL.value = &Term{Type: TermTypeIndex, Index: yyDollar[2].value.(*Suffix).Index} + yyVAL.value = &Term{Type: TermTypeIndex, Index: suffix.Index} } } case 53: @@ -1314,26 +1293,6 @@ yydefault: yylex.(*lexer).inString = true yyVAL.value = append(yyDollar[1].value.([]*Query), &Query{Term: &Term{Type: TermTypeQuery, Query: yyDollar[3].value.(*Query)}}) } - case 88: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:444 - { - } - case 89: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:445 - { - } - case 90: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:448 - { - } - case 91: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:449 - { - } case 92: yyDollar = yyS[yypt-2 : yypt+1] //line parser.go.y:453 @@ -1454,21 +1413,6 @@ yydefault: { yyVAL.value = &ObjectKeyVal{KeyString: yyDollar[1].value.(*String)} } - case 112: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:546 - { - } - case 113: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:547 - { - } - case 114: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:548 - { - } case 115: yyDollar = yyS[yypt-1 : yypt+1] //line parser.go.y:552 @@ -1595,111 +1539,6 @@ yydefault: { yyVAL.value = append(yyDollar[1].value.([]*ConstTerm), yyDollar[3].value.(*ConstTerm)) } - case 136: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:649 - { - } - case 137: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:650 - { - } - case 138: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:651 - { - } - case 139: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:652 - { - } - case 140: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:653 - { - } - case 141: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:654 - { - } - case 142: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:655 - { - } - case 143: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:656 - { - } - case 144: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:657 - { - } - case 145: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:658 - { - } - case 146: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:659 - { - } - case 147: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:660 - { - } - case 148: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:661 - { - } - case 149: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:662 - { - } - case 150: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:663 - { - } - case 151: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:664 - { - } - case 152: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:665 - { - } - case 153: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:666 - { - } - case 154: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:667 - { - } - case 155: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:668 - { - } - case 156: - yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:669 - { - } } goto yystack /* stack new state and value */ } diff --git a/parser.go.y b/parser.go.y index e100a842..7354c645 100644 --- a/parser.go.y +++ b/parser.go.y @@ -22,22 +22,21 @@ func prependFuncDef(xs []*FuncDef, x *FuncDef) []*FuncDef { operator Operator } -%type program moduleheader programbody imports import metaopt funcdefs funcdef funcdefargs query +%type program header imports import meta body funcdefs funcdef funcargs query %type bindpatterns pattern arraypatterns objectpatterns objectpattern %type term string stringparts suffix args ifelifs ifelse trycatch %type objectkeyvals objectkeyval objectval %type constterm constobject constobjectkeyvals constobjectkeyval constarray constarrayelems %type tokIdentVariable tokIdentModuleIdent tokVariableModuleVariable tokKeyword objectkey -%token tokAltOp tokUpdateOp tokDestAltOp tokOrOp tokAndOp tokCompareOp -%token tokModule tokImport tokInclude tokDef tokAs tokLabel tokBreak +%token tokAltOp tokUpdateOp tokDestAltOp tokCompareOp +%token tokOrOp tokAndOp tokModule tokImport tokInclude tokDef tokAs tokLabel tokBreak %token tokNull tokTrue tokFalse -%token tokIdent tokVariable tokModuleIdent tokModuleVariable -%token tokIndex tokNumber tokFormat -%token tokString tokStringStart tokStringQuery tokStringEnd %token tokIf tokThen tokElif tokElse tokEnd %token tokTry tokCatch tokReduce tokForeach -%token tokRecurse tokFuncDefPost tokTermPost tokEmptyCatch -%token tokInvalid tokInvalidEscapeSequence tokUnterminatedString +%token tokIdent tokVariable tokModuleIdent tokModuleVariable +%token tokRecurse tokIndex tokNumber tokFormat +%token tokString tokStringStart tokStringQuery tokStringEnd +%token tokInvalid tokInvalidEscapeSequence tokUnterminatedString %nonassoc tokFuncDefPost tokTermPost %right '|' @@ -55,33 +54,24 @@ func prependFuncDef(xs []*FuncDef, x *FuncDef) []*FuncDef { %% program - : moduleheader programbody + : header imports body { - if $1 != nil { $2.(*Query).Meta = $1.(*ConstObject) } - yylex.(*lexer).result = $2.(*Query) + query := $3.(*Query) + query.Meta = $1.(*ConstObject) + query.Imports = $2.([]*Import) + yylex.(*lexer).result = query } -moduleheader +header : { - $$ = nil + $$ = (*ConstObject)(nil) } | tokModule constobject ';' { $$ = $2; } -programbody - : imports funcdefs - { - $$ = &Query{Imports: $1.([]*Import), FuncDefs: reverseFuncDef($2.([]*FuncDef)), Term: &Term{Type: TermTypeIdentity}} - } - | imports query - { - if $1 != nil { $2.(*Query).Imports = $1.([]*Import) } - $$ = $2 - } - imports : { @@ -93,21 +83,28 @@ imports } import - : tokImport tokString tokAs tokIdentVariable metaopt ';' + : tokImport tokString tokAs tokIdentVariable meta ';' { $$ = &Import{ImportPath: $2, ImportAlias: $4, Meta: $5.(*ConstObject)} } - | tokInclude tokString metaopt ';' + | tokInclude tokString meta ';' { $$ = &Import{IncludePath: $2, Meta: $3.(*ConstObject)} } -metaopt +meta : { $$ = (*ConstObject)(nil) } - | constobject {} + | constobject + +body + : funcdefs + { + $$ = &Query{FuncDefs: reverseFuncDef($1.([]*FuncDef)), Term: &Term{Type: TermTypeIdentity}} + } + | query funcdefs : @@ -124,30 +121,31 @@ funcdef { $$ = &FuncDef{Name: $2, Body: $4.(*Query)} } - | tokDef tokIdent '(' funcdefargs ')' ':' query ';' + | tokDef tokIdent '(' funcargs ')' ':' query ';' { $$ = &FuncDef{$2, $4.([]string), $7.(*Query)} } -funcdefargs +funcargs : tokIdentVariable { $$ = []string{$1} } - | funcdefargs ';' tokIdentVariable + | funcargs ';' tokIdentVariable { $$ = append($1.([]string), $3) } tokIdentVariable - : tokIdent {} - | tokVariable {} + : tokIdent + | tokVariable query : funcdef query %prec tokFuncDefPost { - $2.(*Query).FuncDefs = prependFuncDef($2.(*Query).FuncDefs, $1.(*FuncDef)) - $$ = $2 + query := $2.(*Query) + query.FuncDefs = prependFuncDef(query.FuncDefs, $1.(*FuncDef)) + $$ = query } | query '|' query { @@ -155,8 +153,9 @@ query } | term tokAs bindpatterns '|' query { - $1.(*Term).SuffixList = append($1.(*Term).SuffixList, &Suffix{Bind: &Bind{$3.([]*Pattern), $5.(*Query)}}) - $$ = &Query{Term: $1.(*Term)} + term := $1.(*Term) + term.SuffixList = append(term.SuffixList, &Suffix{Bind: &Bind{$3.([]*Pattern), $5.(*Query)}}) + $$ = &Query{Term: term} } | tokLabel tokVariable '|' query { @@ -288,10 +287,11 @@ term } | '.' suffix { - if $2.(*Suffix).Iter { - $$ = &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{$2.(*Suffix)}} + suffix := $2.(*Suffix) + if suffix.Iter { + $$ = &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{suffix}} } else { - $$ = &Term{Type: TermTypeIndex, Index: $2.(*Suffix).Index} + $$ = &Term{Type: TermTypeIndex, Index: suffix.Index} } } | '.' string @@ -441,12 +441,12 @@ stringparts } tokIdentModuleIdent - : tokIdent {} - | tokModuleIdent {} + : tokIdent + | tokModuleIdent tokVariableModuleVariable - : tokVariable {} - | tokModuleVariable {} + : tokVariable + | tokModuleVariable suffix : '[' ']' @@ -543,9 +543,9 @@ objectkeyval } objectkey - : tokIdent {} - | tokVariable {} - | tokKeyword {} + : tokIdent + | tokVariable + | tokKeyword objectval : term @@ -646,26 +646,26 @@ constarrayelems } tokKeyword - : tokOrOp {} - | tokAndOp {} - | tokModule {} - | tokImport {} - | tokInclude {} - | tokDef {} - | tokAs {} - | tokLabel {} - | tokBreak {} - | tokNull {} - | tokTrue {} - | tokFalse {} - | tokIf {} - | tokThen {} - | tokElif {} - | tokElse {} - | tokEnd {} - | tokTry {} - | tokCatch {} - | tokReduce {} - | tokForeach {} + : tokOrOp + | tokAndOp + | tokModule + | tokImport + | tokInclude + | tokDef + | tokAs + | tokLabel + | tokBreak + | tokNull + | tokTrue + | tokFalse + | tokIf + | tokThen + | tokElif + | tokElse + | tokEnd + | tokTry + | tokCatch + | tokReduce + | tokForeach %%