github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/pkg/logql/log/pattern/expr.y.go (about) 1 // Code generated by goyacc -p expr -o pkg/logql/log/pattern/expr.y.go pkg/logql/log/pattern/expr.y. DO NOT EDIT. 2 3 4 package pattern 5 6 import __yyfmt__ "fmt" 7 8 9 type exprSymType struct { 10 yys int 11 Expr []node 12 Node node 13 14 literal rune 15 Literals []rune 16 str string 17 token int 18 } 19 20 const IDENTIFIER = 57346 21 const LITERAL = 57347 22 const LESS_THAN = 57348 23 const MORE_THAN = 57349 24 const UNDERSCORE = 57350 25 26 var exprToknames = [...]string{ 27 "$end", 28 "error", 29 "$unk", 30 "IDENTIFIER", 31 "LITERAL", 32 "LESS_THAN", 33 "MORE_THAN", 34 "UNDERSCORE", 35 } 36 var exprStatenames = [...]string{} 37 38 const exprEofCode = 1 39 const exprErrCode = 2 40 const exprInitialStackSize = 16 41 42 43 var exprExca = [...]int{ 44 -1, 1, 45 1, -1, 46 -2, 0, 47 } 48 49 const exprPrivate = 57344 50 51 const exprLast = 8 52 53 var exprAct = [...]int{ 54 55 4, 6, 8, 3, 5, 2, 7, 1, 56 } 57 var exprPact = [...]int{ 58 59 -4, -1000, -4, -1000, -1000, -3, -1000, -1000, -1000, 60 } 61 var exprPgo = [...]int{ 62 63 0, 7, 5, 3, 4, 64 } 65 var exprR1 = [...]int{ 66 67 0, 1, 2, 2, 3, 3, 4, 4, 68 } 69 var exprR2 = [...]int{ 70 71 0, 1, 1, 2, 1, 1, 1, 2, 72 } 73 var exprChk = [...]int{ 74 75 -1000, -1, -2, -3, 4, -4, 5, -3, 5, 76 } 77 var exprDef = [...]int{ 78 79 0, -2, 1, 2, 4, 5, 6, 3, 7, 80 } 81 var exprTok1 = [...]int{ 82 83 1, 84 } 85 var exprTok2 = [...]int{ 86 87 2, 3, 4, 5, 6, 7, 8, 88 } 89 var exprTok3 = [...]int{ 90 0, 91 } 92 93 var exprErrorMessages = [...]struct { 94 state int 95 token int 96 msg string 97 }{} 98 99 100 /* parser for yacc output */ 101 102 var ( 103 exprDebug = 0 104 exprErrorVerbose = false 105 ) 106 107 type exprLexer interface { 108 Lex(lval *exprSymType) int 109 Error(s string) 110 } 111 112 type exprParser interface { 113 Parse(exprLexer) int 114 Lookahead() int 115 } 116 117 type exprParserImpl struct { 118 lval exprSymType 119 stack [exprInitialStackSize]exprSymType 120 char int 121 } 122 123 func (p *exprParserImpl) Lookahead() int { 124 return p.char 125 } 126 127 func exprNewParser() exprParser { 128 return &exprParserImpl{} 129 } 130 131 const exprFlag = -1000 132 133 func exprTokname(c int) string { 134 if c >= 1 && c-1 < len(exprToknames) { 135 if exprToknames[c-1] != "" { 136 return exprToknames[c-1] 137 } 138 } 139 return __yyfmt__.Sprintf("tok-%v", c) 140 } 141 142 func exprStatname(s int) string { 143 if s >= 0 && s < len(exprStatenames) { 144 if exprStatenames[s] != "" { 145 return exprStatenames[s] 146 } 147 } 148 return __yyfmt__.Sprintf("state-%v", s) 149 } 150 151 func exprErrorMessage(state, lookAhead int) string { 152 const TOKSTART = 4 153 154 if !exprErrorVerbose { 155 return "syntax error" 156 } 157 158 for _, e := range exprErrorMessages { 159 if e.state == state && e.token == lookAhead { 160 return "syntax error: " + e.msg 161 } 162 } 163 164 res := "syntax error: unexpected " + exprTokname(lookAhead) 165 166 // To match Bison, suggest at most four expected tokens. 167 expected := make([]int, 0, 4) 168 169 // Look for shiftable tokens. 170 base := exprPact[state] 171 for tok := TOKSTART; tok-1 < len(exprToknames); tok++ { 172 if n := base + tok; n >= 0 && n < exprLast && exprChk[exprAct[n]] == tok { 173 if len(expected) == cap(expected) { 174 return res 175 } 176 expected = append(expected, tok) 177 } 178 } 179 180 if exprDef[state] == -2 { 181 i := 0 182 for exprExca[i] != -1 || exprExca[i+1] != state { 183 i += 2 184 } 185 186 // Look for tokens that we accept or reduce. 187 for i += 2; exprExca[i] >= 0; i += 2 { 188 tok := exprExca[i] 189 if tok < TOKSTART || exprExca[i+1] == 0 { 190 continue 191 } 192 if len(expected) == cap(expected) { 193 return res 194 } 195 expected = append(expected, tok) 196 } 197 198 // If the default action is to accept or reduce, give up. 199 if exprExca[i+1] != 0 { 200 return res 201 } 202 } 203 204 for i, tok := range expected { 205 if i == 0 { 206 res += ", expecting " 207 } else { 208 res += " or " 209 } 210 res += exprTokname(tok) 211 } 212 return res 213 } 214 215 func exprlex1(lex exprLexer, lval *exprSymType) (char, token int) { 216 token = 0 217 char = lex.Lex(lval) 218 if char <= 0 { 219 token = exprTok1[0] 220 goto out 221 } 222 if char < len(exprTok1) { 223 token = exprTok1[char] 224 goto out 225 } 226 if char >= exprPrivate { 227 if char < exprPrivate+len(exprTok2) { 228 token = exprTok2[char-exprPrivate] 229 goto out 230 } 231 } 232 for i := 0; i < len(exprTok3); i += 2 { 233 token = exprTok3[i+0] 234 if token == char { 235 token = exprTok3[i+1] 236 goto out 237 } 238 } 239 240 out: 241 if token == 0 { 242 token = exprTok2[1] /* unknown char */ 243 } 244 if exprDebug >= 3 { 245 __yyfmt__.Printf("lex %s(%d)\n", exprTokname(token), uint(char)) 246 } 247 return char, token 248 } 249 250 func exprParse(exprlex exprLexer) int { 251 return exprNewParser().Parse(exprlex) 252 } 253 254 func (exprrcvr *exprParserImpl) Parse(exprlex exprLexer) int { 255 var exprn int 256 var exprVAL exprSymType 257 var exprDollar []exprSymType 258 _ = exprDollar // silence set and not used 259 exprS := exprrcvr.stack[:] 260 261 Nerrs := 0 /* number of errors */ 262 Errflag := 0 /* error recovery flag */ 263 exprstate := 0 264 exprrcvr.char = -1 265 exprtoken := -1 // exprrcvr.char translated into internal numbering 266 defer func() { 267 // Make sure we report no lookahead when not parsing. 268 exprstate = -1 269 exprrcvr.char = -1 270 exprtoken = -1 271 }() 272 exprp := -1 273 goto exprstack 274 275 ret0: 276 return 0 277 278 ret1: 279 return 1 280 281 exprstack: 282 /* put a state and value onto the stack */ 283 if exprDebug >= 4 { 284 __yyfmt__.Printf("char %v in %v\n", exprTokname(exprtoken), exprStatname(exprstate)) 285 } 286 287 exprp++ 288 if exprp >= len(exprS) { 289 nyys := make([]exprSymType, len(exprS)*2) 290 copy(nyys, exprS) 291 exprS = nyys 292 } 293 exprS[exprp] = exprVAL 294 exprS[exprp].yys = exprstate 295 296 exprnewstate: 297 exprn = exprPact[exprstate] 298 if exprn <= exprFlag { 299 goto exprdefault /* simple state */ 300 } 301 if exprrcvr.char < 0 { 302 exprrcvr.char, exprtoken = exprlex1(exprlex, &exprrcvr.lval) 303 } 304 exprn += exprtoken 305 if exprn < 0 || exprn >= exprLast { 306 goto exprdefault 307 } 308 exprn = exprAct[exprn] 309 if exprChk[exprn] == exprtoken { /* valid shift */ 310 exprrcvr.char = -1 311 exprtoken = -1 312 exprVAL = exprrcvr.lval 313 exprstate = exprn 314 if Errflag > 0 { 315 Errflag-- 316 } 317 goto exprstack 318 } 319 320 exprdefault: 321 /* default state action */ 322 exprn = exprDef[exprstate] 323 if exprn == -2 { 324 if exprrcvr.char < 0 { 325 exprrcvr.char, exprtoken = exprlex1(exprlex, &exprrcvr.lval) 326 } 327 328 /* look through exception table */ 329 xi := 0 330 for { 331 if exprExca[xi+0] == -1 && exprExca[xi+1] == exprstate { 332 break 333 } 334 xi += 2 335 } 336 for xi += 2; ; xi += 2 { 337 exprn = exprExca[xi+0] 338 if exprn < 0 || exprn == exprtoken { 339 break 340 } 341 } 342 exprn = exprExca[xi+1] 343 if exprn < 0 { 344 goto ret0 345 } 346 } 347 if exprn == 0 { 348 /* error ... attempt to resume parsing */ 349 switch Errflag { 350 case 0: /* brand new error */ 351 exprlex.Error(exprErrorMessage(exprstate, exprtoken)) 352 Nerrs++ 353 if exprDebug >= 1 { 354 __yyfmt__.Printf("%s", exprStatname(exprstate)) 355 __yyfmt__.Printf(" saw %s\n", exprTokname(exprtoken)) 356 } 357 fallthrough 358 359 case 1, 2: /* incompletely recovered error ... try again */ 360 Errflag = 3 361 362 /* find a state where "error" is a legal shift action */ 363 for exprp >= 0 { 364 exprn = exprPact[exprS[exprp].yys] + exprErrCode 365 if exprn >= 0 && exprn < exprLast { 366 exprstate = exprAct[exprn] /* simulate a shift of "error" */ 367 if exprChk[exprstate] == exprErrCode { 368 goto exprstack 369 } 370 } 371 372 /* the current p has no shift on "error", pop stack */ 373 if exprDebug >= 2 { 374 __yyfmt__.Printf("error recovery pops state %d\n", exprS[exprp].yys) 375 } 376 exprp-- 377 } 378 /* there is no state on the stack with an error shift ... abort */ 379 goto ret1 380 381 case 3: /* no shift yet; clobber input char */ 382 if exprDebug >= 2 { 383 __yyfmt__.Printf("error recovery discards %s\n", exprTokname(exprtoken)) 384 } 385 if exprtoken == exprEofCode { 386 goto ret1 387 } 388 exprrcvr.char = -1 389 exprtoken = -1 390 goto exprnewstate /* try again in the same state */ 391 } 392 } 393 394 /* reduction by production exprn */ 395 if exprDebug >= 2 { 396 __yyfmt__.Printf("reduce %v in:\n\t%v\n", exprn, exprStatname(exprstate)) 397 } 398 399 exprnt := exprn 400 exprpt := exprp 401 _ = exprpt // guard against "declared and not used" 402 403 exprp -= exprR2[exprn] 404 // exprp is now the index of $0. Perform the default action. Iff the 405 // reduced production is ε, $1 is possibly out of range. 406 if exprp+1 >= len(exprS) { 407 nyys := make([]exprSymType, len(exprS)*2) 408 copy(nyys, exprS) 409 exprS = nyys 410 } 411 exprVAL = exprS[exprp+1] 412 413 /* consult goto table to find next state */ 414 exprn = exprR1[exprn] 415 exprg := exprPgo[exprn] 416 exprj := exprg + exprS[exprp].yys + 1 417 418 if exprj >= exprLast { 419 exprstate = exprAct[exprg] 420 } else { 421 exprstate = exprAct[exprj] 422 if exprChk[exprstate] != -exprn { 423 exprstate = exprAct[exprg] 424 } 425 } 426 // dummy call; replaced with literal code 427 switch exprnt { 428 429 case 1: 430 exprDollar = exprS[exprpt-1 : exprpt+1] 431 { 432 exprlex.(*lexer).expr = exprDollar[1].Expr 433 } 434 case 2: 435 exprDollar = exprS[exprpt-1 : exprpt+1] 436 { 437 exprVAL.Expr = []node{exprDollar[1].Node} 438 } 439 case 3: 440 exprDollar = exprS[exprpt-2 : exprpt+1] 441 { 442 exprVAL.Expr = append(exprDollar[1].Expr, exprDollar[2].Node) 443 } 444 case 4: 445 exprDollar = exprS[exprpt-1 : exprpt+1] 446 { 447 exprVAL.Node = capture(exprDollar[1].str) 448 } 449 case 5: 450 exprDollar = exprS[exprpt-1 : exprpt+1] 451 { 452 exprVAL.Node = runesToLiterals(exprDollar[1].Literals) 453 } 454 case 6: 455 exprDollar = exprS[exprpt-1 : exprpt+1] 456 { 457 exprVAL.Literals = []rune{exprDollar[1].literal} 458 } 459 case 7: 460 exprDollar = exprS[exprpt-2 : exprpt+1] 461 { 462 exprVAL.Literals = append(exprDollar[1].Literals, exprDollar[2].literal) 463 } 464 } 465 goto exprstack /* stack new state and value */ 466 }