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  }