github.com/GuanceCloud/cliutils@v1.1.21/filter/gram_y.go (about)

     1  // Code generated by goyacc -l -o gram_y.go gram.y. DO NOT EDIT.
     2  package filter
     3  
     4  import __yyfmt__ "fmt"
     5  
     6  import (
     7  	"time"
     8  )
     9  
    10  type yySymType struct {
    11  	yys   int
    12  	node  Node
    13  	nodes []Node
    14  
    15  	item Item
    16  
    17  	strings   []string
    18  	float     float64
    19  	duration  time.Duration
    20  	timestamp time.Time
    21  }
    22  
    23  const EQ = 57346
    24  const COLON = 57347
    25  const SEMICOLON = 57348
    26  const COMMA = 57349
    27  const COMMENT = 57350
    28  const DURATION = 57351
    29  const EOF = 57352
    30  const ERROR = 57353
    31  const ID = 57354
    32  const LEFT_BRACE = 57355
    33  const LEFT_BRACKET = 57356
    34  const LEFT_PAREN = 57357
    35  const NUMBER = 57358
    36  const RIGHT_BRACE = 57359
    37  const RIGHT_BRACKET = 57360
    38  const RIGHT_PAREN = 57361
    39  const SPACE = 57362
    40  const STRING = 57363
    41  const QUOTED_STRING = 57364
    42  const NAMESPACE = 57365
    43  const DOT = 57366
    44  const operatorsStart = 57367
    45  const ADD = 57368
    46  const DIV = 57369
    47  const GTE = 57370
    48  const GT = 57371
    49  const LT = 57372
    50  const LTE = 57373
    51  const MOD = 57374
    52  const MUL = 57375
    53  const NEQ = 57376
    54  const POW = 57377
    55  const SUB = 57378
    56  const operatorsEnd = 57379
    57  const keywordsStart = 57380
    58  const AS = 57381
    59  const ASC = 57382
    60  const AUTO = 57383
    61  const BY = 57384
    62  const MATCH = 57385
    63  const NOT_MATCH = 57386
    64  const DESC = 57387
    65  const TRUE = 57388
    66  const FALSE = 57389
    67  const FILTER = 57390
    68  const IDENTIFIER = 57391
    69  const IN = 57392
    70  const NOT_IN = 57393
    71  const AND = 57394
    72  const LINK = 57395
    73  const LIMIT = 57396
    74  const SLIMIT = 57397
    75  const OR = 57398
    76  const NIL = 57399
    77  const NULL = 57400
    78  const OFFSET = 57401
    79  const SOFFSET = 57402
    80  const ORDER = 57403
    81  const RE = 57404
    82  const INT = 57405
    83  const FLOAT = 57406
    84  const POINT = 57407
    85  const TIMEZONE = 57408
    86  const WITH = 57409
    87  const keywordsEnd = 57410
    88  const startSymbolsStart = 57411
    89  const START_STMTS = 57412
    90  const START_BINARY_EXPRESSION = 57413
    91  const START_FUNC_EXPRESSION = 57414
    92  const START_WHERE_CONDITION = 57415
    93  const startSymbolsEnd = 57416
    94  
    95  var yyToknames = [...]string{
    96  	"$end",
    97  	"error",
    98  	"$unk",
    99  	"EQ",
   100  	"COLON",
   101  	"SEMICOLON",
   102  	"COMMA",
   103  	"COMMENT",
   104  	"DURATION",
   105  	"EOF",
   106  	"ERROR",
   107  	"ID",
   108  	"LEFT_BRACE",
   109  	"LEFT_BRACKET",
   110  	"LEFT_PAREN",
   111  	"NUMBER",
   112  	"RIGHT_BRACE",
   113  	"RIGHT_BRACKET",
   114  	"RIGHT_PAREN",
   115  	"SPACE",
   116  	"STRING",
   117  	"QUOTED_STRING",
   118  	"NAMESPACE",
   119  	"DOT",
   120  	"operatorsStart",
   121  	"ADD",
   122  	"DIV",
   123  	"GTE",
   124  	"GT",
   125  	"LT",
   126  	"LTE",
   127  	"MOD",
   128  	"MUL",
   129  	"NEQ",
   130  	"POW",
   131  	"SUB",
   132  	"operatorsEnd",
   133  	"keywordsStart",
   134  	"AS",
   135  	"ASC",
   136  	"AUTO",
   137  	"BY",
   138  	"MATCH",
   139  	"NOT_MATCH",
   140  	"DESC",
   141  	"TRUE",
   142  	"FALSE",
   143  	"FILTER",
   144  	"IDENTIFIER",
   145  	"IN",
   146  	"NOT_IN",
   147  	"AND",
   148  	"LINK",
   149  	"LIMIT",
   150  	"SLIMIT",
   151  	"OR",
   152  	"NIL",
   153  	"NULL",
   154  	"OFFSET",
   155  	"SOFFSET",
   156  	"ORDER",
   157  	"RE",
   158  	"INT",
   159  	"FLOAT",
   160  	"POINT",
   161  	"TIMEZONE",
   162  	"WITH",
   163  	"keywordsEnd",
   164  	"startSymbolsStart",
   165  	"START_STMTS",
   166  	"START_BINARY_EXPRESSION",
   167  	"START_FUNC_EXPRESSION",
   168  	"START_WHERE_CONDITION",
   169  	"startSymbolsEnd",
   170  }
   171  
   172  var yyStatenames = [...]string{}
   173  
   174  const yyEofCode = 1
   175  const yyErrCode = 2
   176  const yyInitialStackSize = 16
   177  
   178  var yyExca = [...]int{
   179  	-1, 1,
   180  	1, -1,
   181  	-2, 0,
   182  	-1, 11,
   183  	7, 52,
   184  	17, 52,
   185  	-2, 10,
   186  	-1, 12,
   187  	7, 53,
   188  	17, 53,
   189  	-2, 8,
   190  	-1, 20,
   191  	15, 72,
   192  	-2, 12,
   193  	-1, 21,
   194  	15, 73,
   195  	-2, 13,
   196  	-1, 107,
   197  	15, 72,
   198  	-2, 12,
   199  }
   200  
   201  const yyPrivate = 57344
   202  
   203  const yyLast = 342
   204  
   205  var yyAct = [...]int{
   206  	20, 103, 56, 13, 69, 3, 21, 23, 68, 67,
   207  	14, 122, 66, 109, 18, 34, 58, 61, 62, 63,
   208  	64, 65, 34, 101, 59, 60, 29, 123, 12, 11,
   209  	118, 68, 10, 73, 117, 72, 30, 16, 45, 46,
   210  	47, 48, 51, 52, 53, 54, 55, 56, 57, 75,
   211  	76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
   212  	86, 87, 88, 31, 49, 12, 11, 95, 95, 98,
   213  	99, 120, 107, 96, 96, 105, 2, 74, 100, 46,
   214  	108, 94, 97, 119, 53, 54, 71, 56, 70, 92,
   215  	112, 112, 112, 112, 91, 90, 113, 113, 113, 113,
   216  	111, 111, 111, 111, 114, 115, 116, 112, 89, 45,
   217  	46, 7, 124, 113, 4, 53, 54, 111, 56, 57,
   218  	121, 107, 129, 135, 105, 112, 131, 110, 110, 110,
   219  	110, 113, 8, 112, 1, 111, 26, 19, 22, 113,
   220  	24, 124, 124, 111, 110, 29, 134, 132, 15, 32,
   221  	124, 6, 130, 128, 34, 30, 124, 124, 25, 40,
   222  	42, 127, 133, 44, 17, 104, 39, 126, 125, 41,
   223  	110, 5, 102, 43, 9, 28, 33, 0, 0, 37,
   224  	38, 0, 31, 29, 0, 106, 15, 32, 0, 0,
   225  	35, 36, 34, 30, 0, 27, 0, 40, 0, 0,
   226  	0, 0, 29, 0, 39, 15, 32, 41, 0, 0,
   227  	0, 34, 30, 0, 0, 0, 40, 37, 38, 0,
   228  	31, 0, 0, 39, 0, 0, 41, 0, 35, 36,
   229  	0, 58, 0, 27, 0, 0, 37, 38, 0, 31,
   230  	0, 0, 0, 0, 0, 0, 93, 35, 36, 0,
   231  	0, 0, 27, 45, 46, 47, 48, 51, 52, 53,
   232  	54, 55, 56, 57, 29, 0, 0, 0, 32, 0,
   233  	0, 0, 0, 34, 30, 0, 0, 0, 40, 49,
   234  	0, 0, 0, 50, 0, 39, 0, 0, 41, 58,
   235  	0, 0, 0, 0, 0, 0, 0, 0, 37, 38,
   236  	58, 31, 0, 0, 0, 0, 0, 0, 0, 35,
   237  	36, 45, 46, 47, 48, 51, 52, 53, 54, 55,
   238  	56, 57, 45, 46, 47, 48, 51, 52, 53, 54,
   239  	55, 56, 57, 0, 0, 0, 0, 49, 0, 0,
   240  	0, 50,
   241  }
   242  
   243  var yyPact = [...]int{
   244  	3, 104, 98, -1000, -1000, 126, -1000, 190, 98, 156,
   245  	-1000, -1000, -1000, 285, -26, 190, -1000, -1000, -12, -15,
   246  	-16, -20, -1000, -1000, -1000, -1000, -1000, 73, 71, -1000,
   247  	-1000, 20, -1000, 17, -1000, -1000, -1000, -1000, -1000, -1000,
   248  	-1000, -1000, -1000, -1000, 190, 190, 190, 190, 190, 190,
   249  	190, 190, 190, 190, 190, 190, 190, 190, 190, 94,
   250  	81, 80, 75, 227, -1000, -1000, 14, 14, 14, 14,
   251  	1, 171, -6, -1000, -1000, 52, -33, 83, 83, 296,
   252  	12, 83, 83, -33, -33, 83, -33, 52, 83, 252,
   253  	252, 252, 252, -1000, -1000, -16, -20, -1000, -1000, -1000,
   254  	15, 11, 64, -1000, -1000, 285, 252, 7, 8, 150,
   255  	-1000, -1000, -16, -20, 149, 143, 135, -1000, -1000, -1000,
   256  	171, 134, 133, -1000, 252, -1000, -1000, -1000, -1000, -1000,
   257  	-1000, 285, 252, -1000, 105, -1000,
   258  }
   259  
   260  var yyPgo = [...]int{
   261  	0, 176, 175, 0, 174, 172, 171, 151, 37, 13,
   262  	6, 21, 3, 1, 14, 165, 20, 32, 164, 10,
   263  	158, 7, 140, 138, 137, 136, 134,
   264  }
   265  
   266  var yyR1 = [...]int{
   267  	0, 26, 26, 26, 6, 6, 12, 12, 12, 12,
   268  	12, 12, 19, 19, 10, 10, 1, 1, 21, 22,
   269  	22, 20, 20, 16, 14, 24, 24, 5, 5, 5,
   270  	5, 9, 9, 9, 8, 8, 8, 8, 8, 8,
   271  	25, 13, 13, 13, 15, 15, 7, 7, 4, 4,
   272  	4, 4, 17, 17, 11, 11, 11, 11, 11, 11,
   273  	11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
   274  	11, 11, 2, 2, 23, 23, 18, 18, 3, 3,
   275  	3,
   276  }
   277  
   278  var yyR2 = [...]int{
   279  	0, 2, 2, 1, 1, 3, 1, 1, 1, 1,
   280  	1, 1, 1, 1, 3, 3, 1, 1, 1, 1,
   281  	1, 1, 1, 3, 4, 3, 3, 3, 2, 1,
   282  	0, 3, 1, 0, 1, 1, 1, 1, 1, 1,
   283  	1, 1, 1, 3, 3, 5, 3, 0, 1, 3,
   284  	2, 0, 1, 1, 3, 3, 3, 3, 3, 3,
   285  	3, 3, 3, 3, 3, 3, 3, 3, 5, 5,
   286  	5, 5, 1, 1, 1, 2, 4, 4, 1, 1,
   287  	4,
   288  }
   289  
   290  var yyChk = [...]int{
   291  	-1000, -26, 73, 2, 10, -6, -7, 13, 6, -4,
   292  	-17, -11, -16, -12, -19, 15, -8, -18, -14, -24,
   293  	-3, -10, -23, -21, -22, -20, -25, 62, -2, 12,
   294  	22, 49, 16, -1, 21, 57, 58, 46, 47, 33,
   295  	26, 36, -7, 17, 7, 26, 27, 28, 29, 52,
   296  	56, 30, 31, 32, 33, 34, 35, 36, 4, 50,
   297  	51, 43, 44, -12, -16, -11, 24, 24, 24, 24,
   298  	15, 15, 15, 16, -17, -12, -12, -12, -12, -12,
   299  	-12, -12, -12, -12, -12, -12, -12, -12, -12, 14,
   300  	14, 14, 14, 19, -14, -3, -10, -14, -3, -3,
   301  	-21, 22, -5, -13, -15, -12, 14, -3, -21, -9,
   302  	-8, -19, -3, -10, -9, -9, -9, 19, 19, 19,
   303  	7, -9, 4, 19, 7, 18, 18, 18, 18, -13,
   304  	18, -12, 14, -8, -9, 18,
   305  }
   306  
   307  var yyDef = [...]int{
   308  	0, -2, 47, 3, 2, 1, 4, 51, 47, 0,
   309  	48, -2, -2, 0, 36, 0, 6, 7, 9, 11,
   310  	-2, -2, 34, 35, 37, 38, 39, 0, 0, 78,
   311  	79, 0, 74, 0, 18, 19, 20, 21, 22, 40,
   312  	16, 17, 5, 46, 50, 0, 0, 0, 0, 0,
   313  	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
   314  	0, 0, 0, 0, 8, 10, 0, 0, 0, 0,
   315  	0, 30, 0, 75, 49, 54, 55, 56, 57, 58,
   316  	59, 60, 61, 62, 63, 64, 65, 66, 67, 33,
   317  	33, 33, 33, 23, 25, 72, 73, 26, 14, 15,
   318  	0, 0, 0, 29, 41, 42, 33, -2, 0, 0,
   319  	32, 36, 12, 13, 0, 0, 0, 76, 77, 24,
   320  	28, 0, 0, 80, 0, 68, 69, 70, 71, 27,
   321  	43, 44, 33, 31, 0, 45,
   322  }
   323  
   324  var yyTok1 = [...]int{
   325  	1,
   326  }
   327  
   328  var yyTok2 = [...]int{
   329  	2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
   330  	12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
   331  	22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
   332  	32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
   333  	42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
   334  	52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
   335  	62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
   336  	72, 73, 74,
   337  }
   338  
   339  var yyTok3 = [...]int{
   340  	0,
   341  }
   342  
   343  var yyErrorMessages = [...]struct {
   344  	state int
   345  	token int
   346  	msg   string
   347  }{}
   348  
   349  /*	parser for yacc output	*/
   350  
   351  var (
   352  	yyDebug        = 0
   353  	yyErrorVerbose = false
   354  )
   355  
   356  type yyLexer interface {
   357  	Lex(lval *yySymType) int
   358  	Error(s string)
   359  }
   360  
   361  type yyParser interface {
   362  	Parse(yyLexer) int
   363  	Lookahead() int
   364  }
   365  
   366  type yyParserImpl struct {
   367  	lval  yySymType
   368  	stack [yyInitialStackSize]yySymType
   369  	char  int
   370  }
   371  
   372  func (p *yyParserImpl) Lookahead() int {
   373  	return p.char
   374  }
   375  
   376  func yyNewParser() yyParser {
   377  	return &yyParserImpl{}
   378  }
   379  
   380  const yyFlag = -1000
   381  
   382  func yyTokname(c int) string {
   383  	if c >= 1 && c-1 < len(yyToknames) {
   384  		if yyToknames[c-1] != "" {
   385  			return yyToknames[c-1]
   386  		}
   387  	}
   388  	return __yyfmt__.Sprintf("tok-%v", c)
   389  }
   390  
   391  func yyStatname(s int) string {
   392  	if s >= 0 && s < len(yyStatenames) {
   393  		if yyStatenames[s] != "" {
   394  			return yyStatenames[s]
   395  		}
   396  	}
   397  	return __yyfmt__.Sprintf("state-%v", s)
   398  }
   399  
   400  func yyErrorMessage(state, lookAhead int) string {
   401  	const TOKSTART = 4
   402  
   403  	if !yyErrorVerbose {
   404  		return "syntax error"
   405  	}
   406  
   407  	for _, e := range yyErrorMessages {
   408  		if e.state == state && e.token == lookAhead {
   409  			return "syntax error: " + e.msg
   410  		}
   411  	}
   412  
   413  	res := "syntax error: unexpected " + yyTokname(lookAhead)
   414  
   415  	// To match Bison, suggest at most four expected tokens.
   416  	expected := make([]int, 0, 4)
   417  
   418  	// Look for shiftable tokens.
   419  	base := yyPact[state]
   420  	for tok := TOKSTART; tok-1 < len(yyToknames); tok++ {
   421  		if n := base + tok; n >= 0 && n < yyLast && yyChk[yyAct[n]] == tok {
   422  			if len(expected) == cap(expected) {
   423  				return res
   424  			}
   425  			expected = append(expected, tok)
   426  		}
   427  	}
   428  
   429  	if yyDef[state] == -2 {
   430  		i := 0
   431  		for yyExca[i] != -1 || yyExca[i+1] != state {
   432  			i += 2
   433  		}
   434  
   435  		// Look for tokens that we accept or reduce.
   436  		for i += 2; yyExca[i] >= 0; i += 2 {
   437  			tok := yyExca[i]
   438  			if tok < TOKSTART || yyExca[i+1] == 0 {
   439  				continue
   440  			}
   441  			if len(expected) == cap(expected) {
   442  				return res
   443  			}
   444  			expected = append(expected, tok)
   445  		}
   446  
   447  		// If the default action is to accept or reduce, give up.
   448  		if yyExca[i+1] != 0 {
   449  			return res
   450  		}
   451  	}
   452  
   453  	for i, tok := range expected {
   454  		if i == 0 {
   455  			res += ", expecting "
   456  		} else {
   457  			res += " or "
   458  		}
   459  		res += yyTokname(tok)
   460  	}
   461  	return res
   462  }
   463  
   464  func yylex1(lex yyLexer, lval *yySymType) (char, token int) {
   465  	token = 0
   466  	char = lex.Lex(lval)
   467  	if char <= 0 {
   468  		token = yyTok1[0]
   469  		goto out
   470  	}
   471  	if char < len(yyTok1) {
   472  		token = yyTok1[char]
   473  		goto out
   474  	}
   475  	if char >= yyPrivate {
   476  		if char < yyPrivate+len(yyTok2) {
   477  			token = yyTok2[char-yyPrivate]
   478  			goto out
   479  		}
   480  	}
   481  	for i := 0; i < len(yyTok3); i += 2 {
   482  		token = yyTok3[i+0]
   483  		if token == char {
   484  			token = yyTok3[i+1]
   485  			goto out
   486  		}
   487  	}
   488  
   489  out:
   490  	if token == 0 {
   491  		token = yyTok2[1] /* unknown char */
   492  	}
   493  	if yyDebug >= 3 {
   494  		__yyfmt__.Printf("lex %s(%d)\n", yyTokname(token), uint(char))
   495  	}
   496  	return char, token
   497  }
   498  
   499  func yyParse(yylex yyLexer) int {
   500  	return yyNewParser().Parse(yylex)
   501  }
   502  
   503  func (yyrcvr *yyParserImpl) Parse(yylex yyLexer) int {
   504  	var yyn int
   505  	var yyVAL yySymType
   506  	var yyDollar []yySymType
   507  	_ = yyDollar // silence set and not used
   508  	yyS := yyrcvr.stack[:]
   509  
   510  	Nerrs := 0   /* number of errors */
   511  	Errflag := 0 /* error recovery flag */
   512  	yystate := 0
   513  	yyrcvr.char = -1
   514  	yytoken := -1 // yyrcvr.char translated into internal numbering
   515  	defer func() {
   516  		// Make sure we report no lookahead when not parsing.
   517  		yystate = -1
   518  		yyrcvr.char = -1
   519  		yytoken = -1
   520  	}()
   521  	yyp := -1
   522  	goto yystack
   523  
   524  ret0:
   525  	return 0
   526  
   527  ret1:
   528  	return 1
   529  
   530  yystack:
   531  	/* put a state and value onto the stack */
   532  	if yyDebug >= 4 {
   533  		__yyfmt__.Printf("char %v in %v\n", yyTokname(yytoken), yyStatname(yystate))
   534  	}
   535  
   536  	yyp++
   537  	if yyp >= len(yyS) {
   538  		nyys := make([]yySymType, len(yyS)*2)
   539  		copy(nyys, yyS)
   540  		yyS = nyys
   541  	}
   542  	yyS[yyp] = yyVAL
   543  	yyS[yyp].yys = yystate
   544  
   545  yynewstate:
   546  	yyn = yyPact[yystate]
   547  	if yyn <= yyFlag {
   548  		goto yydefault /* simple state */
   549  	}
   550  	if yyrcvr.char < 0 {
   551  		yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval)
   552  	}
   553  	yyn += yytoken
   554  	if yyn < 0 || yyn >= yyLast {
   555  		goto yydefault
   556  	}
   557  	yyn = yyAct[yyn]
   558  	if yyChk[yyn] == yytoken { /* valid shift */
   559  		yyrcvr.char = -1
   560  		yytoken = -1
   561  		yyVAL = yyrcvr.lval
   562  		yystate = yyn
   563  		if Errflag > 0 {
   564  			Errflag--
   565  		}
   566  		goto yystack
   567  	}
   568  
   569  yydefault:
   570  	/* default state action */
   571  	yyn = yyDef[yystate]
   572  	if yyn == -2 {
   573  		if yyrcvr.char < 0 {
   574  			yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval)
   575  		}
   576  
   577  		/* look through exception table */
   578  		xi := 0
   579  		for {
   580  			if yyExca[xi+0] == -1 && yyExca[xi+1] == yystate {
   581  				break
   582  			}
   583  			xi += 2
   584  		}
   585  		for xi += 2; ; xi += 2 {
   586  			yyn = yyExca[xi+0]
   587  			if yyn < 0 || yyn == yytoken {
   588  				break
   589  			}
   590  		}
   591  		yyn = yyExca[xi+1]
   592  		if yyn < 0 {
   593  			goto ret0
   594  		}
   595  	}
   596  	if yyn == 0 {
   597  		/* error ... attempt to resume parsing */
   598  		switch Errflag {
   599  		case 0: /* brand new error */
   600  			yylex.Error(yyErrorMessage(yystate, yytoken))
   601  			Nerrs++
   602  			if yyDebug >= 1 {
   603  				__yyfmt__.Printf("%s", yyStatname(yystate))
   604  				__yyfmt__.Printf(" saw %s\n", yyTokname(yytoken))
   605  			}
   606  			fallthrough
   607  
   608  		case 1, 2: /* incompletely recovered error ... try again */
   609  			Errflag = 3
   610  
   611  			/* find a state where "error" is a legal shift action */
   612  			for yyp >= 0 {
   613  				yyn = yyPact[yyS[yyp].yys] + yyErrCode
   614  				if yyn >= 0 && yyn < yyLast {
   615  					yystate = yyAct[yyn] /* simulate a shift of "error" */
   616  					if yyChk[yystate] == yyErrCode {
   617  						goto yystack
   618  					}
   619  				}
   620  
   621  				/* the current p has no shift on "error", pop stack */
   622  				if yyDebug >= 2 {
   623  					__yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys)
   624  				}
   625  				yyp--
   626  			}
   627  			/* there is no state on the stack with an error shift ... abort */
   628  			goto ret1
   629  
   630  		case 3: /* no shift yet; clobber input char */
   631  			if yyDebug >= 2 {
   632  				__yyfmt__.Printf("error recovery discards %s\n", yyTokname(yytoken))
   633  			}
   634  			if yytoken == yyEofCode {
   635  				goto ret1
   636  			}
   637  			yyrcvr.char = -1
   638  			yytoken = -1
   639  			goto yynewstate /* try again in the same state */
   640  		}
   641  	}
   642  
   643  	/* reduction by production yyn */
   644  	if yyDebug >= 2 {
   645  		__yyfmt__.Printf("reduce %v in:\n\t%v\n", yyn, yyStatname(yystate))
   646  	}
   647  
   648  	yynt := yyn
   649  	yypt := yyp
   650  	_ = yypt // guard against "declared and not used"
   651  
   652  	yyp -= yyR2[yyn]
   653  	// yyp is now the index of $0. Perform the default action. Iff the
   654  	// reduced production is ε, $1 is possibly out of range.
   655  	if yyp+1 >= len(yyS) {
   656  		nyys := make([]yySymType, len(yyS)*2)
   657  		copy(nyys, yyS)
   658  		yyS = nyys
   659  	}
   660  	yyVAL = yyS[yyp+1]
   661  
   662  	/* consult goto table to find next state */
   663  	yyn = yyR1[yyn]
   664  	yyg := yyPgo[yyn]
   665  	yyj := yyg + yyS[yyp].yys + 1
   666  
   667  	if yyj >= yyLast {
   668  		yystate = yyAct[yyg]
   669  	} else {
   670  		yystate = yyAct[yyj]
   671  		if yyChk[yystate] != -yyn {
   672  			yystate = yyAct[yyg]
   673  		}
   674  	}
   675  	// dummy call; replaced with literal code
   676  	switch yynt {
   677  
   678  	case 1:
   679  		yyDollar = yyS[yypt-2 : yypt+1]
   680  		{
   681  			yylex.(*parser).parseResult = yyDollar[2].node
   682  		}
   683  	case 3:
   684  		yyDollar = yyS[yypt-1 : yypt+1]
   685  		{
   686  			yylex.(*parser).unexpected("", "")
   687  		}
   688  	case 4:
   689  		yyDollar = yyS[yypt-1 : yypt+1]
   690  		{
   691  			yyVAL.node = WhereConditions{yyDollar[1].node}
   692  		}
   693  	case 5:
   694  		yyDollar = yyS[yypt-3 : yypt+1]
   695  		{
   696  			if yyDollar[3].node != nil {
   697  				arr := yyDollar[1].node.(WhereConditions)
   698  				arr = append(arr, yyDollar[3].node)
   699  				yyVAL.node = arr
   700  			} else {
   701  				yyVAL.node = yyDollar[1].node
   702  			}
   703  		}
   704  	case 12:
   705  		yyDollar = yyS[yypt-1 : yypt+1]
   706  		{
   707  			yyVAL.node = &Identifier{Name: yyDollar[1].item.Val}
   708  		}
   709  	case 13:
   710  		yyDollar = yyS[yypt-1 : yypt+1]
   711  		{
   712  			yyVAL.node = yyDollar[1].node
   713  		}
   714  	case 14:
   715  		yyDollar = yyS[yypt-3 : yypt+1]
   716  		{
   717  			yyVAL.node = &AttrExpr{
   718  				Obj:  &Identifier{Name: yyDollar[1].item.Val},
   719  				Attr: &Identifier{Name: yyDollar[3].item.Val},
   720  			}
   721  		}
   722  	case 15:
   723  		yyDollar = yyS[yypt-3 : yypt+1]
   724  		{
   725  			yyVAL.node = &AttrExpr{
   726  				Obj:  yyDollar[1].node.(*AttrExpr),
   727  				Attr: &Identifier{Name: yyDollar[3].item.Val},
   728  			}
   729  		}
   730  	case 18:
   731  		yyDollar = yyS[yypt-1 : yypt+1]
   732  		{
   733  			yyVAL.node = &StringLiteral{Val: yylex.(*parser).unquoteString(yyDollar[1].item.Val)}
   734  		}
   735  	case 19:
   736  		yyDollar = yyS[yypt-1 : yypt+1]
   737  		{
   738  			yyVAL.node = &NilLiteral{}
   739  		}
   740  	case 20:
   741  		yyDollar = yyS[yypt-1 : yypt+1]
   742  		{
   743  			yyVAL.node = &NilLiteral{}
   744  		}
   745  	case 21:
   746  		yyDollar = yyS[yypt-1 : yypt+1]
   747  		{
   748  			yyVAL.node = &BoolLiteral{Val: true}
   749  		}
   750  	case 22:
   751  		yyDollar = yyS[yypt-1 : yypt+1]
   752  		{
   753  			yyVAL.node = &BoolLiteral{Val: false}
   754  		}
   755  	case 23:
   756  		yyDollar = yyS[yypt-3 : yypt+1]
   757  		{
   758  			yyVAL.node = &ParenExpr{Param: yyDollar[2].node}
   759  		}
   760  	case 24:
   761  		yyDollar = yyS[yypt-4 : yypt+1]
   762  		{
   763  			yyVAL.node = yylex.(*parser).newFunc(yyDollar[1].item.Val, yyDollar[3].nodes)
   764  		}
   765  	case 25:
   766  		yyDollar = yyS[yypt-3 : yypt+1]
   767  		{
   768  			yyVAL.node = &CascadeFunctions{Funcs: []*FuncExpr{yyDollar[1].node.(*FuncExpr), yyDollar[3].node.(*FuncExpr)}}
   769  		}
   770  	case 26:
   771  		yyDollar = yyS[yypt-3 : yypt+1]
   772  		{
   773  			fc := yyDollar[1].node.(*CascadeFunctions)
   774  			fc.Funcs = append(fc.Funcs, yyDollar[3].node.(*FuncExpr))
   775  			yyVAL.node = fc
   776  		}
   777  	case 27:
   778  		yyDollar = yyS[yypt-3 : yypt+1]
   779  		{
   780  			yyVAL.nodes = append(yyVAL.nodes, yyDollar[3].node)
   781  		}
   782  	case 29:
   783  		yyDollar = yyS[yypt-1 : yypt+1]
   784  		{
   785  			yyVAL.nodes = []Node{yyDollar[1].node}
   786  		}
   787  	case 30:
   788  		yyDollar = yyS[yypt-0 : yypt+1]
   789  		{
   790  			yyVAL.nodes = nil
   791  		}
   792  	case 31:
   793  		yyDollar = yyS[yypt-3 : yypt+1]
   794  		{
   795  			nl := yyVAL.node.(NodeList)
   796  			nl = append(nl, yyDollar[3].node)
   797  			yyVAL.node = nl
   798  		}
   799  	case 32:
   800  		yyDollar = yyS[yypt-1 : yypt+1]
   801  		{
   802  			yyVAL.node = NodeList{yyDollar[1].node}
   803  		}
   804  	case 33:
   805  		yyDollar = yyS[yypt-0 : yypt+1]
   806  		{
   807  			yyVAL.node = NodeList{}
   808  		}
   809  	case 40:
   810  		yyDollar = yyS[yypt-1 : yypt+1]
   811  		{
   812  			yyVAL.node = &Star{}
   813  		}
   814  	case 43:
   815  		yyDollar = yyS[yypt-3 : yypt+1]
   816  		{
   817  			yyVAL.node = getFuncArgList(yyDollar[2].node.(NodeList))
   818  		}
   819  	case 44:
   820  		yyDollar = yyS[yypt-3 : yypt+1]
   821  		{
   822  			yyVAL.node = &FuncArg{ArgName: yyDollar[1].item.Val, ArgVal: yyDollar[3].node}
   823  		}
   824  	case 45:
   825  		yyDollar = yyS[yypt-5 : yypt+1]
   826  		{
   827  			yyVAL.node = &FuncArg{
   828  				ArgName: yyDollar[1].item.Val,
   829  				ArgVal:  getFuncArgList(yyDollar[4].node.(NodeList)),
   830  			}
   831  		}
   832  	case 46:
   833  		yyDollar = yyS[yypt-3 : yypt+1]
   834  		{
   835  			yyVAL.node = yylex.(*parser).newWhereConditions(yyDollar[2].nodes)
   836  		}
   837  	case 47:
   838  		yyDollar = yyS[yypt-0 : yypt+1]
   839  		{
   840  			yyVAL.node = nil
   841  		}
   842  	case 48:
   843  		yyDollar = yyS[yypt-1 : yypt+1]
   844  		{
   845  			yyVAL.nodes = []Node{yyDollar[1].node}
   846  		}
   847  	case 49:
   848  		yyDollar = yyS[yypt-3 : yypt+1]
   849  		{
   850  			yyVAL.nodes = append(yyVAL.nodes, yyDollar[3].node)
   851  		}
   852  	case 51:
   853  		yyDollar = yyS[yypt-0 : yypt+1]
   854  		{
   855  			yyVAL.nodes = nil
   856  		}
   857  	case 54:
   858  		yyDollar = yyS[yypt-3 : yypt+1]
   859  		{
   860  			yyVAL.node = yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item)
   861  		}
   862  	case 55:
   863  		yyDollar = yyS[yypt-3 : yypt+1]
   864  		{
   865  			yyVAL.node = yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item)
   866  		}
   867  	case 56:
   868  		yyDollar = yyS[yypt-3 : yypt+1]
   869  		{
   870  			bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item)
   871  			bexpr.ReturnBool = true
   872  			yyVAL.node = bexpr
   873  		}
   874  	case 57:
   875  		yyDollar = yyS[yypt-3 : yypt+1]
   876  		{
   877  			bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item)
   878  			bexpr.ReturnBool = true
   879  			yyVAL.node = bexpr
   880  		}
   881  	case 58:
   882  		yyDollar = yyS[yypt-3 : yypt+1]
   883  		{
   884  			bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item)
   885  			bexpr.ReturnBool = true
   886  			yyVAL.node = bexpr
   887  		}
   888  	case 59:
   889  		yyDollar = yyS[yypt-3 : yypt+1]
   890  		{
   891  			bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item)
   892  			bexpr.ReturnBool = true
   893  			yyVAL.node = bexpr
   894  		}
   895  	case 60:
   896  		yyDollar = yyS[yypt-3 : yypt+1]
   897  		{
   898  			bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item)
   899  			bexpr.ReturnBool = true
   900  			yyVAL.node = bexpr
   901  		}
   902  	case 61:
   903  		yyDollar = yyS[yypt-3 : yypt+1]
   904  		{
   905  			bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item)
   906  			bexpr.ReturnBool = true
   907  			yyVAL.node = bexpr
   908  		}
   909  	case 62:
   910  		yyDollar = yyS[yypt-3 : yypt+1]
   911  		{
   912  			bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item)
   913  			yyVAL.node = bexpr
   914  		}
   915  	case 63:
   916  		yyDollar = yyS[yypt-3 : yypt+1]
   917  		{
   918  			bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item)
   919  			yyVAL.node = bexpr
   920  		}
   921  	case 64:
   922  		yyDollar = yyS[yypt-3 : yypt+1]
   923  		{
   924  			bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item)
   925  			bexpr.ReturnBool = true
   926  			yyVAL.node = bexpr
   927  		}
   928  	case 65:
   929  		yyDollar = yyS[yypt-3 : yypt+1]
   930  		{
   931  			bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item)
   932  			yyVAL.node = bexpr
   933  		}
   934  	case 66:
   935  		yyDollar = yyS[yypt-3 : yypt+1]
   936  		{
   937  			bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item)
   938  			yyVAL.node = bexpr
   939  		}
   940  	case 67:
   941  		yyDollar = yyS[yypt-3 : yypt+1]
   942  		{
   943  			bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item)
   944  			bexpr.ReturnBool = true
   945  			yyVAL.node = bexpr
   946  		}
   947  	case 68:
   948  		yyDollar = yyS[yypt-5 : yypt+1]
   949  		{
   950  			bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[4].node, yyDollar[2].item)
   951  			bexpr.ReturnBool = true
   952  			yyVAL.node = bexpr
   953  		}
   954  	case 69:
   955  		yyDollar = yyS[yypt-5 : yypt+1]
   956  		{
   957  			bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[4].node, yyDollar[2].item)
   958  			bexpr.ReturnBool = true
   959  			yyVAL.node = bexpr
   960  		}
   961  	case 70:
   962  		yyDollar = yyS[yypt-5 : yypt+1]
   963  		{
   964  			bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[4].node, yyDollar[2].item)
   965  			bexpr.ReturnBool = true
   966  			yyVAL.node = bexpr
   967  		}
   968  	case 71:
   969  		yyDollar = yyS[yypt-5 : yypt+1]
   970  		{
   971  			bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[4].node, yyDollar[2].item)
   972  			bexpr.ReturnBool = true
   973  			yyVAL.node = bexpr
   974  		}
   975  	case 72:
   976  		yyDollar = yyS[yypt-1 : yypt+1]
   977  		{
   978  			yyVAL.item = yyDollar[1].item
   979  		}
   980  	case 73:
   981  		yyDollar = yyS[yypt-1 : yypt+1]
   982  		{
   983  			yyVAL.item = Item{Val: yyDollar[1].node.(*AttrExpr).String()}
   984  		}
   985  	case 74:
   986  		yyDollar = yyS[yypt-1 : yypt+1]
   987  		{
   988  			yyVAL.node = yylex.(*parser).number(yyDollar[1].item.Val)
   989  		}
   990  	case 75:
   991  		yyDollar = yyS[yypt-2 : yypt+1]
   992  		{
   993  			num := yylex.(*parser).number(yyDollar[2].item.Val)
   994  			switch yyDollar[1].item.Typ {
   995  			case ADD: // pass
   996  			case SUB:
   997  				if num.IsInt {
   998  					num.Int = -num.Int
   999  				} else {
  1000  					num.Float = -num.Float
  1001  				}
  1002  			}
  1003  			yyVAL.node = num
  1004  		}
  1005  	case 76:
  1006  		yyDollar = yyS[yypt-4 : yypt+1]
  1007  		{
  1008  			yyVAL.node = yylex.(*parser).newRegex(yyDollar[3].node.(*StringLiteral).Val)
  1009  		}
  1010  	case 77:
  1011  		yyDollar = yyS[yypt-4 : yypt+1]
  1012  		{
  1013  			yyVAL.node = yylex.(*parser).newRegex(yylex.(*parser).unquoteString(yyDollar[3].item.Val))
  1014  		}
  1015  	case 79:
  1016  		yyDollar = yyS[yypt-1 : yypt+1]
  1017  		{
  1018  			yyVAL.item.Val = yylex.(*parser).unquoteString(yyDollar[1].item.Val)
  1019  		}
  1020  	case 80:
  1021  		yyDollar = yyS[yypt-4 : yypt+1]
  1022  		{
  1023  			yyVAL.item.Val = yyDollar[3].node.(*StringLiteral).Val
  1024  		}
  1025  	}
  1026  	goto yystack /* stack new state and value */
  1027  }