github.com/mithrandie/csvq@v1.18.1/lib/json/query_parser.go (about)

     1  // Code generated by goyacc -p jq -o lib/json/query_parser.go -v lib/json/query_parser.output lib/json/query_parser.y. DO NOT EDIT.
     2  
     3  //line lib/json/query_parser.y:2
     4  package json
     5  
     6  import __yyfmt__ "fmt"
     7  
     8  //line lib/json/query_parser.y:2
     9  
    10  import "strconv"
    11  
    12  //line lib/json/query_parser.y:7
    13  type jqSymType struct {
    14  	yys        int
    15  	expression QueryExpression
    16  	element    Element
    17  	field      FieldExpr
    18  	fields     []FieldExpr
    19  	token      QueryToken
    20  }
    21  
    22  const PATH_IDENTIFIER = 57346
    23  const PATH_INDEX = 57347
    24  const AS = 57348
    25  
    26  var jqToknames = [...]string{
    27  	"$end",
    28  	"error",
    29  	"$unk",
    30  	"PATH_IDENTIFIER",
    31  	"PATH_INDEX",
    32  	"AS",
    33  	"'.'",
    34  	"'['",
    35  	"']'",
    36  	"'{'",
    37  	"'}'",
    38  	"','",
    39  }
    40  
    41  var jqStatenames = [...]string{}
    42  
    43  const jqEofCode = 1
    44  const jqErrCode = 2
    45  const jqInitialStackSize = 16
    46  
    47  //line lib/json/query_parser.y:185
    48  
    49  func ParseQuery(src string) (QueryExpression, error) {
    50  	l := new(QueryLexer)
    51  	l.Init(src)
    52  	jqParse(l)
    53  	return l.query, l.err
    54  }
    55  
    56  //line yacctab:1
    57  var jqExca = [...]int{
    58  	-1, 1,
    59  	1, -1,
    60  	-2, 0,
    61  }
    62  
    63  const jqPrivate = 57344
    64  
    65  const jqLast = 50
    66  
    67  var jqAct = [...]int{
    68  	18, 3, 23, 16, 26, 6, 5, 30, 8, 4,
    69  	9, 40, 20, 13, 12, 10, 8, 11, 9, 27,
    70  	7, 25, 29, 34, 8, 35, 9, 33, 32, 38,
    71  	36, 31, 39, 14, 41, 24, 19, 15, 28, 24,
    72  	22, 24, 43, 42, 21, 7, 37, 17, 2, 1,
    73  }
    74  
    75  var jqPact = [...]int{
    76  	16, -1000, -1000, -1000, -1000, -1000, -1000, 8, 28, 32,
    77  	41, -1000, -1000, -1000, 35, 33, 10, -8, 13, 31,
    78  	-1000, 0, 32, -1000, 20, -1000, 32, 42, 32, -1000,
    79  	41, -1000, -1000, -1000, -1000, 2, -1000, -1000, -1000, -1000,
    80  	27, 32, -1000, -1000,
    81  }
    82  
    83  var jqPgo = [...]int{
    84  	0, 49, 48, 1, 0, 9, 2, 6, 5, 47,
    85  	3,
    86  }
    87  
    88  var jqR1 = [...]int{
    89  	0, 1, 1, 2, 2, 2, 2, 3, 3, 3,
    90  	3, 3, 4, 4, 4, 5, 5, 5, 5, 5,
    91  	6, 6, 6, 7, 7, 7, 8, 9, 9, 10,
    92  	10, 10,
    93  }
    94  
    95  var jqR2 = [...]int{
    96  	0, 0, 1, 1, 1, 1, 1, 1, 3, 2,
    97  	2, 2, 1, 3, 2, 3, 5, 4, 4, 4,
    98  	3, 5, 4, 2, 4, 3, 3, 1, 3, 0,
    99  	1, 3,
   100  }
   101  
   102  var jqChk = [...]int{
   103  	-1000, -1, -2, -3, -5, -7, -8, 4, 8, 10,
   104  	7, -5, -7, -8, 5, 9, -10, -9, -4, 4,
   105  	-3, 9, 7, -6, 8, 11, 12, 6, 7, -6,
   106  	7, -5, -7, -8, -4, 5, -10, 4, -4, -3,
   107  	9, 7, -6, -4,
   108  }
   109  
   110  var jqDef = [...]int{
   111  	1, -2, 2, 3, 4, 5, 6, 7, 0, 29,
   112  	0, 9, 10, 11, 0, 23, 0, 30, 27, 12,
   113  	8, 15, 0, 25, 0, 26, 29, 0, 0, 14,
   114  	0, 17, 18, 19, 24, 0, 31, 28, 13, 16,
   115  	20, 0, 22, 21,
   116  }
   117  
   118  var jqTok1 = [...]int{
   119  	1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   120  	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   121  	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   122  	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   123  	3, 3, 3, 3, 12, 3, 7, 3, 3, 3,
   124  	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   125  	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   126  	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   127  	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   128  	3, 8, 3, 9, 3, 3, 3, 3, 3, 3,
   129  	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   130  	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   131  	3, 3, 3, 10, 3, 11,
   132  }
   133  
   134  var jqTok2 = [...]int{
   135  	2, 3, 4, 5, 6,
   136  }
   137  
   138  var jqTok3 = [...]int{
   139  	0,
   140  }
   141  
   142  var jqErrorMessages = [...]struct {
   143  	state int
   144  	token int
   145  	msg   string
   146  }{}
   147  
   148  //line yaccpar:1
   149  
   150  /*	parser for yacc output	*/
   151  
   152  var (
   153  	jqDebug        = 0
   154  	jqErrorVerbose = false
   155  )
   156  
   157  type jqLexer interface {
   158  	Lex(lval *jqSymType) int
   159  	Error(s string)
   160  }
   161  
   162  type jqParser interface {
   163  	Parse(jqLexer) int
   164  	Lookahead() int
   165  }
   166  
   167  type jqParserImpl struct {
   168  	lval  jqSymType
   169  	stack [jqInitialStackSize]jqSymType
   170  	char  int
   171  }
   172  
   173  func (p *jqParserImpl) Lookahead() int {
   174  	return p.char
   175  }
   176  
   177  func jqNewParser() jqParser {
   178  	return &jqParserImpl{}
   179  }
   180  
   181  const jqFlag = -1000
   182  
   183  func jqTokname(c int) string {
   184  	if c >= 1 && c-1 < len(jqToknames) {
   185  		if jqToknames[c-1] != "" {
   186  			return jqToknames[c-1]
   187  		}
   188  	}
   189  	return __yyfmt__.Sprintf("tok-%v", c)
   190  }
   191  
   192  func jqStatname(s int) string {
   193  	if s >= 0 && s < len(jqStatenames) {
   194  		if jqStatenames[s] != "" {
   195  			return jqStatenames[s]
   196  		}
   197  	}
   198  	return __yyfmt__.Sprintf("state-%v", s)
   199  }
   200  
   201  func jqErrorMessage(state, lookAhead int) string {
   202  	const TOKSTART = 4
   203  
   204  	if !jqErrorVerbose {
   205  		return "syntax error"
   206  	}
   207  
   208  	for _, e := range jqErrorMessages {
   209  		if e.state == state && e.token == lookAhead {
   210  			return "syntax error: " + e.msg
   211  		}
   212  	}
   213  
   214  	res := "syntax error: unexpected " + jqTokname(lookAhead)
   215  
   216  	// To match Bison, suggest at most four expected tokens.
   217  	expected := make([]int, 0, 4)
   218  
   219  	// Look for shiftable tokens.
   220  	base := jqPact[state]
   221  	for tok := TOKSTART; tok-1 < len(jqToknames); tok++ {
   222  		if n := base + tok; n >= 0 && n < jqLast && jqChk[jqAct[n]] == tok {
   223  			if len(expected) == cap(expected) {
   224  				return res
   225  			}
   226  			expected = append(expected, tok)
   227  		}
   228  	}
   229  
   230  	if jqDef[state] == -2 {
   231  		i := 0
   232  		for jqExca[i] != -1 || jqExca[i+1] != state {
   233  			i += 2
   234  		}
   235  
   236  		// Look for tokens that we accept or reduce.
   237  		for i += 2; jqExca[i] >= 0; i += 2 {
   238  			tok := jqExca[i]
   239  			if tok < TOKSTART || jqExca[i+1] == 0 {
   240  				continue
   241  			}
   242  			if len(expected) == cap(expected) {
   243  				return res
   244  			}
   245  			expected = append(expected, tok)
   246  		}
   247  
   248  		// If the default action is to accept or reduce, give up.
   249  		if jqExca[i+1] != 0 {
   250  			return res
   251  		}
   252  	}
   253  
   254  	for i, tok := range expected {
   255  		if i == 0 {
   256  			res += ", expecting "
   257  		} else {
   258  			res += " or "
   259  		}
   260  		res += jqTokname(tok)
   261  	}
   262  	return res
   263  }
   264  
   265  func jqlex1(lex jqLexer, lval *jqSymType) (char, token int) {
   266  	token = 0
   267  	char = lex.Lex(lval)
   268  	if char <= 0 {
   269  		token = jqTok1[0]
   270  		goto out
   271  	}
   272  	if char < len(jqTok1) {
   273  		token = jqTok1[char]
   274  		goto out
   275  	}
   276  	if char >= jqPrivate {
   277  		if char < jqPrivate+len(jqTok2) {
   278  			token = jqTok2[char-jqPrivate]
   279  			goto out
   280  		}
   281  	}
   282  	for i := 0; i < len(jqTok3); i += 2 {
   283  		token = jqTok3[i+0]
   284  		if token == char {
   285  			token = jqTok3[i+1]
   286  			goto out
   287  		}
   288  	}
   289  
   290  out:
   291  	if token == 0 {
   292  		token = jqTok2[1] /* unknown char */
   293  	}
   294  	if jqDebug >= 3 {
   295  		__yyfmt__.Printf("lex %s(%d)\n", jqTokname(token), uint(char))
   296  	}
   297  	return char, token
   298  }
   299  
   300  func jqParse(jqlex jqLexer) int {
   301  	return jqNewParser().Parse(jqlex)
   302  }
   303  
   304  func (jqrcvr *jqParserImpl) Parse(jqlex jqLexer) int {
   305  	var jqn int
   306  	var jqVAL jqSymType
   307  	var jqDollar []jqSymType
   308  	_ = jqDollar // silence set and not used
   309  	jqS := jqrcvr.stack[:]
   310  
   311  	Nerrs := 0   /* number of errors */
   312  	Errflag := 0 /* error recovery flag */
   313  	jqstate := 0
   314  	jqrcvr.char = -1
   315  	jqtoken := -1 // jqrcvr.char translated into internal numbering
   316  	defer func() {
   317  		// Make sure we report no lookahead when not parsing.
   318  		jqstate = -1
   319  		jqrcvr.char = -1
   320  		jqtoken = -1
   321  	}()
   322  	jqp := -1
   323  	goto jqstack
   324  
   325  ret0:
   326  	return 0
   327  
   328  ret1:
   329  	return 1
   330  
   331  jqstack:
   332  	/* put a state and value onto the stack */
   333  	if jqDebug >= 4 {
   334  		__yyfmt__.Printf("char %v in %v\n", jqTokname(jqtoken), jqStatname(jqstate))
   335  	}
   336  
   337  	jqp++
   338  	if jqp >= len(jqS) {
   339  		nyys := make([]jqSymType, len(jqS)*2)
   340  		copy(nyys, jqS)
   341  		jqS = nyys
   342  	}
   343  	jqS[jqp] = jqVAL
   344  	jqS[jqp].yys = jqstate
   345  
   346  jqnewstate:
   347  	jqn = jqPact[jqstate]
   348  	if jqn <= jqFlag {
   349  		goto jqdefault /* simple state */
   350  	}
   351  	if jqrcvr.char < 0 {
   352  		jqrcvr.char, jqtoken = jqlex1(jqlex, &jqrcvr.lval)
   353  	}
   354  	jqn += jqtoken
   355  	if jqn < 0 || jqn >= jqLast {
   356  		goto jqdefault
   357  	}
   358  	jqn = jqAct[jqn]
   359  	if jqChk[jqn] == jqtoken { /* valid shift */
   360  		jqrcvr.char = -1
   361  		jqtoken = -1
   362  		jqVAL = jqrcvr.lval
   363  		jqstate = jqn
   364  		if Errflag > 0 {
   365  			Errflag--
   366  		}
   367  		goto jqstack
   368  	}
   369  
   370  jqdefault:
   371  	/* default state action */
   372  	jqn = jqDef[jqstate]
   373  	if jqn == -2 {
   374  		if jqrcvr.char < 0 {
   375  			jqrcvr.char, jqtoken = jqlex1(jqlex, &jqrcvr.lval)
   376  		}
   377  
   378  		/* look through exception table */
   379  		xi := 0
   380  		for {
   381  			if jqExca[xi+0] == -1 && jqExca[xi+1] == jqstate {
   382  				break
   383  			}
   384  			xi += 2
   385  		}
   386  		for xi += 2; ; xi += 2 {
   387  			jqn = jqExca[xi+0]
   388  			if jqn < 0 || jqn == jqtoken {
   389  				break
   390  			}
   391  		}
   392  		jqn = jqExca[xi+1]
   393  		if jqn < 0 {
   394  			goto ret0
   395  		}
   396  	}
   397  	if jqn == 0 {
   398  		/* error ... attempt to resume parsing */
   399  		switch Errflag {
   400  		case 0: /* brand new error */
   401  			jqlex.Error(jqErrorMessage(jqstate, jqtoken))
   402  			Nerrs++
   403  			if jqDebug >= 1 {
   404  				__yyfmt__.Printf("%s", jqStatname(jqstate))
   405  				__yyfmt__.Printf(" saw %s\n", jqTokname(jqtoken))
   406  			}
   407  			fallthrough
   408  
   409  		case 1, 2: /* incompletely recovered error ... try again */
   410  			Errflag = 3
   411  
   412  			/* find a state where "error" is a legal shift action */
   413  			for jqp >= 0 {
   414  				jqn = jqPact[jqS[jqp].yys] + jqErrCode
   415  				if jqn >= 0 && jqn < jqLast {
   416  					jqstate = jqAct[jqn] /* simulate a shift of "error" */
   417  					if jqChk[jqstate] == jqErrCode {
   418  						goto jqstack
   419  					}
   420  				}
   421  
   422  				/* the current p has no shift on "error", pop stack */
   423  				if jqDebug >= 2 {
   424  					__yyfmt__.Printf("error recovery pops state %d\n", jqS[jqp].yys)
   425  				}
   426  				jqp--
   427  			}
   428  			/* there is no state on the stack with an error shift ... abort */
   429  			goto ret1
   430  
   431  		case 3: /* no shift yet; clobber input char */
   432  			if jqDebug >= 2 {
   433  				__yyfmt__.Printf("error recovery discards %s\n", jqTokname(jqtoken))
   434  			}
   435  			if jqtoken == jqEofCode {
   436  				goto ret1
   437  			}
   438  			jqrcvr.char = -1
   439  			jqtoken = -1
   440  			goto jqnewstate /* try again in the same state */
   441  		}
   442  	}
   443  
   444  	/* reduction by production jqn */
   445  	if jqDebug >= 2 {
   446  		__yyfmt__.Printf("reduce %v in:\n\t%v\n", jqn, jqStatname(jqstate))
   447  	}
   448  
   449  	jqnt := jqn
   450  	jqpt := jqp
   451  	_ = jqpt // guard against "declared and not used"
   452  
   453  	jqp -= jqR2[jqn]
   454  	// jqp is now the index of $0. Perform the default action. Iff the
   455  	// reduced production is ε, $1 is possibly out of range.
   456  	if jqp+1 >= len(jqS) {
   457  		nyys := make([]jqSymType, len(jqS)*2)
   458  		copy(nyys, jqS)
   459  		jqS = nyys
   460  	}
   461  	jqVAL = jqS[jqp+1]
   462  
   463  	/* consult goto table to find next state */
   464  	jqn = jqR1[jqn]
   465  	jqg := jqPgo[jqn]
   466  	jqj := jqg + jqS[jqp].yys + 1
   467  
   468  	if jqj >= jqLast {
   469  		jqstate = jqAct[jqg]
   470  	} else {
   471  		jqstate = jqAct[jqj]
   472  		if jqChk[jqstate] != -jqn {
   473  			jqstate = jqAct[jqg]
   474  		}
   475  	}
   476  	// dummy call; replaced with literal code
   477  	switch jqnt {
   478  
   479  	case 1:
   480  		jqDollar = jqS[jqpt-0 : jqpt+1]
   481  //line lib/json/query_parser.y:33
   482  		{
   483  			jqVAL.expression = nil
   484  			jqlex.(*QueryLexer).query = jqVAL.expression
   485  		}
   486  	case 2:
   487  		jqDollar = jqS[jqpt-1 : jqpt+1]
   488  //line lib/json/query_parser.y:38
   489  		{
   490  			jqVAL.expression = jqDollar[1].expression
   491  			jqlex.(*QueryLexer).query = jqVAL.expression
   492  		}
   493  	case 3:
   494  		jqDollar = jqS[jqpt-1 : jqpt+1]
   495  //line lib/json/query_parser.y:45
   496  		{
   497  			jqVAL.expression = jqDollar[1].element
   498  		}
   499  	case 4:
   500  		jqDollar = jqS[jqpt-1 : jqpt+1]
   501  //line lib/json/query_parser.y:49
   502  		{
   503  			jqVAL.expression = jqDollar[1].expression
   504  		}
   505  	case 5:
   506  		jqDollar = jqS[jqpt-1 : jqpt+1]
   507  //line lib/json/query_parser.y:53
   508  		{
   509  			jqVAL.expression = jqDollar[1].expression
   510  		}
   511  	case 6:
   512  		jqDollar = jqS[jqpt-1 : jqpt+1]
   513  //line lib/json/query_parser.y:57
   514  		{
   515  			jqVAL.expression = jqDollar[1].expression
   516  		}
   517  	case 7:
   518  		jqDollar = jqS[jqpt-1 : jqpt+1]
   519  //line lib/json/query_parser.y:63
   520  		{
   521  			jqVAL.element = Element{Label: jqDollar[1].token.Literal}
   522  		}
   523  	case 8:
   524  		jqDollar = jqS[jqpt-3 : jqpt+1]
   525  //line lib/json/query_parser.y:67
   526  		{
   527  			jqVAL.element = Element{Label: jqDollar[1].token.Literal, Child: jqDollar[3].element}
   528  		}
   529  	case 9:
   530  		jqDollar = jqS[jqpt-2 : jqpt+1]
   531  //line lib/json/query_parser.y:71
   532  		{
   533  			jqVAL.element = Element{Label: jqDollar[1].token.Literal, Child: jqDollar[2].expression}
   534  		}
   535  	case 10:
   536  		jqDollar = jqS[jqpt-2 : jqpt+1]
   537  //line lib/json/query_parser.y:75
   538  		{
   539  			jqVAL.element = Element{Label: jqDollar[1].token.Literal, Child: jqDollar[2].expression}
   540  		}
   541  	case 11:
   542  		jqDollar = jqS[jqpt-2 : jqpt+1]
   543  //line lib/json/query_parser.y:79
   544  		{
   545  			jqVAL.element = Element{Label: jqDollar[1].token.Literal, Child: jqDollar[2].expression}
   546  		}
   547  	case 12:
   548  		jqDollar = jqS[jqpt-1 : jqpt+1]
   549  //line lib/json/query_parser.y:85
   550  		{
   551  			jqVAL.element = Element{Label: jqDollar[1].token.Literal}
   552  		}
   553  	case 13:
   554  		jqDollar = jqS[jqpt-3 : jqpt+1]
   555  //line lib/json/query_parser.y:89
   556  		{
   557  			jqVAL.element = Element{Label: jqDollar[1].token.Literal, Child: jqDollar[3].element}
   558  		}
   559  	case 14:
   560  		jqDollar = jqS[jqpt-2 : jqpt+1]
   561  //line lib/json/query_parser.y:93
   562  		{
   563  			jqVAL.element = Element{Label: jqDollar[1].token.Literal, Child: jqDollar[2].expression}
   564  		}
   565  	case 15:
   566  		jqDollar = jqS[jqpt-3 : jqpt+1]
   567  //line lib/json/query_parser.y:99
   568  		{
   569  			i, _ := strconv.Atoi(jqDollar[2].token.Literal)
   570  			jqVAL.expression = ArrayItem{Index: i}
   571  		}
   572  	case 16:
   573  		jqDollar = jqS[jqpt-5 : jqpt+1]
   574  //line lib/json/query_parser.y:104
   575  		{
   576  			i, _ := strconv.Atoi(jqDollar[2].token.Literal)
   577  			jqVAL.expression = ArrayItem{Index: i, Child: jqDollar[5].element}
   578  		}
   579  	case 17:
   580  		jqDollar = jqS[jqpt-4 : jqpt+1]
   581  //line lib/json/query_parser.y:109
   582  		{
   583  			i, _ := strconv.Atoi(jqDollar[2].token.Literal)
   584  			jqVAL.expression = ArrayItem{Index: i, Child: jqDollar[4].expression}
   585  		}
   586  	case 18:
   587  		jqDollar = jqS[jqpt-4 : jqpt+1]
   588  //line lib/json/query_parser.y:114
   589  		{
   590  			i, _ := strconv.Atoi(jqDollar[2].token.Literal)
   591  			jqVAL.expression = ArrayItem{Index: i, Child: jqDollar[4].expression}
   592  		}
   593  	case 19:
   594  		jqDollar = jqS[jqpt-4 : jqpt+1]
   595  //line lib/json/query_parser.y:119
   596  		{
   597  			i, _ := strconv.Atoi(jqDollar[2].token.Literal)
   598  			jqVAL.expression = ArrayItem{Index: i, Child: jqDollar[4].expression}
   599  		}
   600  	case 20:
   601  		jqDollar = jqS[jqpt-3 : jqpt+1]
   602  //line lib/json/query_parser.y:126
   603  		{
   604  			i, _ := strconv.Atoi(jqDollar[2].token.Literal)
   605  			jqVAL.expression = ArrayItem{Index: i}
   606  		}
   607  	case 21:
   608  		jqDollar = jqS[jqpt-5 : jqpt+1]
   609  //line lib/json/query_parser.y:131
   610  		{
   611  			i, _ := strconv.Atoi(jqDollar[2].token.Literal)
   612  			jqVAL.expression = ArrayItem{Index: i, Child: jqDollar[5].element}
   613  		}
   614  	case 22:
   615  		jqDollar = jqS[jqpt-4 : jqpt+1]
   616  //line lib/json/query_parser.y:136
   617  		{
   618  			i, _ := strconv.Atoi(jqDollar[2].token.Literal)
   619  			jqVAL.expression = ArrayItem{Index: i, Child: jqDollar[4].expression}
   620  		}
   621  	case 23:
   622  		jqDollar = jqS[jqpt-2 : jqpt+1]
   623  //line lib/json/query_parser.y:143
   624  		{
   625  			jqVAL.expression = RowValueExpr{}
   626  		}
   627  	case 24:
   628  		jqDollar = jqS[jqpt-4 : jqpt+1]
   629  //line lib/json/query_parser.y:147
   630  		{
   631  			jqVAL.expression = RowValueExpr{Child: jqDollar[4].element}
   632  		}
   633  	case 25:
   634  		jqDollar = jqS[jqpt-3 : jqpt+1]
   635  //line lib/json/query_parser.y:151
   636  		{
   637  			jqVAL.expression = RowValueExpr{Child: jqDollar[3].expression}
   638  		}
   639  	case 26:
   640  		jqDollar = jqS[jqpt-3 : jqpt+1]
   641  //line lib/json/query_parser.y:157
   642  		{
   643  			jqVAL.expression = TableExpr{Fields: jqDollar[2].fields}
   644  		}
   645  	case 27:
   646  		jqDollar = jqS[jqpt-1 : jqpt+1]
   647  //line lib/json/query_parser.y:163
   648  		{
   649  			jqVAL.field = FieldExpr{Element: jqDollar[1].element}
   650  		}
   651  	case 28:
   652  		jqDollar = jqS[jqpt-3 : jqpt+1]
   653  //line lib/json/query_parser.y:167
   654  		{
   655  			jqVAL.field = FieldExpr{Element: jqDollar[1].element, Alias: jqDollar[3].token.Literal}
   656  		}
   657  	case 29:
   658  		jqDollar = jqS[jqpt-0 : jqpt+1]
   659  //line lib/json/query_parser.y:173
   660  		{
   661  			jqVAL.fields = nil
   662  		}
   663  	case 30:
   664  		jqDollar = jqS[jqpt-1 : jqpt+1]
   665  //line lib/json/query_parser.y:177
   666  		{
   667  			jqVAL.fields = []FieldExpr{jqDollar[1].field}
   668  		}
   669  	case 31:
   670  		jqDollar = jqS[jqpt-3 : jqpt+1]
   671  //line lib/json/query_parser.y:181
   672  		{
   673  			jqVAL.fields = append([]FieldExpr{jqDollar[1].field}, jqDollar[3].fields...)
   674  		}
   675  	}
   676  	goto jqstack /* stack new state and value */
   677  }