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  }