github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/pkg/logql/log/jsonexpr/jsonexpr.y.go (about) 1 // Code generated by goyacc -p JSONExpr -o pkg/logql/log/jsonexpr/jsonexpr.y.go pkg/logql/log/jsonexpr/jsonexpr.y. DO NOT EDIT. 2 3 //line pkg/logql/log/jsonexpr/jsonexpr.y:4 4 package jsonexpr 5 6 import __yyfmt__ "fmt" 7 8 //line pkg/logql/log/jsonexpr/jsonexpr.y:4 9 10 func setScannerData(lex interface{}, data []interface{}) { 11 lex.(*Scanner).data = data 12 } 13 14 //line pkg/logql/log/jsonexpr/jsonexpr.y:12 15 type JSONExprSymType struct { 16 yys int 17 empty struct{} 18 str string 19 field string 20 list []interface{} 21 int int 22 } 23 24 const DOT = 57346 25 const LSB = 57347 26 const RSB = 57348 27 const STRING = 57349 28 const FIELD = 57350 29 const INDEX = 57351 30 31 var JSONExprToknames = [...]string{ 32 "$end", 33 "error", 34 "$unk", 35 "DOT", 36 "LSB", 37 "RSB", 38 "STRING", 39 "FIELD", 40 "INDEX", 41 } 42 43 var JSONExprStatenames = [...]string{} 44 45 const JSONExprEofCode = 1 46 const JSONExprErrCode = 2 47 const JSONExprInitialStackSize = 16 48 49 //line yacctab:1 50 var JSONExprExca = [...]int{ 51 -1, 1, 52 1, -1, 53 -2, 0, 54 } 55 56 const JSONExprPrivate = 57344 57 58 const JSONExprLast = 19 59 60 var JSONExprAct = [...]int{ 61 3, 13, 7, 14, 6, 6, 17, 16, 10, 7, 62 4, 15, 5, 8, 1, 9, 2, 11, 12, 63 } 64 65 var JSONExprPact = [...]int{ 66 -3, -1000, 4, -1000, -1000, -1000, -1000, -6, -1000, -1000, 67 -4, 1, 0, -1000, -1000, -1000, -1000, -1000, 68 } 69 70 var JSONExprPgo = [...]int{ 71 0, 18, 12, 0, 17, 10, 16, 14, 72 } 73 74 var JSONExprR1 = [...]int{ 75 0, 7, 6, 6, 6, 6, 6, 6, 5, 2, 76 3, 4, 1, 77 } 78 79 var JSONExprR2 = [...]int{ 80 0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 81 1, 1, 1, 82 } 83 84 var JSONExprChk = [...]int{ 85 -1000, -7, -6, -3, -5, -2, 8, 5, -5, -2, 86 4, -4, -1, 7, 9, -3, 6, 6, 87 } 88 89 var JSONExprDef = [...]int{ 90 0, -2, 1, 2, 3, 4, 10, 0, 5, 6, 91 0, 0, 0, 11, 12, 7, 8, 9, 92 } 93 94 var JSONExprTok1 = [...]int{ 95 1, 96 } 97 98 var JSONExprTok2 = [...]int{ 99 2, 3, 4, 5, 6, 7, 8, 9, 100 } 101 102 var JSONExprTok3 = [...]int{ 103 0, 104 } 105 106 var JSONExprErrorMessages = [...]struct { 107 state int 108 token int 109 msg string 110 }{} 111 112 //line yaccpar:1 113 114 /* parser for yacc output */ 115 116 var ( 117 JSONExprDebug = 0 118 JSONExprErrorVerbose = false 119 ) 120 121 type JSONExprLexer interface { 122 Lex(lval *JSONExprSymType) int 123 Error(s string) 124 } 125 126 type JSONExprParser interface { 127 Parse(JSONExprLexer) int 128 Lookahead() int 129 } 130 131 type JSONExprParserImpl struct { 132 lval JSONExprSymType 133 stack [JSONExprInitialStackSize]JSONExprSymType 134 char int 135 } 136 137 func (p *JSONExprParserImpl) Lookahead() int { 138 return p.char 139 } 140 141 func JSONExprNewParser() JSONExprParser { 142 return &JSONExprParserImpl{} 143 } 144 145 const JSONExprFlag = -1000 146 147 func JSONExprTokname(c int) string { 148 if c >= 1 && c-1 < len(JSONExprToknames) { 149 if JSONExprToknames[c-1] != "" { 150 return JSONExprToknames[c-1] 151 } 152 } 153 return __yyfmt__.Sprintf("tok-%v", c) 154 } 155 156 func JSONExprStatname(s int) string { 157 if s >= 0 && s < len(JSONExprStatenames) { 158 if JSONExprStatenames[s] != "" { 159 return JSONExprStatenames[s] 160 } 161 } 162 return __yyfmt__.Sprintf("state-%v", s) 163 } 164 165 func JSONExprErrorMessage(state, lookAhead int) string { 166 const TOKSTART = 4 167 168 if !JSONExprErrorVerbose { 169 return "syntax error" 170 } 171 172 for _, e := range JSONExprErrorMessages { 173 if e.state == state && e.token == lookAhead { 174 return "syntax error: " + e.msg 175 } 176 } 177 178 res := "syntax error: unexpected " + JSONExprTokname(lookAhead) 179 180 // To match Bison, suggest at most four expected tokens. 181 expected := make([]int, 0, 4) 182 183 // Look for shiftable tokens. 184 base := JSONExprPact[state] 185 for tok := TOKSTART; tok-1 < len(JSONExprToknames); tok++ { 186 if n := base + tok; n >= 0 && n < JSONExprLast && JSONExprChk[JSONExprAct[n]] == tok { 187 if len(expected) == cap(expected) { 188 return res 189 } 190 expected = append(expected, tok) 191 } 192 } 193 194 if JSONExprDef[state] == -2 { 195 i := 0 196 for JSONExprExca[i] != -1 || JSONExprExca[i+1] != state { 197 i += 2 198 } 199 200 // Look for tokens that we accept or reduce. 201 for i += 2; JSONExprExca[i] >= 0; i += 2 { 202 tok := JSONExprExca[i] 203 if tok < TOKSTART || JSONExprExca[i+1] == 0 { 204 continue 205 } 206 if len(expected) == cap(expected) { 207 return res 208 } 209 expected = append(expected, tok) 210 } 211 212 // If the default action is to accept or reduce, give up. 213 if JSONExprExca[i+1] != 0 { 214 return res 215 } 216 } 217 218 for i, tok := range expected { 219 if i == 0 { 220 res += ", expecting " 221 } else { 222 res += " or " 223 } 224 res += JSONExprTokname(tok) 225 } 226 return res 227 } 228 229 func JSONExprlex1(lex JSONExprLexer, lval *JSONExprSymType) (char, token int) { 230 token = 0 231 char = lex.Lex(lval) 232 if char <= 0 { 233 token = JSONExprTok1[0] 234 goto out 235 } 236 if char < len(JSONExprTok1) { 237 token = JSONExprTok1[char] 238 goto out 239 } 240 if char >= JSONExprPrivate { 241 if char < JSONExprPrivate+len(JSONExprTok2) { 242 token = JSONExprTok2[char-JSONExprPrivate] 243 goto out 244 } 245 } 246 for i := 0; i < len(JSONExprTok3); i += 2 { 247 token = JSONExprTok3[i+0] 248 if token == char { 249 token = JSONExprTok3[i+1] 250 goto out 251 } 252 } 253 254 out: 255 if token == 0 { 256 token = JSONExprTok2[1] /* unknown char */ 257 } 258 if JSONExprDebug >= 3 { 259 __yyfmt__.Printf("lex %s(%d)\n", JSONExprTokname(token), uint(char)) 260 } 261 return char, token 262 } 263 264 func JSONExprParse(JSONExprlex JSONExprLexer) int { 265 return JSONExprNewParser().Parse(JSONExprlex) 266 } 267 268 func (JSONExprrcvr *JSONExprParserImpl) Parse(JSONExprlex JSONExprLexer) int { 269 var JSONExprn int 270 var JSONExprVAL JSONExprSymType 271 var JSONExprDollar []JSONExprSymType 272 _ = JSONExprDollar // silence set and not used 273 JSONExprS := JSONExprrcvr.stack[:] 274 275 Nerrs := 0 /* number of errors */ 276 Errflag := 0 /* error recovery flag */ 277 JSONExprstate := 0 278 JSONExprrcvr.char = -1 279 JSONExprtoken := -1 // JSONExprrcvr.char translated into internal numbering 280 defer func() { 281 // Make sure we report no lookahead when not parsing. 282 JSONExprstate = -1 283 JSONExprrcvr.char = -1 284 JSONExprtoken = -1 285 }() 286 JSONExprp := -1 287 goto JSONExprstack 288 289 ret0: 290 return 0 291 292 ret1: 293 return 1 294 295 JSONExprstack: 296 /* put a state and value onto the stack */ 297 if JSONExprDebug >= 4 { 298 __yyfmt__.Printf("char %v in %v\n", JSONExprTokname(JSONExprtoken), JSONExprStatname(JSONExprstate)) 299 } 300 301 JSONExprp++ 302 if JSONExprp >= len(JSONExprS) { 303 nyys := make([]JSONExprSymType, len(JSONExprS)*2) 304 copy(nyys, JSONExprS) 305 JSONExprS = nyys 306 } 307 JSONExprS[JSONExprp] = JSONExprVAL 308 JSONExprS[JSONExprp].yys = JSONExprstate 309 310 JSONExprnewstate: 311 JSONExprn = JSONExprPact[JSONExprstate] 312 if JSONExprn <= JSONExprFlag { 313 goto JSONExprdefault /* simple state */ 314 } 315 if JSONExprrcvr.char < 0 { 316 JSONExprrcvr.char, JSONExprtoken = JSONExprlex1(JSONExprlex, &JSONExprrcvr.lval) 317 } 318 JSONExprn += JSONExprtoken 319 if JSONExprn < 0 || JSONExprn >= JSONExprLast { 320 goto JSONExprdefault 321 } 322 JSONExprn = JSONExprAct[JSONExprn] 323 if JSONExprChk[JSONExprn] == JSONExprtoken { /* valid shift */ 324 JSONExprrcvr.char = -1 325 JSONExprtoken = -1 326 JSONExprVAL = JSONExprrcvr.lval 327 JSONExprstate = JSONExprn 328 if Errflag > 0 { 329 Errflag-- 330 } 331 goto JSONExprstack 332 } 333 334 JSONExprdefault: 335 /* default state action */ 336 JSONExprn = JSONExprDef[JSONExprstate] 337 if JSONExprn == -2 { 338 if JSONExprrcvr.char < 0 { 339 JSONExprrcvr.char, JSONExprtoken = JSONExprlex1(JSONExprlex, &JSONExprrcvr.lval) 340 } 341 342 /* look through exception table */ 343 xi := 0 344 for { 345 if JSONExprExca[xi+0] == -1 && JSONExprExca[xi+1] == JSONExprstate { 346 break 347 } 348 xi += 2 349 } 350 for xi += 2; ; xi += 2 { 351 JSONExprn = JSONExprExca[xi+0] 352 if JSONExprn < 0 || JSONExprn == JSONExprtoken { 353 break 354 } 355 } 356 JSONExprn = JSONExprExca[xi+1] 357 if JSONExprn < 0 { 358 goto ret0 359 } 360 } 361 if JSONExprn == 0 { 362 /* error ... attempt to resume parsing */ 363 switch Errflag { 364 case 0: /* brand new error */ 365 JSONExprlex.Error(JSONExprErrorMessage(JSONExprstate, JSONExprtoken)) 366 Nerrs++ 367 if JSONExprDebug >= 1 { 368 __yyfmt__.Printf("%s", JSONExprStatname(JSONExprstate)) 369 __yyfmt__.Printf(" saw %s\n", JSONExprTokname(JSONExprtoken)) 370 } 371 fallthrough 372 373 case 1, 2: /* incompletely recovered error ... try again */ 374 Errflag = 3 375 376 /* find a state where "error" is a legal shift action */ 377 for JSONExprp >= 0 { 378 JSONExprn = JSONExprPact[JSONExprS[JSONExprp].yys] + JSONExprErrCode 379 if JSONExprn >= 0 && JSONExprn < JSONExprLast { 380 JSONExprstate = JSONExprAct[JSONExprn] /* simulate a shift of "error" */ 381 if JSONExprChk[JSONExprstate] == JSONExprErrCode { 382 goto JSONExprstack 383 } 384 } 385 386 /* the current p has no shift on "error", pop stack */ 387 if JSONExprDebug >= 2 { 388 __yyfmt__.Printf("error recovery pops state %d\n", JSONExprS[JSONExprp].yys) 389 } 390 JSONExprp-- 391 } 392 /* there is no state on the stack with an error shift ... abort */ 393 goto ret1 394 395 case 3: /* no shift yet; clobber input char */ 396 if JSONExprDebug >= 2 { 397 __yyfmt__.Printf("error recovery discards %s\n", JSONExprTokname(JSONExprtoken)) 398 } 399 if JSONExprtoken == JSONExprEofCode { 400 goto ret1 401 } 402 JSONExprrcvr.char = -1 403 JSONExprtoken = -1 404 goto JSONExprnewstate /* try again in the same state */ 405 } 406 } 407 408 /* reduction by production JSONExprn */ 409 if JSONExprDebug >= 2 { 410 __yyfmt__.Printf("reduce %v in:\n\t%v\n", JSONExprn, JSONExprStatname(JSONExprstate)) 411 } 412 413 JSONExprnt := JSONExprn 414 JSONExprpt := JSONExprp 415 _ = JSONExprpt // guard against "declared and not used" 416 417 JSONExprp -= JSONExprR2[JSONExprn] 418 // JSONExprp is now the index of $0. Perform the default action. Iff the 419 // reduced production is ε, $1 is possibly out of range. 420 if JSONExprp+1 >= len(JSONExprS) { 421 nyys := make([]JSONExprSymType, len(JSONExprS)*2) 422 copy(nyys, JSONExprS) 423 JSONExprS = nyys 424 } 425 JSONExprVAL = JSONExprS[JSONExprp+1] 426 427 /* consult goto table to find next state */ 428 JSONExprn = JSONExprR1[JSONExprn] 429 JSONExprg := JSONExprPgo[JSONExprn] 430 JSONExprj := JSONExprg + JSONExprS[JSONExprp].yys + 1 431 432 if JSONExprj >= JSONExprLast { 433 JSONExprstate = JSONExprAct[JSONExprg] 434 } else { 435 JSONExprstate = JSONExprAct[JSONExprj] 436 if JSONExprChk[JSONExprstate] != -JSONExprn { 437 JSONExprstate = JSONExprAct[JSONExprg] 438 } 439 } 440 // dummy call; replaced with literal code 441 switch JSONExprnt { 442 443 case 1: 444 JSONExprDollar = JSONExprS[JSONExprpt-1 : JSONExprpt+1] 445 //line pkg/logql/log/jsonexpr/jsonexpr.y:32 446 { 447 setScannerData(JSONExprlex, JSONExprDollar[1].list) 448 } 449 case 2: 450 JSONExprDollar = JSONExprS[JSONExprpt-1 : JSONExprpt+1] 451 //line pkg/logql/log/jsonexpr/jsonexpr.y:35 452 { 453 JSONExprVAL.list = []interface{}{JSONExprDollar[1].str} 454 } 455 case 3: 456 JSONExprDollar = JSONExprS[JSONExprpt-1 : JSONExprpt+1] 457 //line pkg/logql/log/jsonexpr/jsonexpr.y:36 458 { 459 JSONExprVAL.list = []interface{}{JSONExprDollar[1].str} 460 } 461 case 4: 462 JSONExprDollar = JSONExprS[JSONExprpt-1 : JSONExprpt+1] 463 //line pkg/logql/log/jsonexpr/jsonexpr.y:37 464 { 465 JSONExprVAL.list = []interface{}{JSONExprDollar[1].int} 466 } 467 case 5: 468 JSONExprDollar = JSONExprS[JSONExprpt-2 : JSONExprpt+1] 469 //line pkg/logql/log/jsonexpr/jsonexpr.y:38 470 { 471 JSONExprVAL.list = append(JSONExprDollar[1].list, JSONExprDollar[2].str) 472 } 473 case 6: 474 JSONExprDollar = JSONExprS[JSONExprpt-2 : JSONExprpt+1] 475 //line pkg/logql/log/jsonexpr/jsonexpr.y:39 476 { 477 JSONExprVAL.list = append(JSONExprDollar[1].list, JSONExprDollar[2].int) 478 } 479 case 7: 480 JSONExprDollar = JSONExprS[JSONExprpt-3 : JSONExprpt+1] 481 //line pkg/logql/log/jsonexpr/jsonexpr.y:40 482 { 483 JSONExprVAL.list = append(JSONExprDollar[1].list, JSONExprDollar[3].str) 484 } 485 case 8: 486 JSONExprDollar = JSONExprS[JSONExprpt-3 : JSONExprpt+1] 487 //line pkg/logql/log/jsonexpr/jsonexpr.y:44 488 { 489 JSONExprVAL.str = JSONExprDollar[2].str 490 } 491 case 9: 492 JSONExprDollar = JSONExprS[JSONExprpt-3 : JSONExprpt+1] 493 //line pkg/logql/log/jsonexpr/jsonexpr.y:47 494 { 495 JSONExprVAL.int = JSONExprDollar[2].int 496 } 497 case 10: 498 JSONExprDollar = JSONExprS[JSONExprpt-1 : JSONExprpt+1] 499 //line pkg/logql/log/jsonexpr/jsonexpr.y:50 500 { 501 JSONExprVAL.str = JSONExprDollar[1].field 502 } 503 case 11: 504 JSONExprDollar = JSONExprS[JSONExprpt-1 : JSONExprpt+1] 505 //line pkg/logql/log/jsonexpr/jsonexpr.y:53 506 { 507 JSONExprVAL.str = JSONExprDollar[1].str 508 } 509 case 12: 510 JSONExprDollar = JSONExprS[JSONExprpt-1 : JSONExprpt+1] 511 //line pkg/logql/log/jsonexpr/jsonexpr.y:56 512 { 513 JSONExprVAL.int = JSONExprDollar[1].int 514 } 515 } 516 goto JSONExprstack /* stack new state and value */ 517 }