github.com/suixinio/gopher-lua@v0.0.0-20230314172526-3c6bff009a9a/parse/parser.go (about)

     1  // Code generated by goyacc -o parser.go parser.go.y. DO NOT EDIT.
     2  
     3  //line parser.go.y:2
     4  package parse
     5  
     6  import __yyfmt__ "fmt"
     7  
     8  //line parser.go.y:2
     9  
    10  import (
    11  	"github.com/suixinio/gopher-lua/ast"
    12  )
    13  
    14  //line parser.go.y:34
    15  type yySymType struct {
    16  	yys   int
    17  	token ast.Token
    18  
    19  	stmts []ast.Stmt
    20  	stmt  ast.Stmt
    21  
    22  	funcname *ast.FuncName
    23  	funcexpr *ast.FunctionExpr
    24  
    25  	exprlist []ast.Expr
    26  	expr     ast.Expr
    27  
    28  	fieldlist []*ast.Field
    29  	field     *ast.Field
    30  	fieldsep  string
    31  
    32  	namelist []string
    33  	parlist  *ast.ParList
    34  }
    35  
    36  const TAnd = 57346
    37  const TBreak = 57347
    38  const TDo = 57348
    39  const TElse = 57349
    40  const TElseIf = 57350
    41  const TEnd = 57351
    42  const TFalse = 57352
    43  const TFor = 57353
    44  const TFunction = 57354
    45  const TIf = 57355
    46  const TIn = 57356
    47  const TLocal = 57357
    48  const TNil = 57358
    49  const TNot = 57359
    50  const TOr = 57360
    51  const TReturn = 57361
    52  const TRepeat = 57362
    53  const TThen = 57363
    54  const TTrue = 57364
    55  const TUntil = 57365
    56  const TWhile = 57366
    57  const TGoto = 57367
    58  const TEqeq = 57368
    59  const TNeq = 57369
    60  const TLte = 57370
    61  const TGte = 57371
    62  const T2Comma = 57372
    63  const T3Comma = 57373
    64  const T2Colon = 57374
    65  const TIdent = 57375
    66  const TNumber = 57376
    67  const TString = 57377
    68  const UNARY = 57378
    69  
    70  var yyToknames = [...]string{
    71  	"$end",
    72  	"error",
    73  	"$unk",
    74  	"TAnd",
    75  	"TBreak",
    76  	"TDo",
    77  	"TElse",
    78  	"TElseIf",
    79  	"TEnd",
    80  	"TFalse",
    81  	"TFor",
    82  	"TFunction",
    83  	"TIf",
    84  	"TIn",
    85  	"TLocal",
    86  	"TNil",
    87  	"TNot",
    88  	"TOr",
    89  	"TReturn",
    90  	"TRepeat",
    91  	"TThen",
    92  	"TTrue",
    93  	"TUntil",
    94  	"TWhile",
    95  	"TGoto",
    96  	"TEqeq",
    97  	"TNeq",
    98  	"TLte",
    99  	"TGte",
   100  	"T2Comma",
   101  	"T3Comma",
   102  	"T2Colon",
   103  	"TIdent",
   104  	"TNumber",
   105  	"TString",
   106  	"'{'",
   107  	"'('",
   108  	"'>'",
   109  	"'<'",
   110  	"'+'",
   111  	"'-'",
   112  	"'*'",
   113  	"'/'",
   114  	"'%'",
   115  	"UNARY",
   116  	"'^'",
   117  	"';'",
   118  	"'='",
   119  	"','",
   120  	"':'",
   121  	"'.'",
   122  	"'['",
   123  	"']'",
   124  	"'#'",
   125  	"')'",
   126  	"'}'",
   127  }
   128  
   129  var yyStatenames = [...]string{}
   130  
   131  const yyEofCode = 1
   132  const yyErrCode = 2
   133  const yyInitialStackSize = 16
   134  
   135  //line parser.go.y:525
   136  
   137  func TokenName(c int) string {
   138  	if c >= TAnd && c-TAnd < len(yyToknames) {
   139  		if yyToknames[c-TAnd] != "" {
   140  			return yyToknames[c-TAnd]
   141  		}
   142  	}
   143  	return string([]byte{byte(c)})
   144  }
   145  
   146  //line yacctab:1
   147  var yyExca = [...]int8{
   148  	-1, 1,
   149  	1, -1,
   150  	-2, 0,
   151  	-1, 19,
   152  	48, 33,
   153  	49, 33,
   154  	-2, 70,
   155  	-1, 97,
   156  	48, 34,
   157  	49, 34,
   158  	-2, 70,
   159  }
   160  
   161  const yyPrivate = 57344
   162  
   163  const yyLast = 616
   164  
   165  var yyAct = [...]uint8{
   166  	26, 92, 52, 25, 47, 88, 158, 58, 142, 118,
   167  	141, 167, 54, 69, 56, 55, 35, 139, 41, 42,
   168  	49, 160, 34, 67, 63, 137, 50, 64, 112, 113,
   169  	69, 109, 51, 48, 46, 45, 147, 85, 86, 87,
   170  	115, 110, 24, 95, 43, 44, 99, 96, 78, 136,
   171  	50, 171, 143, 103, 69, 108, 51, 84, 79, 80,
   172  	81, 82, 83, 89, 84, 111, 110, 41, 42, 49,
   173  	119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
   174  	129, 130, 131, 132, 133, 134, 81, 82, 83, 170,
   175  	84, 153, 155, 33, 154, 144, 9, 138, 40, 23,
   176  	153, 19, 62, 22, 114, 101, 146, 149, 148, 151,
   177  	150, 71, 100, 152, 66, 50, 65, 61, 50, 157,
   178  	156, 51, 57, 64, 51, 70, 116, 106, 192, 21,
   179  	173, 174, 172, 76, 77, 75, 74, 78, 98, 159,
   180  	189, 95, 161, 97, 162, 72, 73, 79, 80, 81,
   181  	82, 83, 68, 84, 184, 183, 177, 169, 164, 104,
   182  	140, 168, 117, 53, 1, 91, 135, 175, 32, 20,
   183  	176, 8, 178, 60, 59, 180, 179, 3, 165, 28,
   184  	4, 39, 2, 187, 186, 27, 37, 0, 188, 0,
   185  	0, 29, 0, 191, 71, 0, 0, 0, 0, 0,
   186  	31, 0, 93, 30, 41, 42, 22, 0, 70, 0,
   187  	36, 0, 0, 0, 0, 0, 76, 77, 75, 74,
   188  	78, 94, 0, 38, 71, 90, 0, 0, 72, 73,
   189  	79, 80, 81, 82, 83, 0, 84, 0, 70, 0,
   190  	0, 0, 0, 163, 0, 0, 76, 77, 75, 74,
   191  	78, 0, 0, 0, 0, 0, 0, 0, 72, 73,
   192  	79, 80, 81, 82, 83, 28, 84, 39, 0, 0,
   193  	0, 27, 37, 145, 0, 0, 0, 29, 0, 0,
   194  	0, 0, 0, 0, 0, 0, 31, 0, 23, 30,
   195  	41, 42, 22, 28, 0, 39, 36, 0, 0, 27,
   196  	37, 0, 0, 0, 0, 29, 0, 0, 0, 38,
   197  	102, 0, 0, 0, 31, 0, 93, 30, 41, 42,
   198  	22, 28, 0, 39, 36, 0, 0, 27, 37, 0,
   199  	0, 0, 0, 29, 0, 94, 71, 38, 181, 0,
   200  	0, 0, 31, 0, 23, 30, 41, 42, 22, 0,
   201  	70, 0, 36, 0, 0, 0, 0, 0, 76, 77,
   202  	75, 74, 78, 71, 0, 38, 0, 0, 0, 0,
   203  	72, 73, 79, 80, 81, 82, 83, 70, 84, 0,
   204  	0, 182, 0, 0, 0, 76, 77, 75, 74, 78,
   205  	71, 0, 190, 0, 0, 0, 0, 72, 73, 79,
   206  	80, 81, 82, 83, 70, 84, 0, 0, 166, 0,
   207  	0, 0, 76, 77, 75, 74, 78, 71, 0, 0,
   208  	0, 0, 0, 0, 72, 73, 79, 80, 81, 82,
   209  	83, 70, 84, 0, 185, 0, 0, 0, 0, 76,
   210  	77, 75, 74, 78, 71, 0, 0, 0, 0, 0,
   211  	0, 72, 73, 79, 80, 81, 82, 83, 70, 84,
   212  	0, 107, 0, 0, 0, 0, 76, 77, 75, 74,
   213  	78, 71, 0, 105, 0, 0, 0, 0, 72, 73,
   214  	79, 80, 81, 82, 83, 70, 84, 0, 0, 0,
   215  	0, 0, 0, 76, 77, 75, 74, 78, 71, 0,
   216  	0, 0, 0, 0, 0, 72, 73, 79, 80, 81,
   217  	82, 83, 70, 84, 0, 0, 0, 0, 0, 0,
   218  	76, 77, 75, 74, 78, 0, 0, 0, 0, 0,
   219  	0, 0, 72, 73, 79, 80, 81, 82, 83, 0,
   220  	84, 7, 10, 0, 0, 0, 0, 14, 15, 13,
   221  	0, 16, 71, 0, 0, 6, 12, 0, 0, 0,
   222  	11, 18, 0, 0, 0, 0, 0, 0, 17, 23,
   223  	0, 0, 0, 22, 76, 77, 75, 74, 78, 0,
   224  	0, 0, 0, 5, 0, 0, 72, 73, 79, 80,
   225  	81, 82, 83, 0, 84, 76, 77, 75, 74, 78,
   226  	0, 0, 0, 0, 0, 0, 0, 72, 73, 79,
   227  	80, 81, 82, 83, 0, 84,
   228  }
   229  
   230  var yyPact = [...]int16{
   231  	-1000, -1000, 536, -5, -1000, -1000, 311, -1000, -4, -17,
   232  	-1000, 311, -1000, 311, 89, 84, 90, 83, 81, -1000,
   233  	-1000, -1000, 311, -1000, -1000, -36, 494, -1000, -1000, -1000,
   234  	-1000, -1000, -1000, -17, -1000, -1000, 311, 311, 311, 26,
   235  	-1000, -1000, 169, 311, 66, 311, 79, -1000, 72, 255,
   236  	-1000, -1000, 150, -1000, 467, 104, 440, 7, 17, 26,
   237  	-22, -1000, 71, -8, -1000, 94, -1000, 107, -46, 311,
   238  	311, 311, 311, 311, 311, 311, 311, 311, 311, 311,
   239  	311, 311, 311, 311, 311, 11, 11, 11, -1000, -6,
   240  	-1000, -39, -1000, 4, 311, 494, -36, -1000, -17, 220,
   241  	-1000, 32, -1000, -19, -1000, -1000, 311, -1000, 311, 311,
   242  	67, -1000, 61, 59, 26, 311, -1000, -1000, -1000, 494,
   243  	548, 569, 18, 18, 18, 18, 18, 18, 18, 44,
   244  	44, 11, 11, 11, 11, -49, -1000, -1000, -28, -1000,
   245  	283, -1000, -1000, 311, 190, -1000, -1000, -1000, 149, 494,
   246  	-1000, 359, 5, -1000, -1000, -1000, -1000, -36, -1000, 148,
   247  	58, -1000, 494, 3, -1000, 123, 311, -1000, 147, -1000,
   248  	-1000, 311, -1000, -1000, 311, 332, 146, -1000, 494, 145,
   249  	413, -1000, 311, -1000, -1000, -1000, 131, 386, -1000, -1000,
   250  	-1000, 119, -1000,
   251  }
   252  
   253  var yyPgo = [...]uint8{
   254  	0, 163, 182, 2, 180, 178, 177, 174, 173, 171,
   255  	98, 7, 3, 0, 22, 93, 129, 169, 4, 168,
   256  	5, 166, 16, 165, 1, 160,
   257  }
   258  
   259  var yyR1 = [...]int8{
   260  	0, 1, 1, 1, 2, 2, 2, 3, 4, 4,
   261  	4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
   262  	4, 4, 4, 4, 5, 5, 6, 6, 6, 7,
   263  	7, 8, 8, 9, 9, 10, 10, 10, 11, 11,
   264  	12, 12, 13, 13, 13, 13, 13, 13, 13, 13,
   265  	13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
   266  	13, 13, 13, 13, 13, 13, 13, 13, 13, 14,
   267  	15, 15, 15, 15, 17, 16, 16, 18, 18, 18,
   268  	18, 19, 20, 20, 21, 21, 21, 22, 22, 23,
   269  	23, 23, 24, 24, 24, 25, 25,
   270  }
   271  
   272  var yyR2 = [...]int8{
   273  	0, 1, 2, 3, 0, 2, 2, 1, 3, 1,
   274  	3, 5, 4, 6, 8, 9, 11, 7, 3, 4,
   275  	4, 2, 3, 2, 0, 5, 1, 2, 1, 1,
   276  	3, 1, 3, 1, 3, 1, 4, 3, 1, 3,
   277  	1, 3, 1, 1, 1, 1, 1, 1, 1, 1,
   278  	1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   279  	3, 3, 3, 3, 3, 3, 2, 2, 2, 1,
   280  	1, 1, 1, 3, 3, 2, 4, 2, 3, 1,
   281  	1, 2, 5, 4, 1, 1, 3, 2, 3, 1,
   282  	3, 2, 3, 5, 1, 1, 1,
   283  }
   284  
   285  var yyChk = [...]int16{
   286  	-1000, -1, -2, -6, -4, 47, 19, 5, -9, -15,
   287  	6, 24, 20, 13, 11, 12, 15, 32, 25, -10,
   288  	-17, -16, 37, 33, 47, -12, -13, 16, 10, 22,
   289  	34, 31, -19, -15, -14, -22, 41, 17, 54, 12,
   290  	-10, 35, 36, 48, 49, 52, 51, -18, 50, 37,
   291  	-22, -14, -3, -1, -13, -3, -13, 33, -11, -7,
   292  	-8, 33, 12, -11, 33, 33, 33, -13, -16, 49,
   293  	18, 4, 38, 39, 29, 28, 26, 27, 30, 40,
   294  	41, 42, 43, 44, 46, -13, -13, -13, -20, 37,
   295  	56, -23, -24, 33, 52, -13, -12, -10, -15, -13,
   296  	33, 33, 55, -12, 9, 6, 23, 21, 48, 14,
   297  	49, -20, 50, 51, 33, 48, 32, 55, 55, -13,
   298  	-13, -13, -13, -13, -13, -13, -13, -13, -13, -13,
   299  	-13, -13, -13, -13, -13, -21, 55, 31, -11, 56,
   300  	-25, 49, 47, 48, -13, 53, -18, 55, -3, -13,
   301  	-3, -13, -12, 33, 33, 33, -20, -12, 55, -3,
   302  	49, -24, -13, 53, 9, -5, 49, 6, -3, 9,
   303  	31, 48, 9, 7, 8, -13, -3, 9, -13, -3,
   304  	-13, 6, 49, 9, 9, 21, -3, -13, -3, 9,
   305  	6, -3, 9,
   306  }
   307  
   308  var yyDef = [...]int8{
   309  	4, -2, 1, 2, 5, 6, 26, 28, 0, 9,
   310  	4, 0, 4, 0, 0, 0, 0, 0, 0, -2,
   311  	71, 72, 0, 35, 3, 27, 40, 42, 43, 44,
   312  	45, 46, 47, 48, 49, 50, 0, 0, 0, 0,
   313  	70, 69, 0, 0, 0, 0, 0, 75, 0, 0,
   314  	79, 80, 0, 7, 0, 0, 0, 38, 0, 0,
   315  	29, 31, 0, 21, 38, 0, 23, 0, 72, 0,
   316  	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
   317  	0, 0, 0, 0, 0, 66, 67, 68, 81, 0,
   318  	87, 0, 89, 35, 0, 94, 8, -2, 0, 0,
   319  	37, 0, 77, 0, 10, 4, 0, 4, 0, 0,
   320  	0, 18, 0, 0, 0, 0, 22, 73, 74, 41,
   321  	51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
   322  	61, 62, 63, 64, 65, 0, 4, 84, 85, 88,
   323  	91, 95, 96, 0, 0, 36, 76, 78, 0, 12,
   324  	24, 0, 0, 39, 30, 32, 19, 20, 4, 0,
   325  	0, 90, 92, 0, 11, 0, 0, 4, 0, 83,
   326  	86, 0, 13, 4, 0, 0, 0, 82, 93, 0,
   327  	0, 4, 0, 17, 14, 4, 0, 0, 25, 15,
   328  	4, 0, 16,
   329  }
   330  
   331  var yyTok1 = [...]int8{
   332  	1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   333  	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   334  	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   335  	3, 3, 3, 3, 3, 54, 3, 44, 3, 3,
   336  	37, 55, 42, 40, 49, 41, 51, 43, 3, 3,
   337  	3, 3, 3, 3, 3, 3, 3, 3, 50, 47,
   338  	39, 48, 38, 3, 3, 3, 3, 3, 3, 3,
   339  	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   340  	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   341  	3, 52, 3, 53, 46, 3, 3, 3, 3, 3,
   342  	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   343  	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   344  	3, 3, 3, 36, 3, 56,
   345  }
   346  
   347  var yyTok2 = [...]int8{
   348  	2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
   349  	12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
   350  	22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
   351  	32, 33, 34, 35, 45,
   352  }
   353  
   354  var yyTok3 = [...]int8{
   355  	0,
   356  }
   357  
   358  var yyErrorMessages = [...]struct {
   359  	state int
   360  	token int
   361  	msg   string
   362  }{}
   363  
   364  //line yaccpar:1
   365  
   366  /*	parser for yacc output	*/
   367  
   368  var (
   369  	yyDebug        = 0
   370  	yyErrorVerbose = false
   371  )
   372  
   373  type yyLexer interface {
   374  	Lex(lval *yySymType) int
   375  	Error(s string)
   376  }
   377  
   378  type yyParser interface {
   379  	Parse(yyLexer) int
   380  	Lookahead() int
   381  }
   382  
   383  type yyParserImpl struct {
   384  	lval  yySymType
   385  	stack [yyInitialStackSize]yySymType
   386  	char  int
   387  }
   388  
   389  func (p *yyParserImpl) Lookahead() int {
   390  	return p.char
   391  }
   392  
   393  func yyNewParser() yyParser {
   394  	return &yyParserImpl{}
   395  }
   396  
   397  const yyFlag = -1000
   398  
   399  func yyTokname(c int) string {
   400  	if c >= 1 && c-1 < len(yyToknames) {
   401  		if yyToknames[c-1] != "" {
   402  			return yyToknames[c-1]
   403  		}
   404  	}
   405  	return __yyfmt__.Sprintf("tok-%v", c)
   406  }
   407  
   408  func yyStatname(s int) string {
   409  	if s >= 0 && s < len(yyStatenames) {
   410  		if yyStatenames[s] != "" {
   411  			return yyStatenames[s]
   412  		}
   413  	}
   414  	return __yyfmt__.Sprintf("state-%v", s)
   415  }
   416  
   417  func yyErrorMessage(state, lookAhead int) string {
   418  	const TOKSTART = 4
   419  
   420  	if !yyErrorVerbose {
   421  		return "syntax error"
   422  	}
   423  
   424  	for _, e := range yyErrorMessages {
   425  		if e.state == state && e.token == lookAhead {
   426  			return "syntax error: " + e.msg
   427  		}
   428  	}
   429  
   430  	res := "syntax error: unexpected " + yyTokname(lookAhead)
   431  
   432  	// To match Bison, suggest at most four expected tokens.
   433  	expected := make([]int, 0, 4)
   434  
   435  	// Look for shiftable tokens.
   436  	base := int(yyPact[state])
   437  	for tok := TOKSTART; tok-1 < len(yyToknames); tok++ {
   438  		if n := base + tok; n >= 0 && n < yyLast && int(yyChk[int(yyAct[n])]) == tok {
   439  			if len(expected) == cap(expected) {
   440  				return res
   441  			}
   442  			expected = append(expected, tok)
   443  		}
   444  	}
   445  
   446  	if yyDef[state] == -2 {
   447  		i := 0
   448  		for yyExca[i] != -1 || int(yyExca[i+1]) != state {
   449  			i += 2
   450  		}
   451  
   452  		// Look for tokens that we accept or reduce.
   453  		for i += 2; yyExca[i] >= 0; i += 2 {
   454  			tok := int(yyExca[i])
   455  			if tok < TOKSTART || yyExca[i+1] == 0 {
   456  				continue
   457  			}
   458  			if len(expected) == cap(expected) {
   459  				return res
   460  			}
   461  			expected = append(expected, tok)
   462  		}
   463  
   464  		// If the default action is to accept or reduce, give up.
   465  		if yyExca[i+1] != 0 {
   466  			return res
   467  		}
   468  	}
   469  
   470  	for i, tok := range expected {
   471  		if i == 0 {
   472  			res += ", expecting "
   473  		} else {
   474  			res += " or "
   475  		}
   476  		res += yyTokname(tok)
   477  	}
   478  	return res
   479  }
   480  
   481  func yylex1(lex yyLexer, lval *yySymType) (char, token int) {
   482  	token = 0
   483  	char = lex.Lex(lval)
   484  	if char <= 0 {
   485  		token = int(yyTok1[0])
   486  		goto out
   487  	}
   488  	if char < len(yyTok1) {
   489  		token = int(yyTok1[char])
   490  		goto out
   491  	}
   492  	if char >= yyPrivate {
   493  		if char < yyPrivate+len(yyTok2) {
   494  			token = int(yyTok2[char-yyPrivate])
   495  			goto out
   496  		}
   497  	}
   498  	for i := 0; i < len(yyTok3); i += 2 {
   499  		token = int(yyTok3[i+0])
   500  		if token == char {
   501  			token = int(yyTok3[i+1])
   502  			goto out
   503  		}
   504  	}
   505  
   506  out:
   507  	if token == 0 {
   508  		token = int(yyTok2[1]) /* unknown char */
   509  	}
   510  	if yyDebug >= 3 {
   511  		__yyfmt__.Printf("lex %s(%d)\n", yyTokname(token), uint(char))
   512  	}
   513  	return char, token
   514  }
   515  
   516  func yyParse(yylex yyLexer) int {
   517  	return yyNewParser().Parse(yylex)
   518  }
   519  
   520  func (yyrcvr *yyParserImpl) Parse(yylex yyLexer) int {
   521  	var yyn int
   522  	var yyVAL yySymType
   523  	var yyDollar []yySymType
   524  	_ = yyDollar // silence set and not used
   525  	yyS := yyrcvr.stack[:]
   526  
   527  	Nerrs := 0   /* number of errors */
   528  	Errflag := 0 /* error recovery flag */
   529  	yystate := 0
   530  	yyrcvr.char = -1
   531  	yytoken := -1 // yyrcvr.char translated into internal numbering
   532  	defer func() {
   533  		// Make sure we report no lookahead when not parsing.
   534  		yystate = -1
   535  		yyrcvr.char = -1
   536  		yytoken = -1
   537  	}()
   538  	yyp := -1
   539  	goto yystack
   540  
   541  ret0:
   542  	return 0
   543  
   544  ret1:
   545  	return 1
   546  
   547  yystack:
   548  	/* put a state and value onto the stack */
   549  	if yyDebug >= 4 {
   550  		__yyfmt__.Printf("char %v in %v\n", yyTokname(yytoken), yyStatname(yystate))
   551  	}
   552  
   553  	yyp++
   554  	if yyp >= len(yyS) {
   555  		nyys := make([]yySymType, len(yyS)*2)
   556  		copy(nyys, yyS)
   557  		yyS = nyys
   558  	}
   559  	yyS[yyp] = yyVAL
   560  	yyS[yyp].yys = yystate
   561  
   562  yynewstate:
   563  	yyn = int(yyPact[yystate])
   564  	if yyn <= yyFlag {
   565  		goto yydefault /* simple state */
   566  	}
   567  	if yyrcvr.char < 0 {
   568  		yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval)
   569  	}
   570  	yyn += yytoken
   571  	if yyn < 0 || yyn >= yyLast {
   572  		goto yydefault
   573  	}
   574  	yyn = int(yyAct[yyn])
   575  	if int(yyChk[yyn]) == yytoken { /* valid shift */
   576  		yyrcvr.char = -1
   577  		yytoken = -1
   578  		yyVAL = yyrcvr.lval
   579  		yystate = yyn
   580  		if Errflag > 0 {
   581  			Errflag--
   582  		}
   583  		goto yystack
   584  	}
   585  
   586  yydefault:
   587  	/* default state action */
   588  	yyn = int(yyDef[yystate])
   589  	if yyn == -2 {
   590  		if yyrcvr.char < 0 {
   591  			yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval)
   592  		}
   593  
   594  		/* look through exception table */
   595  		xi := 0
   596  		for {
   597  			if yyExca[xi+0] == -1 && int(yyExca[xi+1]) == yystate {
   598  				break
   599  			}
   600  			xi += 2
   601  		}
   602  		for xi += 2; ; xi += 2 {
   603  			yyn = int(yyExca[xi+0])
   604  			if yyn < 0 || yyn == yytoken {
   605  				break
   606  			}
   607  		}
   608  		yyn = int(yyExca[xi+1])
   609  		if yyn < 0 {
   610  			goto ret0
   611  		}
   612  	}
   613  	if yyn == 0 {
   614  		/* error ... attempt to resume parsing */
   615  		switch Errflag {
   616  		case 0: /* brand new error */
   617  			yylex.Error(yyErrorMessage(yystate, yytoken))
   618  			Nerrs++
   619  			if yyDebug >= 1 {
   620  				__yyfmt__.Printf("%s", yyStatname(yystate))
   621  				__yyfmt__.Printf(" saw %s\n", yyTokname(yytoken))
   622  			}
   623  			fallthrough
   624  
   625  		case 1, 2: /* incompletely recovered error ... try again */
   626  			Errflag = 3
   627  
   628  			/* find a state where "error" is a legal shift action */
   629  			for yyp >= 0 {
   630  				yyn = int(yyPact[yyS[yyp].yys]) + yyErrCode
   631  				if yyn >= 0 && yyn < yyLast {
   632  					yystate = int(yyAct[yyn]) /* simulate a shift of "error" */
   633  					if int(yyChk[yystate]) == yyErrCode {
   634  						goto yystack
   635  					}
   636  				}
   637  
   638  				/* the current p has no shift on "error", pop stack */
   639  				if yyDebug >= 2 {
   640  					__yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys)
   641  				}
   642  				yyp--
   643  			}
   644  			/* there is no state on the stack with an error shift ... abort */
   645  			goto ret1
   646  
   647  		case 3: /* no shift yet; clobber input char */
   648  			if yyDebug >= 2 {
   649  				__yyfmt__.Printf("error recovery discards %s\n", yyTokname(yytoken))
   650  			}
   651  			if yytoken == yyEofCode {
   652  				goto ret1
   653  			}
   654  			yyrcvr.char = -1
   655  			yytoken = -1
   656  			goto yynewstate /* try again in the same state */
   657  		}
   658  	}
   659  
   660  	/* reduction by production yyn */
   661  	if yyDebug >= 2 {
   662  		__yyfmt__.Printf("reduce %v in:\n\t%v\n", yyn, yyStatname(yystate))
   663  	}
   664  
   665  	yynt := yyn
   666  	yypt := yyp
   667  	_ = yypt // guard against "declared and not used"
   668  
   669  	yyp -= int(yyR2[yyn])
   670  	// yyp is now the index of $0. Perform the default action. Iff the
   671  	// reduced production is ε, $1 is possibly out of range.
   672  	if yyp+1 >= len(yyS) {
   673  		nyys := make([]yySymType, len(yyS)*2)
   674  		copy(nyys, yyS)
   675  		yyS = nyys
   676  	}
   677  	yyVAL = yyS[yyp+1]
   678  
   679  	/* consult goto table to find next state */
   680  	yyn = int(yyR1[yyn])
   681  	yyg := int(yyPgo[yyn])
   682  	yyj := yyg + yyS[yyp].yys + 1
   683  
   684  	if yyj >= yyLast {
   685  		yystate = int(yyAct[yyg])
   686  	} else {
   687  		yystate = int(yyAct[yyj])
   688  		if int(yyChk[yystate]) != -yyn {
   689  			yystate = int(yyAct[yyg])
   690  		}
   691  	}
   692  	// dummy call; replaced with literal code
   693  	switch yynt {
   694  
   695  	case 1:
   696  		yyDollar = yyS[yypt-1 : yypt+1]
   697  //line parser.go.y:73
   698  		{
   699  			yyVAL.stmts = yyDollar[1].stmts
   700  			if l, ok := yylex.(*Lexer); ok {
   701  				l.Stmts = yyVAL.stmts
   702  			}
   703  		}
   704  	case 2:
   705  		yyDollar = yyS[yypt-2 : yypt+1]
   706  //line parser.go.y:79
   707  		{
   708  			yyVAL.stmts = append(yyDollar[1].stmts, yyDollar[2].stmt)
   709  			if l, ok := yylex.(*Lexer); ok {
   710  				l.Stmts = yyVAL.stmts
   711  			}
   712  		}
   713  	case 3:
   714  		yyDollar = yyS[yypt-3 : yypt+1]
   715  //line parser.go.y:85
   716  		{
   717  			yyVAL.stmts = append(yyDollar[1].stmts, yyDollar[2].stmt)
   718  			if l, ok := yylex.(*Lexer); ok {
   719  				l.Stmts = yyVAL.stmts
   720  			}
   721  		}
   722  	case 4:
   723  		yyDollar = yyS[yypt-0 : yypt+1]
   724  //line parser.go.y:93
   725  		{
   726  			yyVAL.stmts = []ast.Stmt{}
   727  		}
   728  	case 5:
   729  		yyDollar = yyS[yypt-2 : yypt+1]
   730  //line parser.go.y:96
   731  		{
   732  			yyVAL.stmts = append(yyDollar[1].stmts, yyDollar[2].stmt)
   733  		}
   734  	case 6:
   735  		yyDollar = yyS[yypt-2 : yypt+1]
   736  //line parser.go.y:99
   737  		{
   738  			yyVAL.stmts = yyDollar[1].stmts
   739  		}
   740  	case 7:
   741  		yyDollar = yyS[yypt-1 : yypt+1]
   742  //line parser.go.y:104
   743  		{
   744  			yyVAL.stmts = yyDollar[1].stmts
   745  		}
   746  	case 8:
   747  		yyDollar = yyS[yypt-3 : yypt+1]
   748  //line parser.go.y:109
   749  		{
   750  			yyVAL.stmt = &ast.AssignStmt{Lhs: yyDollar[1].exprlist, Rhs: yyDollar[3].exprlist}
   751  			yyVAL.stmt.SetLine(yyDollar[1].exprlist[0].Line())
   752  		}
   753  	case 9:
   754  		yyDollar = yyS[yypt-1 : yypt+1]
   755  //line parser.go.y:114
   756  		{
   757  			if _, ok := yyDollar[1].expr.(*ast.FuncCallExpr); !ok {
   758  				yylex.(*Lexer).Error("parse error")
   759  			} else {
   760  				yyVAL.stmt = &ast.FuncCallStmt{Expr: yyDollar[1].expr}
   761  				yyVAL.stmt.SetLine(yyDollar[1].expr.Line())
   762  			}
   763  		}
   764  	case 10:
   765  		yyDollar = yyS[yypt-3 : yypt+1]
   766  //line parser.go.y:122
   767  		{
   768  			yyVAL.stmt = &ast.DoBlockStmt{Stmts: yyDollar[2].stmts}
   769  			yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line)
   770  			yyVAL.stmt.SetLastLine(yyDollar[3].token.Pos.Line)
   771  		}
   772  	case 11:
   773  		yyDollar = yyS[yypt-5 : yypt+1]
   774  //line parser.go.y:127
   775  		{
   776  			yyVAL.stmt = &ast.WhileStmt{Condition: yyDollar[2].expr, Stmts: yyDollar[4].stmts}
   777  			yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line)
   778  			yyVAL.stmt.SetLastLine(yyDollar[5].token.Pos.Line)
   779  		}
   780  	case 12:
   781  		yyDollar = yyS[yypt-4 : yypt+1]
   782  //line parser.go.y:132
   783  		{
   784  			yyVAL.stmt = &ast.RepeatStmt{Condition: yyDollar[4].expr, Stmts: yyDollar[2].stmts}
   785  			yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line)
   786  			yyVAL.stmt.SetLastLine(yyDollar[4].expr.Line())
   787  		}
   788  	case 13:
   789  		yyDollar = yyS[yypt-6 : yypt+1]
   790  //line parser.go.y:137
   791  		{
   792  			yyVAL.stmt = &ast.IfStmt{Condition: yyDollar[2].expr, Then: yyDollar[4].stmts}
   793  			cur := yyVAL.stmt
   794  			for _, elseif := range yyDollar[5].stmts {
   795  				cur.(*ast.IfStmt).Else = []ast.Stmt{elseif}
   796  				cur = elseif
   797  			}
   798  			yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line)
   799  			yyVAL.stmt.SetLastLine(yyDollar[6].token.Pos.Line)
   800  		}
   801  	case 14:
   802  		yyDollar = yyS[yypt-8 : yypt+1]
   803  //line parser.go.y:147
   804  		{
   805  			yyVAL.stmt = &ast.IfStmt{Condition: yyDollar[2].expr, Then: yyDollar[4].stmts}
   806  			cur := yyVAL.stmt
   807  			for _, elseif := range yyDollar[5].stmts {
   808  				cur.(*ast.IfStmt).Else = []ast.Stmt{elseif}
   809  				cur = elseif
   810  			}
   811  			cur.(*ast.IfStmt).Else = yyDollar[7].stmts
   812  			yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line)
   813  			yyVAL.stmt.SetLastLine(yyDollar[8].token.Pos.Line)
   814  		}
   815  	case 15:
   816  		yyDollar = yyS[yypt-9 : yypt+1]
   817  //line parser.go.y:158
   818  		{
   819  			yyVAL.stmt = &ast.NumberForStmt{Name: yyDollar[2].token.Str, Init: yyDollar[4].expr, Limit: yyDollar[6].expr, Stmts: yyDollar[8].stmts}
   820  			yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line)
   821  			yyVAL.stmt.SetLastLine(yyDollar[9].token.Pos.Line)
   822  		}
   823  	case 16:
   824  		yyDollar = yyS[yypt-11 : yypt+1]
   825  //line parser.go.y:163
   826  		{
   827  			yyVAL.stmt = &ast.NumberForStmt{Name: yyDollar[2].token.Str, Init: yyDollar[4].expr, Limit: yyDollar[6].expr, Step: yyDollar[8].expr, Stmts: yyDollar[10].stmts}
   828  			yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line)
   829  			yyVAL.stmt.SetLastLine(yyDollar[11].token.Pos.Line)
   830  		}
   831  	case 17:
   832  		yyDollar = yyS[yypt-7 : yypt+1]
   833  //line parser.go.y:168
   834  		{
   835  			yyVAL.stmt = &ast.GenericForStmt{Names: yyDollar[2].namelist, Exprs: yyDollar[4].exprlist, Stmts: yyDollar[6].stmts}
   836  			yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line)
   837  			yyVAL.stmt.SetLastLine(yyDollar[7].token.Pos.Line)
   838  		}
   839  	case 18:
   840  		yyDollar = yyS[yypt-3 : yypt+1]
   841  //line parser.go.y:173
   842  		{
   843  			yyVAL.stmt = &ast.FuncDefStmt{Name: yyDollar[2].funcname, Func: yyDollar[3].funcexpr}
   844  			yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line)
   845  			yyVAL.stmt.SetLastLine(yyDollar[3].funcexpr.LastLine())
   846  		}
   847  	case 19:
   848  		yyDollar = yyS[yypt-4 : yypt+1]
   849  //line parser.go.y:178
   850  		{
   851  			yyVAL.stmt = &ast.LocalAssignStmt{Names: []string{yyDollar[3].token.Str}, Exprs: []ast.Expr{yyDollar[4].funcexpr}}
   852  			yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line)
   853  			yyVAL.stmt.SetLastLine(yyDollar[4].funcexpr.LastLine())
   854  		}
   855  	case 20:
   856  		yyDollar = yyS[yypt-4 : yypt+1]
   857  //line parser.go.y:183
   858  		{
   859  			yyVAL.stmt = &ast.LocalAssignStmt{Names: yyDollar[2].namelist, Exprs: yyDollar[4].exprlist}
   860  			yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line)
   861  		}
   862  	case 21:
   863  		yyDollar = yyS[yypt-2 : yypt+1]
   864  //line parser.go.y:187
   865  		{
   866  			yyVAL.stmt = &ast.LocalAssignStmt{Names: yyDollar[2].namelist, Exprs: []ast.Expr{}}
   867  			yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line)
   868  		}
   869  	case 22:
   870  		yyDollar = yyS[yypt-3 : yypt+1]
   871  //line parser.go.y:191
   872  		{
   873  			yyVAL.stmt = &ast.LabelStmt{Name: yyDollar[2].token.Str}
   874  			yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line)
   875  		}
   876  	case 23:
   877  		yyDollar = yyS[yypt-2 : yypt+1]
   878  //line parser.go.y:195
   879  		{
   880  			yyVAL.stmt = &ast.GotoStmt{Label: yyDollar[2].token.Str}
   881  			yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line)
   882  		}
   883  	case 24:
   884  		yyDollar = yyS[yypt-0 : yypt+1]
   885  //line parser.go.y:201
   886  		{
   887  			yyVAL.stmts = []ast.Stmt{}
   888  		}
   889  	case 25:
   890  		yyDollar = yyS[yypt-5 : yypt+1]
   891  //line parser.go.y:204
   892  		{
   893  			yyVAL.stmts = append(yyDollar[1].stmts, &ast.IfStmt{Condition: yyDollar[3].expr, Then: yyDollar[5].stmts})
   894  			yyVAL.stmts[len(yyVAL.stmts)-1].SetLine(yyDollar[2].token.Pos.Line)
   895  		}
   896  	case 26:
   897  		yyDollar = yyS[yypt-1 : yypt+1]
   898  //line parser.go.y:210
   899  		{
   900  			yyVAL.stmt = &ast.ReturnStmt{Exprs: nil}
   901  			yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line)
   902  		}
   903  	case 27:
   904  		yyDollar = yyS[yypt-2 : yypt+1]
   905  //line parser.go.y:214
   906  		{
   907  			yyVAL.stmt = &ast.ReturnStmt{Exprs: yyDollar[2].exprlist}
   908  			yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line)
   909  		}
   910  	case 28:
   911  		yyDollar = yyS[yypt-1 : yypt+1]
   912  //line parser.go.y:218
   913  		{
   914  			yyVAL.stmt = &ast.BreakStmt{}
   915  			yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line)
   916  		}
   917  	case 29:
   918  		yyDollar = yyS[yypt-1 : yypt+1]
   919  //line parser.go.y:224
   920  		{
   921  			yyVAL.funcname = yyDollar[1].funcname
   922  		}
   923  	case 30:
   924  		yyDollar = yyS[yypt-3 : yypt+1]
   925  //line parser.go.y:227
   926  		{
   927  			yyVAL.funcname = &ast.FuncName{Func: nil, Receiver: yyDollar[1].funcname.Func, Method: yyDollar[3].token.Str}
   928  		}
   929  	case 31:
   930  		yyDollar = yyS[yypt-1 : yypt+1]
   931  //line parser.go.y:232
   932  		{
   933  			yyVAL.funcname = &ast.FuncName{Func: &ast.IdentExpr{Value: yyDollar[1].token.Str}}
   934  			yyVAL.funcname.Func.SetLine(yyDollar[1].token.Pos.Line)
   935  		}
   936  	case 32:
   937  		yyDollar = yyS[yypt-3 : yypt+1]
   938  //line parser.go.y:236
   939  		{
   940  			key := &ast.StringExpr{Value: yyDollar[3].token.Str}
   941  			key.SetLine(yyDollar[3].token.Pos.Line)
   942  			fn := &ast.AttrGetExpr{Object: yyDollar[1].funcname.Func, Key: key}
   943  			fn.SetLine(yyDollar[3].token.Pos.Line)
   944  			yyVAL.funcname = &ast.FuncName{Func: fn}
   945  		}
   946  	case 33:
   947  		yyDollar = yyS[yypt-1 : yypt+1]
   948  //line parser.go.y:245
   949  		{
   950  			yyVAL.exprlist = []ast.Expr{yyDollar[1].expr}
   951  		}
   952  	case 34:
   953  		yyDollar = yyS[yypt-3 : yypt+1]
   954  //line parser.go.y:248
   955  		{
   956  			yyVAL.exprlist = append(yyDollar[1].exprlist, yyDollar[3].expr)
   957  		}
   958  	case 35:
   959  		yyDollar = yyS[yypt-1 : yypt+1]
   960  //line parser.go.y:253
   961  		{
   962  			yyVAL.expr = &ast.IdentExpr{Value: yyDollar[1].token.Str}
   963  			yyVAL.expr.SetLine(yyDollar[1].token.Pos.Line)
   964  		}
   965  	case 36:
   966  		yyDollar = yyS[yypt-4 : yypt+1]
   967  //line parser.go.y:257
   968  		{
   969  			yyVAL.expr = &ast.AttrGetExpr{Object: yyDollar[1].expr, Key: yyDollar[3].expr}
   970  			yyVAL.expr.SetLine(yyDollar[1].expr.Line())
   971  		}
   972  	case 37:
   973  		yyDollar = yyS[yypt-3 : yypt+1]
   974  //line parser.go.y:261
   975  		{
   976  			key := &ast.StringExpr{Value: yyDollar[3].token.Str}
   977  			key.SetLine(yyDollar[3].token.Pos.Line)
   978  			yyVAL.expr = &ast.AttrGetExpr{Object: yyDollar[1].expr, Key: key}
   979  			yyVAL.expr.SetLine(yyDollar[1].expr.Line())
   980  		}
   981  	case 38:
   982  		yyDollar = yyS[yypt-1 : yypt+1]
   983  //line parser.go.y:269
   984  		{
   985  			yyVAL.namelist = []string{yyDollar[1].token.Str}
   986  		}
   987  	case 39:
   988  		yyDollar = yyS[yypt-3 : yypt+1]
   989  //line parser.go.y:272
   990  		{
   991  			yyVAL.namelist = append(yyDollar[1].namelist, yyDollar[3].token.Str)
   992  		}
   993  	case 40:
   994  		yyDollar = yyS[yypt-1 : yypt+1]
   995  //line parser.go.y:277
   996  		{
   997  			yyVAL.exprlist = []ast.Expr{yyDollar[1].expr}
   998  		}
   999  	case 41:
  1000  		yyDollar = yyS[yypt-3 : yypt+1]
  1001  //line parser.go.y:280
  1002  		{
  1003  			yyVAL.exprlist = append(yyDollar[1].exprlist, yyDollar[3].expr)
  1004  		}
  1005  	case 42:
  1006  		yyDollar = yyS[yypt-1 : yypt+1]
  1007  //line parser.go.y:285
  1008  		{
  1009  			yyVAL.expr = &ast.NilExpr{}
  1010  			yyVAL.expr.SetLine(yyDollar[1].token.Pos.Line)
  1011  		}
  1012  	case 43:
  1013  		yyDollar = yyS[yypt-1 : yypt+1]
  1014  //line parser.go.y:289
  1015  		{
  1016  			yyVAL.expr = &ast.FalseExpr{}
  1017  			yyVAL.expr.SetLine(yyDollar[1].token.Pos.Line)
  1018  		}
  1019  	case 44:
  1020  		yyDollar = yyS[yypt-1 : yypt+1]
  1021  //line parser.go.y:293
  1022  		{
  1023  			yyVAL.expr = &ast.TrueExpr{}
  1024  			yyVAL.expr.SetLine(yyDollar[1].token.Pos.Line)
  1025  		}
  1026  	case 45:
  1027  		yyDollar = yyS[yypt-1 : yypt+1]
  1028  //line parser.go.y:297
  1029  		{
  1030  			yyVAL.expr = &ast.NumberExpr{Value: yyDollar[1].token.Str}
  1031  			yyVAL.expr.SetLine(yyDollar[1].token.Pos.Line)
  1032  		}
  1033  	case 46:
  1034  		yyDollar = yyS[yypt-1 : yypt+1]
  1035  //line parser.go.y:301
  1036  		{
  1037  			yyVAL.expr = &ast.Comma3Expr{}
  1038  			yyVAL.expr.SetLine(yyDollar[1].token.Pos.Line)
  1039  		}
  1040  	case 47:
  1041  		yyDollar = yyS[yypt-1 : yypt+1]
  1042  //line parser.go.y:305
  1043  		{
  1044  			yyVAL.expr = yyDollar[1].expr
  1045  		}
  1046  	case 48:
  1047  		yyDollar = yyS[yypt-1 : yypt+1]
  1048  //line parser.go.y:308
  1049  		{
  1050  			yyVAL.expr = yyDollar[1].expr
  1051  		}
  1052  	case 49:
  1053  		yyDollar = yyS[yypt-1 : yypt+1]
  1054  //line parser.go.y:311
  1055  		{
  1056  			yyVAL.expr = yyDollar[1].expr
  1057  		}
  1058  	case 50:
  1059  		yyDollar = yyS[yypt-1 : yypt+1]
  1060  //line parser.go.y:314
  1061  		{
  1062  			yyVAL.expr = yyDollar[1].expr
  1063  		}
  1064  	case 51:
  1065  		yyDollar = yyS[yypt-3 : yypt+1]
  1066  //line parser.go.y:317
  1067  		{
  1068  			yyVAL.expr = &ast.LogicalOpExpr{Lhs: yyDollar[1].expr, Operator: "or", Rhs: yyDollar[3].expr}
  1069  			yyVAL.expr.SetLine(yyDollar[1].expr.Line())
  1070  		}
  1071  	case 52:
  1072  		yyDollar = yyS[yypt-3 : yypt+1]
  1073  //line parser.go.y:321
  1074  		{
  1075  			yyVAL.expr = &ast.LogicalOpExpr{Lhs: yyDollar[1].expr, Operator: "and", Rhs: yyDollar[3].expr}
  1076  			yyVAL.expr.SetLine(yyDollar[1].expr.Line())
  1077  		}
  1078  	case 53:
  1079  		yyDollar = yyS[yypt-3 : yypt+1]
  1080  //line parser.go.y:325
  1081  		{
  1082  			yyVAL.expr = &ast.RelationalOpExpr{Lhs: yyDollar[1].expr, Operator: ">", Rhs: yyDollar[3].expr}
  1083  			yyVAL.expr.SetLine(yyDollar[1].expr.Line())
  1084  		}
  1085  	case 54:
  1086  		yyDollar = yyS[yypt-3 : yypt+1]
  1087  //line parser.go.y:329
  1088  		{
  1089  			yyVAL.expr = &ast.RelationalOpExpr{Lhs: yyDollar[1].expr, Operator: "<", Rhs: yyDollar[3].expr}
  1090  			yyVAL.expr.SetLine(yyDollar[1].expr.Line())
  1091  		}
  1092  	case 55:
  1093  		yyDollar = yyS[yypt-3 : yypt+1]
  1094  //line parser.go.y:333
  1095  		{
  1096  			yyVAL.expr = &ast.RelationalOpExpr{Lhs: yyDollar[1].expr, Operator: ">=", Rhs: yyDollar[3].expr}
  1097  			yyVAL.expr.SetLine(yyDollar[1].expr.Line())
  1098  		}
  1099  	case 56:
  1100  		yyDollar = yyS[yypt-3 : yypt+1]
  1101  //line parser.go.y:337
  1102  		{
  1103  			yyVAL.expr = &ast.RelationalOpExpr{Lhs: yyDollar[1].expr, Operator: "<=", Rhs: yyDollar[3].expr}
  1104  			yyVAL.expr.SetLine(yyDollar[1].expr.Line())
  1105  		}
  1106  	case 57:
  1107  		yyDollar = yyS[yypt-3 : yypt+1]
  1108  //line parser.go.y:341
  1109  		{
  1110  			yyVAL.expr = &ast.RelationalOpExpr{Lhs: yyDollar[1].expr, Operator: "==", Rhs: yyDollar[3].expr}
  1111  			yyVAL.expr.SetLine(yyDollar[1].expr.Line())
  1112  		}
  1113  	case 58:
  1114  		yyDollar = yyS[yypt-3 : yypt+1]
  1115  //line parser.go.y:345
  1116  		{
  1117  			yyVAL.expr = &ast.RelationalOpExpr{Lhs: yyDollar[1].expr, Operator: "~=", Rhs: yyDollar[3].expr}
  1118  			yyVAL.expr.SetLine(yyDollar[1].expr.Line())
  1119  		}
  1120  	case 59:
  1121  		yyDollar = yyS[yypt-3 : yypt+1]
  1122  //line parser.go.y:349
  1123  		{
  1124  			yyVAL.expr = &ast.StringConcatOpExpr{Lhs: yyDollar[1].expr, Rhs: yyDollar[3].expr}
  1125  			yyVAL.expr.SetLine(yyDollar[1].expr.Line())
  1126  		}
  1127  	case 60:
  1128  		yyDollar = yyS[yypt-3 : yypt+1]
  1129  //line parser.go.y:353
  1130  		{
  1131  			yyVAL.expr = &ast.ArithmeticOpExpr{Lhs: yyDollar[1].expr, Operator: "+", Rhs: yyDollar[3].expr}
  1132  			yyVAL.expr.SetLine(yyDollar[1].expr.Line())
  1133  		}
  1134  	case 61:
  1135  		yyDollar = yyS[yypt-3 : yypt+1]
  1136  //line parser.go.y:357
  1137  		{
  1138  			yyVAL.expr = &ast.ArithmeticOpExpr{Lhs: yyDollar[1].expr, Operator: "-", Rhs: yyDollar[3].expr}
  1139  			yyVAL.expr.SetLine(yyDollar[1].expr.Line())
  1140  		}
  1141  	case 62:
  1142  		yyDollar = yyS[yypt-3 : yypt+1]
  1143  //line parser.go.y:361
  1144  		{
  1145  			yyVAL.expr = &ast.ArithmeticOpExpr{Lhs: yyDollar[1].expr, Operator: "*", Rhs: yyDollar[3].expr}
  1146  			yyVAL.expr.SetLine(yyDollar[1].expr.Line())
  1147  		}
  1148  	case 63:
  1149  		yyDollar = yyS[yypt-3 : yypt+1]
  1150  //line parser.go.y:365
  1151  		{
  1152  			yyVAL.expr = &ast.ArithmeticOpExpr{Lhs: yyDollar[1].expr, Operator: "/", Rhs: yyDollar[3].expr}
  1153  			yyVAL.expr.SetLine(yyDollar[1].expr.Line())
  1154  		}
  1155  	case 64:
  1156  		yyDollar = yyS[yypt-3 : yypt+1]
  1157  //line parser.go.y:369
  1158  		{
  1159  			yyVAL.expr = &ast.ArithmeticOpExpr{Lhs: yyDollar[1].expr, Operator: "%", Rhs: yyDollar[3].expr}
  1160  			yyVAL.expr.SetLine(yyDollar[1].expr.Line())
  1161  		}
  1162  	case 65:
  1163  		yyDollar = yyS[yypt-3 : yypt+1]
  1164  //line parser.go.y:373
  1165  		{
  1166  			yyVAL.expr = &ast.ArithmeticOpExpr{Lhs: yyDollar[1].expr, Operator: "^", Rhs: yyDollar[3].expr}
  1167  			yyVAL.expr.SetLine(yyDollar[1].expr.Line())
  1168  		}
  1169  	case 66:
  1170  		yyDollar = yyS[yypt-2 : yypt+1]
  1171  //line parser.go.y:377
  1172  		{
  1173  			yyVAL.expr = &ast.UnaryMinusOpExpr{Expr: yyDollar[2].expr}
  1174  			yyVAL.expr.SetLine(yyDollar[2].expr.Line())
  1175  		}
  1176  	case 67:
  1177  		yyDollar = yyS[yypt-2 : yypt+1]
  1178  //line parser.go.y:381
  1179  		{
  1180  			yyVAL.expr = &ast.UnaryNotOpExpr{Expr: yyDollar[2].expr}
  1181  			yyVAL.expr.SetLine(yyDollar[2].expr.Line())
  1182  		}
  1183  	case 68:
  1184  		yyDollar = yyS[yypt-2 : yypt+1]
  1185  //line parser.go.y:385
  1186  		{
  1187  			yyVAL.expr = &ast.UnaryLenOpExpr{Expr: yyDollar[2].expr}
  1188  			yyVAL.expr.SetLine(yyDollar[2].expr.Line())
  1189  		}
  1190  	case 69:
  1191  		yyDollar = yyS[yypt-1 : yypt+1]
  1192  //line parser.go.y:391
  1193  		{
  1194  			yyVAL.expr = &ast.StringExpr{Value: yyDollar[1].token.Str}
  1195  			yyVAL.expr.SetLine(yyDollar[1].token.Pos.Line)
  1196  		}
  1197  	case 70:
  1198  		yyDollar = yyS[yypt-1 : yypt+1]
  1199  //line parser.go.y:397
  1200  		{
  1201  			yyVAL.expr = yyDollar[1].expr
  1202  		}
  1203  	case 71:
  1204  		yyDollar = yyS[yypt-1 : yypt+1]
  1205  //line parser.go.y:400
  1206  		{
  1207  			yyVAL.expr = yyDollar[1].expr
  1208  		}
  1209  	case 72:
  1210  		yyDollar = yyS[yypt-1 : yypt+1]
  1211  //line parser.go.y:403
  1212  		{
  1213  			yyVAL.expr = yyDollar[1].expr
  1214  		}
  1215  	case 73:
  1216  		yyDollar = yyS[yypt-3 : yypt+1]
  1217  //line parser.go.y:406
  1218  		{
  1219  			if ex, ok := yyDollar[2].expr.(*ast.Comma3Expr); ok {
  1220  				ex.AdjustRet = true
  1221  			}
  1222  			yyVAL.expr = yyDollar[2].expr
  1223  			yyVAL.expr.SetLine(yyDollar[1].token.Pos.Line)
  1224  		}
  1225  	case 74:
  1226  		yyDollar = yyS[yypt-3 : yypt+1]
  1227  //line parser.go.y:415
  1228  		{
  1229  			yyDollar[2].expr.(*ast.FuncCallExpr).AdjustRet = true
  1230  			yyVAL.expr = yyDollar[2].expr
  1231  		}
  1232  	case 75:
  1233  		yyDollar = yyS[yypt-2 : yypt+1]
  1234  //line parser.go.y:421
  1235  		{
  1236  			yyVAL.expr = &ast.FuncCallExpr{Func: yyDollar[1].expr, Args: yyDollar[2].exprlist}
  1237  			yyVAL.expr.SetLine(yyDollar[1].expr.Line())
  1238  		}
  1239  	case 76:
  1240  		yyDollar = yyS[yypt-4 : yypt+1]
  1241  //line parser.go.y:425
  1242  		{
  1243  			yyVAL.expr = &ast.FuncCallExpr{Method: yyDollar[3].token.Str, Receiver: yyDollar[1].expr, Args: yyDollar[4].exprlist}
  1244  			yyVAL.expr.SetLine(yyDollar[1].expr.Line())
  1245  		}
  1246  	case 77:
  1247  		yyDollar = yyS[yypt-2 : yypt+1]
  1248  //line parser.go.y:431
  1249  		{
  1250  			if yylex.(*Lexer).PNewLine {
  1251  				yylex.(*Lexer).TokenError(yyDollar[1].token, "ambiguous syntax (function call x new statement)")
  1252  			}
  1253  			yyVAL.exprlist = []ast.Expr{}
  1254  		}
  1255  	case 78:
  1256  		yyDollar = yyS[yypt-3 : yypt+1]
  1257  //line parser.go.y:437
  1258  		{
  1259  			if yylex.(*Lexer).PNewLine {
  1260  				yylex.(*Lexer).TokenError(yyDollar[1].token, "ambiguous syntax (function call x new statement)")
  1261  			}
  1262  			yyVAL.exprlist = yyDollar[2].exprlist
  1263  		}
  1264  	case 79:
  1265  		yyDollar = yyS[yypt-1 : yypt+1]
  1266  //line parser.go.y:443
  1267  		{
  1268  			yyVAL.exprlist = []ast.Expr{yyDollar[1].expr}
  1269  		}
  1270  	case 80:
  1271  		yyDollar = yyS[yypt-1 : yypt+1]
  1272  //line parser.go.y:446
  1273  		{
  1274  			yyVAL.exprlist = []ast.Expr{yyDollar[1].expr}
  1275  		}
  1276  	case 81:
  1277  		yyDollar = yyS[yypt-2 : yypt+1]
  1278  //line parser.go.y:451
  1279  		{
  1280  			yyVAL.expr = &ast.FunctionExpr{ParList: yyDollar[2].funcexpr.ParList, Stmts: yyDollar[2].funcexpr.Stmts}
  1281  			yyVAL.expr.SetLine(yyDollar[1].token.Pos.Line)
  1282  			yyVAL.expr.SetLastLine(yyDollar[2].funcexpr.LastLine())
  1283  		}
  1284  	case 82:
  1285  		yyDollar = yyS[yypt-5 : yypt+1]
  1286  //line parser.go.y:458
  1287  		{
  1288  			yyVAL.funcexpr = &ast.FunctionExpr{ParList: yyDollar[2].parlist, Stmts: yyDollar[4].stmts}
  1289  			yyVAL.funcexpr.SetLine(yyDollar[1].token.Pos.Line)
  1290  			yyVAL.funcexpr.SetLastLine(yyDollar[5].token.Pos.Line)
  1291  		}
  1292  	case 83:
  1293  		yyDollar = yyS[yypt-4 : yypt+1]
  1294  //line parser.go.y:463
  1295  		{
  1296  			yyVAL.funcexpr = &ast.FunctionExpr{ParList: &ast.ParList{HasVargs: false, Names: []string{}}, Stmts: yyDollar[3].stmts}
  1297  			yyVAL.funcexpr.SetLine(yyDollar[1].token.Pos.Line)
  1298  			yyVAL.funcexpr.SetLastLine(yyDollar[4].token.Pos.Line)
  1299  		}
  1300  	case 84:
  1301  		yyDollar = yyS[yypt-1 : yypt+1]
  1302  //line parser.go.y:470
  1303  		{
  1304  			yyVAL.parlist = &ast.ParList{HasVargs: true, Names: []string{}}
  1305  		}
  1306  	case 85:
  1307  		yyDollar = yyS[yypt-1 : yypt+1]
  1308  //line parser.go.y:473
  1309  		{
  1310  			yyVAL.parlist = &ast.ParList{HasVargs: false, Names: []string{}}
  1311  			yyVAL.parlist.Names = append(yyVAL.parlist.Names, yyDollar[1].namelist...)
  1312  		}
  1313  	case 86:
  1314  		yyDollar = yyS[yypt-3 : yypt+1]
  1315  //line parser.go.y:477
  1316  		{
  1317  			yyVAL.parlist = &ast.ParList{HasVargs: true, Names: []string{}}
  1318  			yyVAL.parlist.Names = append(yyVAL.parlist.Names, yyDollar[1].namelist...)
  1319  		}
  1320  	case 87:
  1321  		yyDollar = yyS[yypt-2 : yypt+1]
  1322  //line parser.go.y:484
  1323  		{
  1324  			yyVAL.expr = &ast.TableExpr{Fields: []*ast.Field{}}
  1325  			yyVAL.expr.SetLine(yyDollar[1].token.Pos.Line)
  1326  		}
  1327  	case 88:
  1328  		yyDollar = yyS[yypt-3 : yypt+1]
  1329  //line parser.go.y:488
  1330  		{
  1331  			yyVAL.expr = &ast.TableExpr{Fields: yyDollar[2].fieldlist}
  1332  			yyVAL.expr.SetLine(yyDollar[1].token.Pos.Line)
  1333  		}
  1334  	case 89:
  1335  		yyDollar = yyS[yypt-1 : yypt+1]
  1336  //line parser.go.y:495
  1337  		{
  1338  			yyVAL.fieldlist = []*ast.Field{yyDollar[1].field}
  1339  		}
  1340  	case 90:
  1341  		yyDollar = yyS[yypt-3 : yypt+1]
  1342  //line parser.go.y:498
  1343  		{
  1344  			yyVAL.fieldlist = append(yyDollar[1].fieldlist, yyDollar[3].field)
  1345  		}
  1346  	case 91:
  1347  		yyDollar = yyS[yypt-2 : yypt+1]
  1348  //line parser.go.y:501
  1349  		{
  1350  			yyVAL.fieldlist = yyDollar[1].fieldlist
  1351  		}
  1352  	case 92:
  1353  		yyDollar = yyS[yypt-3 : yypt+1]
  1354  //line parser.go.y:506
  1355  		{
  1356  			yyVAL.field = &ast.Field{Key: &ast.StringExpr{Value: yyDollar[1].token.Str}, Value: yyDollar[3].expr}
  1357  			yyVAL.field.Key.SetLine(yyDollar[1].token.Pos.Line)
  1358  		}
  1359  	case 93:
  1360  		yyDollar = yyS[yypt-5 : yypt+1]
  1361  //line parser.go.y:510
  1362  		{
  1363  			yyVAL.field = &ast.Field{Key: yyDollar[2].expr, Value: yyDollar[5].expr}
  1364  		}
  1365  	case 94:
  1366  		yyDollar = yyS[yypt-1 : yypt+1]
  1367  //line parser.go.y:513
  1368  		{
  1369  			yyVAL.field = &ast.Field{Value: yyDollar[1].expr}
  1370  		}
  1371  	case 95:
  1372  		yyDollar = yyS[yypt-1 : yypt+1]
  1373  //line parser.go.y:518
  1374  		{
  1375  			yyVAL.fieldsep = ","
  1376  		}
  1377  	case 96:
  1378  		yyDollar = yyS[yypt-1 : yypt+1]
  1379  //line parser.go.y:521
  1380  		{
  1381  			yyVAL.fieldsep = ";"
  1382  		}
  1383  	}
  1384  	goto yystack /* stack new state and value */
  1385  }