github.com/phpstudyer/protoreflect@v1.7.2/desc/protoparse/proto.y.go (about)

     1  // Code generated by goyacc -o proto.y.go -p proto proto.y. DO NOT EDIT.
     2  
     3  //line proto.y:2
     4  package protoparse
     5  
     6  import __yyfmt__ "fmt"
     7  
     8  //line proto.y:2
     9  
    10  //lint:file-ignore SA4006 generated parser has unused values
    11  
    12  import (
    13  	"math"
    14  
    15  	"github.com/phpstudyer/protoreflect/desc/protoparse/ast"
    16  )
    17  
    18  //line proto.y:16
    19  type protoSymType struct {
    20  	yys       int
    21  	file      *ast.FileNode
    22  	syn       *ast.SyntaxNode
    23  	fileDecl  ast.FileElement
    24  	fileDecls []ast.FileElement
    25  	pkg       *ast.PackageNode
    26  	imprt     *ast.ImportNode
    27  	msg       *ast.MessageNode
    28  	msgDecl   ast.MessageElement
    29  	msgDecls  []ast.MessageElement
    30  	fld       *ast.FieldNode
    31  	mapFld    *ast.MapFieldNode
    32  	mapType   *ast.MapTypeNode
    33  	grp       *ast.GroupNode
    34  	oo        *ast.OneOfNode
    35  	ooDecl    ast.OneOfElement
    36  	ooDecls   []ast.OneOfElement
    37  	ext       *ast.ExtensionRangeNode
    38  	resvd     *ast.ReservedNode
    39  	en        *ast.EnumNode
    40  	enDecl    ast.EnumElement
    41  	enDecls   []ast.EnumElement
    42  	env       *ast.EnumValueNode
    43  	extend    *ast.ExtendNode
    44  	extDecl   ast.ExtendElement
    45  	extDecls  []ast.ExtendElement
    46  	svc       *ast.ServiceNode
    47  	svcDecl   ast.ServiceElement
    48  	svcDecls  []ast.ServiceElement
    49  	mtd       *ast.RPCNode
    50  	rpcType   *ast.RPCTypeNode
    51  	rpcDecl   ast.RPCElement
    52  	rpcDecls  []ast.RPCElement
    53  	opt       *ast.OptionNode
    54  	opts      *compactOptionList
    55  	ref       *ast.FieldReferenceNode
    56  	optNms    *fieldRefList
    57  	cmpctOpts *ast.CompactOptionsNode
    58  	rng       *ast.RangeNode
    59  	rngs      *rangeList
    60  	names     *nameList
    61  	cid       *identList
    62  	tid       ast.IdentValueNode
    63  	sl        *valueList
    64  	msgField  *ast.MessageFieldNode
    65  	msgEntry  *messageFieldEntry
    66  	msgLit    *messageFieldList
    67  	v         ast.ValueNode
    68  	il        ast.IntValueNode
    69  	str       *stringList
    70  	s         *ast.StringLiteralNode
    71  	i         *ast.UintLiteralNode
    72  	f         *ast.FloatLiteralNode
    73  	id        *ast.IdentNode
    74  	b         *ast.RuneNode
    75  	err       error
    76  }
    77  
    78  const _STRING_LIT = 57346
    79  const _INT_LIT = 57347
    80  const _FLOAT_LIT = 57348
    81  const _NAME = 57349
    82  const _SYNTAX = 57350
    83  const _IMPORT = 57351
    84  const _WEAK = 57352
    85  const _PUBLIC = 57353
    86  const _PACKAGE = 57354
    87  const _OPTION = 57355
    88  const _TRUE = 57356
    89  const _FALSE = 57357
    90  const _INF = 57358
    91  const _NAN = 57359
    92  const _REPEATED = 57360
    93  const _OPTIONAL = 57361
    94  const _REQUIRED = 57362
    95  const _DOUBLE = 57363
    96  const _FLOAT = 57364
    97  const _INT32 = 57365
    98  const _INT64 = 57366
    99  const _UINT32 = 57367
   100  const _UINT64 = 57368
   101  const _SINT32 = 57369
   102  const _SINT64 = 57370
   103  const _FIXED32 = 57371
   104  const _FIXED64 = 57372
   105  const _SFIXED32 = 57373
   106  const _SFIXED64 = 57374
   107  const _BOOL = 57375
   108  const _STRING = 57376
   109  const _BYTES = 57377
   110  const _GROUP = 57378
   111  const _ONEOF = 57379
   112  const _MAP = 57380
   113  const _EXTENSIONS = 57381
   114  const _TO = 57382
   115  const _MAX = 57383
   116  const _RESERVED = 57384
   117  const _ENUM = 57385
   118  const _MESSAGE = 57386
   119  const _EXTEND = 57387
   120  const _SERVICE = 57388
   121  const _RPC = 57389
   122  const _STREAM = 57390
   123  const _RETURNS = 57391
   124  const _ERROR = 57392
   125  
   126  var protoToknames = [...]string{
   127  	"$end",
   128  	"error",
   129  	"$unk",
   130  	"_STRING_LIT",
   131  	"_INT_LIT",
   132  	"_FLOAT_LIT",
   133  	"_NAME",
   134  	"_SYNTAX",
   135  	"_IMPORT",
   136  	"_WEAK",
   137  	"_PUBLIC",
   138  	"_PACKAGE",
   139  	"_OPTION",
   140  	"_TRUE",
   141  	"_FALSE",
   142  	"_INF",
   143  	"_NAN",
   144  	"_REPEATED",
   145  	"_OPTIONAL",
   146  	"_REQUIRED",
   147  	"_DOUBLE",
   148  	"_FLOAT",
   149  	"_INT32",
   150  	"_INT64",
   151  	"_UINT32",
   152  	"_UINT64",
   153  	"_SINT32",
   154  	"_SINT64",
   155  	"_FIXED32",
   156  	"_FIXED64",
   157  	"_SFIXED32",
   158  	"_SFIXED64",
   159  	"_BOOL",
   160  	"_STRING",
   161  	"_BYTES",
   162  	"_GROUP",
   163  	"_ONEOF",
   164  	"_MAP",
   165  	"_EXTENSIONS",
   166  	"_TO",
   167  	"_MAX",
   168  	"_RESERVED",
   169  	"_ENUM",
   170  	"_MESSAGE",
   171  	"_EXTEND",
   172  	"_SERVICE",
   173  	"_RPC",
   174  	"_STREAM",
   175  	"_RETURNS",
   176  	"_ERROR",
   177  	"'='",
   178  	"';'",
   179  	"':'",
   180  	"'{'",
   181  	"'}'",
   182  	"'\\\\'",
   183  	"'/'",
   184  	"'?'",
   185  	"'.'",
   186  	"','",
   187  	"'>'",
   188  	"'<'",
   189  	"'+'",
   190  	"'-'",
   191  	"'('",
   192  	"')'",
   193  	"'['",
   194  	"']'",
   195  	"'*'",
   196  	"'&'",
   197  	"'^'",
   198  	"'%'",
   199  	"'$'",
   200  	"'#'",
   201  	"'@'",
   202  	"'!'",
   203  	"'~'",
   204  	"'`'",
   205  }
   206  
   207  var protoStatenames = [...]string{}
   208  
   209  const protoEofCode = 1
   210  const protoErrCode = 2
   211  const protoInitialStackSize = 16
   212  
   213  //line proto.y:958
   214  
   215  //line yacctab:1
   216  var protoExca = [...]int{
   217  	-1, 0,
   218  	1, 4,
   219  	-2, 0,
   220  	-1, 1,
   221  	1, -1,
   222  	-2, 0,
   223  	-1, 2,
   224  	1, 1,
   225  	-2, 0,
   226  	-1, 3,
   227  	1, 2,
   228  	-2, 0,
   229  	-1, 22,
   230  	1, 3,
   231  	-2, 0,
   232  	-1, 95,
   233  	55, 158,
   234  	-2, 0,
   235  	-1, 96,
   236  	55, 146,
   237  	-2, 0,
   238  	-1, 97,
   239  	55, 175,
   240  	-2, 0,
   241  	-1, 99,
   242  	55, 184,
   243  	-2, 0,
   244  	-1, 110,
   245  	55, 47,
   246  	-2, 0,
   247  	-1, 170,
   248  	55, 45,
   249  	61, 45,
   250  	-2, 0,
   251  	-1, 225,
   252  	61, 47,
   253  	-2, 0,
   254  	-1, 240,
   255  	55, 96,
   256  	-2, 0,
   257  	-1, 268,
   258  	61, 47,
   259  	-2, 0,
   260  	-1, 311,
   261  	61, 47,
   262  	-2, 0,
   263  	-1, 348,
   264  	55, 158,
   265  	-2, 0,
   266  	-1, 352,
   267  	55, 158,
   268  	-2, 0,
   269  	-1, 356,
   270  	55, 158,
   271  	-2, 0,
   272  	-1, 366,
   273  	55, 196,
   274  	-2, 0,
   275  	-1, 373,
   276  	55, 158,
   277  	-2, 0,
   278  	-1, 376,
   279  	55, 158,
   280  	-2, 0,
   281  	-1, 379,
   282  	55, 158,
   283  	-2, 0,
   284  	-1, 397,
   285  	55, 158,
   286  	-2, 0,
   287  	-1, 409,
   288  	55, 158,
   289  	-2, 0,
   290  }
   291  
   292  const protoPrivate = 57344
   293  
   294  const protoLast = 2179
   295  
   296  var protoAct = [...]int{
   297  	31, 118, 117, 125, 8, 310, 8, 8, 383, 169,
   298  	263, 288, 207, 198, 308, 75, 205, 236, 77, 79,
   299  	80, 281, 84, 134, 192, 105, 8, 107, 106, 124,
   300  	162, 143, 146, 82, 397, 356, 395, 156, 354, 340,
   301  	119, 352, 339, 26, 81, 350, 348, 237, 237, 346,
   302  	30, 237, 85, 237, 237, 87, 88, 89, 332, 237,
   303  	237, 322, 324, 299, 237, 235, 272, 271, 367, 338,
   304  	208, 29, 208, 237, 116, 264, 237, 222, 237, 222,
   305  	237, 223, 110, 222, 208, 221, 370, 221, 345, 388,
   306  	225, 221, 315, 109, 77, 200, 369, 152, 104, 364,
   307  	147, 344, 94, 163, 314, 222, 303, 220, 387, 115,
   308  	341, 174, 325, 221, 298, 219, 260, 98, 244, 183,
   309  	238, 93, 91, 386, 365, 103, 366, 158, 154, 209,
   310  	217, 209, 409, 407, 17, 191, 80, 79, 157, 379,
   311  	77, 195, 196, 209, 376, 373, 152, 386, 240, 147,
   312  	99, 97, 96, 95, 401, 185, 187, 189, 17, 377,
   313  	374, 81, 371, 363, 358, 163, 335, 197, 216, 329,
   314  	199, 174, 14, 385, 280, 259, 399, 154, 202, 15,
   315  	218, 199, 16, 17, 166, 158, 228, 229, 230, 231,
   316  	232, 233, 214, 211, 243, 17, 157, 385, 14, 226,
   317  	166, 242, 224, 215, 4, 15, 212, 203, 16, 17,
   318  	184, 17, 168, 19, 18, 20, 21, 258, 102, 101,
   319  	100, 90, 13, 86, 109, 25, 174, 362, 361, 167,
   320  	326, 278, 277, 304, 165, 269, 276, 213, 77, 19,
   321  	18, 20, 21, 275, 289, 167, 274, 285, 13, 265,
   322  	165, 273, 267, 283, 241, 234, 204, 92, 297, 24,
   323  	261, 239, 381, 284, 294, 29, 194, 109, 380, 174,
   324  	321, 5, 199, 29, 302, 23, 300, 301, 312, 27,
   325  	28, 122, 11, 286, 11, 11, 120, 10, 306, 10,
   326  	10, 289, 320, 319, 23, 330, 331, 323, 318, 328,
   327  	317, 316, 121, 9, 11, 9, 9, 181, 179, 10,
   328  	296, 294, 174, 194, 333, 336, 279, 262, 180, 178,
   329  	176, 342, 334, 29, 164, 9, 77, 109, 3, 337,
   330  	177, 22, 360, 161, 347, 349, 351, 353, 355, 357,
   331  	12, 283, 109, 155, 148, 145, 123, 359, 206, 193,
   332  	149, 372, 128, 287, 141, 375, 368, 127, 291, 378,
   333  	126, 290, 170, 171, 245, 108, 173, 76, 382, 282,
   334  	384, 7, 6, 2, 183, 1, 390, 183, 0, 392,
   335  	183, 0, 394, 0, 0, 0, 384, 0, 109, 109,
   336  	0, 400, 183, 0, 183, 0, 183, 0, 396, 398,
   337  	408, 0, 402, 403, 0, 0, 0, 0, 0, 0,
   338  	183, 0, 411, 183, 309, 0, 29, 114, 111, 32,
   339  	33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
   340  	43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
   341  	53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
   342  	63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
   343  	73, 74, 0, 0, 0, 0, 110, 0, 0, 0,
   344  	0, 0, 0, 0, 311, 113, 112, 0, 0, 0,
   345  	307, 29, 114, 111, 32, 33, 34, 35, 36, 37,
   346  	38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
   347  	48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
   348  	58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
   349  	68, 69, 70, 71, 72, 73, 74, 0, 0, 0,
   350  	0, 110, 0, 0, 0, 0, 0, 0, 0, 268,
   351  	113, 112, 0, 0, 266, 29, 114, 111, 32, 33,
   352  	34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
   353  	44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
   354  	54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
   355  	64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
   356  	74, 0, 0, 0, 0, 110, 0, 0, 0, 0,
   357  	0, 0, 0, 311, 113, 112, 29, 114, 111, 32,
   358  	33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
   359  	43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
   360  	53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
   361  	63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
   362  	73, 74, 0, 0, 0, 0, 110, 0, 0, 0,
   363  	0, 0, 343, 0, 0, 113, 112, 32, 33, 34,
   364  	35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
   365  	45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
   366  	55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
   367  	65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
   368  	246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
   369  	256, 257, 0, 313, 0, 0, 0, 175, 32, 33,
   370  	34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
   371  	44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
   372  	54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
   373  	64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
   374  	74, 0, 0, 0, 0, 0, 0, 0, 0, 0,
   375  	0, 0, 0, 0, 270, 0, 0, 0, 175, 32,
   376  	33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
   377  	43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
   378  	53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
   379  	63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
   380  	73, 74, 0, 0, 0, 0, 0, 0, 0, 0,
   381  	0, 0, 0, 0, 0, 172, 0, 0, 0, 175,
   382  	32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
   383  	42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
   384  	52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
   385  	62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
   386  	72, 73, 74, 0, 0, 0, 0, 0, 0, 0,
   387  	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
   388  	175, 32, 33, 34, 35, 36, 37, 38, 39, 40,
   389  	41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
   390  	51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
   391  	61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
   392  	71, 72, 73, 74, 0, 0, 0, 0, 0, 0,
   393  	0, 0, 0, 0, 0, 130, 0, 0, 0, 78,
   394  	32, 33, 34, 35, 36, 37, 139, 39, 40, 41,
   395  	42, 133, 132, 131, 46, 47, 48, 49, 50, 51,
   396  	52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
   397  	140, 144, 138, 65, 66, 142, 135, 136, 137, 71,
   398  	72, 73, 74, 0, 0, 129, 0, 0, 412, 130,
   399  	0, 0, 83, 0, 32, 33, 34, 35, 36, 37,
   400  	139, 39, 40, 41, 42, 133, 132, 131, 46, 47,
   401  	48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
   402  	58, 59, 60, 61, 140, 144, 138, 65, 66, 142,
   403  	135, 136, 137, 71, 72, 73, 74, 0, 0, 129,
   404  	0, 0, 410, 130, 0, 0, 83, 0, 32, 33,
   405  	34, 35, 36, 37, 139, 39, 40, 41, 42, 133,
   406  	132, 131, 46, 47, 48, 49, 50, 51, 52, 53,
   407  	54, 55, 56, 57, 58, 59, 60, 61, 140, 144,
   408  	138, 65, 66, 142, 135, 136, 137, 71, 72, 73,
   409  	74, 0, 0, 129, 0, 0, 406, 130, 0, 0,
   410  	83, 0, 32, 33, 34, 35, 36, 37, 139, 39,
   411  	40, 41, 42, 133, 132, 131, 46, 47, 48, 49,
   412  	50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
   413  	60, 61, 140, 144, 138, 65, 66, 142, 135, 136,
   414  	137, 71, 72, 73, 74, 0, 0, 129, 0, 0,
   415  	405, 130, 0, 0, 83, 0, 32, 33, 34, 35,
   416  	36, 37, 139, 39, 40, 41, 42, 133, 132, 131,
   417  	46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
   418  	56, 57, 58, 59, 60, 61, 140, 144, 138, 65,
   419  	66, 142, 135, 136, 137, 71, 72, 73, 74, 0,
   420  	0, 129, 0, 0, 404, 130, 0, 0, 83, 0,
   421  	32, 33, 34, 35, 36, 37, 139, 39, 40, 41,
   422  	42, 133, 132, 131, 46, 47, 48, 49, 50, 51,
   423  	52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
   424  	140, 144, 138, 65, 66, 142, 135, 136, 137, 71,
   425  	72, 73, 74, 0, 0, 129, 0, 0, 393, 130,
   426  	0, 0, 83, 0, 32, 33, 34, 35, 36, 37,
   427  	139, 39, 40, 41, 42, 133, 132, 131, 46, 47,
   428  	48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
   429  	58, 59, 60, 61, 140, 144, 138, 65, 66, 142,
   430  	135, 136, 137, 71, 72, 73, 74, 0, 0, 129,
   431  	0, 0, 391, 130, 0, 0, 83, 0, 32, 33,
   432  	34, 35, 36, 37, 139, 39, 40, 41, 42, 133,
   433  	132, 131, 46, 47, 48, 49, 50, 51, 52, 53,
   434  	54, 55, 56, 57, 58, 59, 60, 61, 140, 144,
   435  	138, 65, 66, 142, 135, 136, 137, 71, 72, 73,
   436  	74, 0, 0, 129, 0, 0, 389, 293, 0, 0,
   437  	83, 0, 32, 33, 34, 35, 36, 37, 139, 39,
   438  	40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
   439  	50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
   440  	60, 295, 62, 63, 64, 65, 66, 67, 68, 69,
   441  	70, 71, 72, 73, 74, 0, 0, 292, 0, 0,
   442  	327, 160, 0, 0, 83, 0, 32, 33, 34, 35,
   443  	36, 37, 38, 39, 40, 41, 42, 133, 132, 131,
   444  	46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
   445  	56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
   446  	66, 67, 68, 69, 70, 71, 72, 73, 74, 0,
   447  	0, 159, 0, 0, 210, 130, 0, 0, 83, 0,
   448  	32, 33, 34, 35, 36, 37, 139, 39, 40, 41,
   449  	42, 133, 132, 131, 46, 47, 48, 49, 50, 51,
   450  	52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
   451  	140, 144, 138, 65, 66, 142, 135, 136, 137, 71,
   452  	72, 73, 74, 0, 0, 129, 0, 0, 182, 130,
   453  	0, 0, 83, 0, 32, 33, 34, 35, 36, 37,
   454  	139, 39, 40, 41, 42, 133, 132, 131, 46, 47,
   455  	48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
   456  	58, 59, 60, 61, 140, 144, 138, 65, 66, 142,
   457  	135, 136, 137, 71, 72, 73, 74, 0, 0, 129,
   458  	0, 0, 293, 0, 0, 0, 83, 32, 33, 34,
   459  	35, 36, 37, 139, 39, 40, 41, 42, 43, 44,
   460  	45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
   461  	55, 56, 57, 58, 59, 60, 295, 62, 63, 64,
   462  	65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
   463  	0, 0, 292, 0, 0, 160, 0, 0, 0, 83,
   464  	32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
   465  	42, 133, 132, 131, 46, 47, 48, 49, 50, 51,
   466  	52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
   467  	62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
   468  	72, 73, 74, 0, 0, 159, 0, 0, 227, 0,
   469  	0, 0, 83, 32, 33, 34, 35, 36, 37, 38,
   470  	39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
   471  	49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
   472  	59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
   473  	69, 70, 71, 72, 73, 74, 0, 0, 0, 0,
   474  	0, 0, 0, 0, 0, 83, 32, 33, 34, 35,
   475  	36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
   476  	46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
   477  	56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
   478  	66, 67, 68, 69, 70, 71, 72, 73, 74, 0,
   479  	0, 0, 0, 0, 0, 0, 0, 0, 83, 32,
   480  	33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
   481  	43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
   482  	53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
   483  	63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
   484  	305, 74, 0, 0, 0, 0, 0, 0, 0, 0,
   485  	0, 83, 32, 33, 34, 35, 36, 37, 38, 39,
   486  	40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
   487  	50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
   488  	60, 190, 62, 63, 64, 65, 66, 67, 68, 69,
   489  	70, 71, 72, 73, 74, 0, 0, 0, 0, 0,
   490  	0, 0, 0, 0, 83, 32, 33, 34, 35, 36,
   491  	37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
   492  	47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
   493  	57, 58, 59, 60, 188, 62, 63, 64, 65, 66,
   494  	67, 68, 69, 70, 71, 72, 73, 74, 0, 0,
   495  	0, 0, 0, 0, 0, 0, 0, 83, 32, 33,
   496  	34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
   497  	44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
   498  	54, 55, 56, 57, 58, 59, 60, 186, 62, 63,
   499  	64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
   500  	74, 0, 0, 0, 0, 0, 151, 0, 0, 0,
   501  	83, 32, 33, 34, 35, 36, 37, 139, 39, 40,
   502  	41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
   503  	51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
   504  	61, 62, 63, 64, 65, 66, 153, 68, 69, 70,
   505  	71, 72, 73, 74, 0, 151, 150, 0, 0, 201,
   506  	32, 33, 34, 35, 36, 37, 139, 39, 40, 41,
   507  	42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
   508  	52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
   509  	62, 63, 64, 65, 66, 153, 68, 69, 70, 71,
   510  	72, 73, 74, 0, 0, 150, 32, 33, 34, 35,
   511  	36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
   512  	46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
   513  	56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
   514  	66, 67, 68, 69, 70, 71, 72, 73, 74,
   515  }
   516  
   517  var protoPact = [...]int{
   518  	196, -1000, 170, 170, 208, -1000, -1000, -1000, -1000, -1000,
   519  	-1000, -1000, -1000, -1000, 173, 269, 2129, 904, 2129, 2129,
   520  	1769, 2129, 170, -1000, 319, -1000, 171, 319, 319, 319,
   521  	169, 63, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
   522  	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
   523  	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
   524  	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
   525  	-1000, -1000, -1000, -1000, -1000, 206, 62, -1000, 1769, 99,
   526  	98, 97, -1000, 2129, 96, 168, -1000, 167, 166, -1000,
   527  	-1000, 2129, 602, 904, 8, 1557, 2083, 1663, -1000, 198,
   528  	-1000, -1000, -1000, -1000, 160, -1000, -1000, -1000, -1000, -1000,
   529  	843, -1000, 314, 302, -1000, -1000, -1000, 1503, -1000, -1000,
   530  	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
   531  	158, 1981, 1928, 1875, 2129, 2129, 2129, 1769, 308, 904,
   532  	2129, 2129, 261, -1000, 33, 2034, -1000, -1000, -1000, -1000,
   533  	-1000, 155, 205, 67, -1000, 1449, -1000, -1000, -1000, -1000,
   534  	154, 182, -1000, -1000, -1000, -1000, 151, 2129, -1000, 75,
   535  	843, 55, 53, 28, -1000, 1716, -1000, -1000, -1000, -1000,
   536  	-1000, -1000, -1000, -1000, -1000, 2129, 2129, 2129, 2129, 2129,
   537  	2129, 204, 13, 60, 221, 94, 203, 149, 142, 58,
   538  	687, -1000, -1000, -1000, 79, 123, 56, 220, -1000, 312,
   539  	-1000, -1000, -1000, -1000, -1000, -1000, 10, -1000, -1000, -1000,
   540  	-1000, -1000, -1000, 477, -1000, 782, -1, -2, 200, 195,
   541  	192, 185, 181, 180, 311, -1000, 122, 904, 308, 242,
   542  	1610, 305, -1000, -1000, 319, 54, -1000, -1000, -1000, -1000,
   543  	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 11, -1000,
   544  	79, 65, -1000, 184, 1822, -1000, 412, -1000, 721, 43,
   545  	31, -1000, -1000, 296, 295, 293, 288, 287, 265, 9,
   546  	-1000, -6, 52, 179, -1000, -1000, -1000, 1395, -1000, -1000,
   547  	-1000, -1000, -1000, 117, 2129, 2129, 6, -1000, 1769, -1000,
   548  	114, -1000, -1000, -1000, 10, 1769, 3, -1000, -26, -29,
   549  	50, 660, 40, 27, -1000, -1000, -3, -8, -7, -13,
   550  	-14, -19, -1000, 112, -1000, 904, 602, -1000, -1000, -1000,
   551  	177, 176, -1000, 111, 38, -1000, 72, 2, -1000, -1000,
   552  	-1000, 541, 35, 25, -1000, -1000, -1000, 110, 1557, 91,
   553  	-1000, 108, 1557, 90, -1000, 107, 1557, 85, -1000, -1000,
   554  	-1000, 263, 257, -1000, -1000, -1000, 145, -1000, -1000, 48,
   555  	29, -1000, 1341, 1557, -1000, 1287, 1557, -1000, 1233, 1557,
   556  	-16, -20, 121, -1000, -1000, -1000, 102, 541, 541, -1000,
   557  	1179, -1000, 1125, -1000, 1071, -1000, 81, 1557, 78, -1000,
   558  	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1017, 1557,
   559  	-1000, 963, -1000,
   560  }
   561  
   562  var protoPgo = [...]int{
   563  	0, 375, 373, 271, 328, 372, 371, 3, 369, 21,
   564  	8, 368, 367, 366, 15, 17, 5, 25, 28, 365,
   565  	12, 0, 364, 33, 23, 14, 363, 362, 9, 40,
   566  	361, 360, 29, 358, 357, 354, 302, 1, 2, 11,
   567  	353, 13, 352, 350, 31, 349, 348, 24, 16, 346,
   568  	286, 32, 345, 344, 281, 37, 343, 27, 340, 30,
   569  	333, 324, 10,
   570  }
   571  
   572  var protoR1 = [...]int{
   573  	0, 1, 1, 1, 1, 4, 4, 3, 3, 3,
   574  	3, 3, 3, 3, 3, 3, 3, 2, 5, 5,
   575  	5, 6, 23, 23, 7, 14, 14, 12, 12, 16,
   576  	16, 17, 17, 17, 19, 19, 19, 19, 19, 19,
   577  	19, 19, 57, 57, 18, 28, 28, 28, 27, 27,
   578  	27, 27, 27, 27, 26, 26, 26, 26, 26, 26,
   579  	26, 26, 26, 26, 13, 13, 13, 25, 25, 25,
   580  	25, 25, 25, 24, 24, 29, 29, 29, 29, 29,
   581  	29, 29, 29, 15, 9, 9, 8, 32, 32, 32,
   582  	32, 32, 32, 31, 40, 40, 40, 39, 39, 39,
   583  	39, 39, 39, 30, 30, 33, 33, 34, 34, 35,
   584  	22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
   585  	22, 22, 49, 49, 47, 47, 45, 45, 45, 48,
   586  	48, 46, 46, 46, 20, 20, 42, 42, 43, 43,
   587  	44, 41, 41, 50, 52, 52, 52, 51, 51, 51,
   588  	51, 51, 51, 53, 53, 36, 38, 38, 38, 37,
   589  	37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
   590  	37, 37, 54, 56, 56, 56, 55, 55, 55, 55,
   591  	55, 58, 60, 60, 60, 59, 59, 59, 59, 59,
   592  	61, 61, 62, 62, 11, 11, 11, 10, 10, 10,
   593  	10, 21, 21, 21, 21, 21, 21, 21, 21, 21,
   594  	21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
   595  	21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
   596  	21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
   597  	21, 21, 21, 21,
   598  }
   599  
   600  var protoR2 = [...]int{
   601  	0, 1, 1, 2, 0, 2, 1, 1, 1, 1,
   602  	1, 1, 1, 1, 1, 2, 1, 4, 3, 4,
   603  	4, 3, 1, 3, 5, 1, 3, 1, 3, 1,
   604  	1, 1, 1, 1, 1, 2, 2, 2, 2, 1,
   605  	2, 2, 1, 2, 3, 1, 2, 0, 1, 2,
   606  	2, 2, 2, 1, 3, 4, 5, 5, 3, 2,
   607  	5, 4, 5, 4, 1, 3, 3, 1, 3, 3,
   608  	5, 3, 5, 1, 2, 6, 6, 6, 5, 7,
   609  	7, 7, 6, 3, 1, 3, 3, 8, 8, 8,
   610  	9, 9, 9, 5, 2, 1, 0, 1, 1, 1,
   611  	1, 2, 1, 5, 6, 7, 8, 5, 6, 6,
   612  	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
   613  	1, 1, 3, 4, 1, 3, 1, 3, 3, 1,
   614  	3, 1, 3, 3, 1, 2, 3, 1, 3, 1,
   615  	3, 1, 3, 5, 2, 1, 0, 1, 1, 1,
   616  	1, 2, 1, 4, 5, 5, 2, 1, 0, 1,
   617  	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
   618  	2, 1, 5, 2, 1, 0, 1, 1, 1, 2,
   619  	1, 5, 2, 1, 0, 1, 1, 1, 2, 1,
   620  	6, 8, 4, 3, 2, 1, 0, 1, 1, 2,
   621  	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
   622  	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
   623  	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
   624  	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
   625  	1, 1, 1, 1,
   626  }
   627  
   628  var protoChk = [...]int{
   629  	-1000, -1, -2, -4, 8, -3, -5, -6, -7, -36,
   630  	-50, -54, -58, 52, 2, 9, 12, 13, 44, 43,
   631  	45, 46, -4, -3, 51, 52, -57, 10, 11, 4,
   632  	-23, -21, 7, 8, 9, 10, 11, 12, 13, 14,
   633  	15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
   634  	25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
   635  	35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
   636  	45, 46, 47, 48, 49, -14, -12, -21, 65, -21,
   637  	-21, -24, -23, 59, -21, -57, 52, -57, -57, -57,
   638  	52, 59, 51, 59, -24, 54, 54, 54, -23, 54,
   639  	52, 52, 52, -23, -16, -17, -18, -57, -19, -21,
   640  	54, 6, 64, 63, 5, -14, 66, -38, -37, -29,
   641  	-50, -36, -54, -49, -32, -7, -31, -34, -42, 52,
   642  	2, 20, 19, 18, -24, 43, 44, 45, 39, 13,
   643  	37, -35, 42, -44, 38, -52, -51, -7, -53, -43,
   644  	52, 2, -21, 42, -44, -56, -55, -29, -32, 52,
   645  	2, -60, -59, -7, -61, 52, 2, 47, 52, -28,
   646  	-27, -26, 2, -13, -21, 67, 6, 16, 5, 6,
   647  	16, 5, 55, -37, 52, -24, 36, -24, 36, -24,
   648  	36, -21, -47, -45, 5, -21, -21, -47, -41, -57,
   649  	62, 55, -51, 52, 51, -48, -46, -20, 5, 64,
   650  	55, -55, 52, 55, -59, 52, -21, 55, -28, 60,
   651  	52, 60, 52, 53, -18, 62, -24, 2, -21, -21,
   652  	-21, -21, -21, -21, 51, 52, -15, 67, 60, 40,
   653  	54, 51, 52, 52, 60, -22, 23, 24, 25, 26,
   654  	27, 28, 29, 30, 31, 32, 33, 34, -20, 52,
   655  	60, 40, 5, -62, 65, -17, 67, -18, 62, -28,
   656  	2, 68, 68, 51, 51, 51, 51, 51, 51, 5,
   657  	52, -9, -8, -14, -47, 5, 41, -40, -39, -7,
   658  	-30, -33, 52, 2, -24, 36, 5, -41, 60, 52,
   659  	-15, -48, -20, 41, 49, 48, -24, 68, -25, 2,
   660  	-16, 62, -28, 2, 61, 61, 5, 5, 5, 5,
   661  	5, 5, 52, -15, 68, 60, 51, 55, -39, 52,
   662  	-21, -21, 52, -15, -24, 52, -62, -24, 66, 68,
   663  	68, 60, -28, 2, 61, 61, 52, -15, 54, -15,
   664  	52, -15, 54, -15, 52, -15, 54, -15, 52, -9,
   665  	-16, 51, 51, 52, 61, 52, 54, 66, -25, 61,
   666  	61, 52, -38, 54, 52, -38, 54, 52, -38, 54,
   667  	5, 5, -11, -10, -7, 52, 2, 60, 60, 55,
   668  	-38, 55, -38, 55, -38, 52, -15, 54, -15, 55,
   669  	-10, 52, -25, -25, 55, 55, 55, 52, -38, 54,
   670  	55, -38, 55,
   671  }
   672  
   673  var protoDef = [...]int{
   674  	-2, -2, -2, -2, 0, 6, 7, 8, 9, 10,
   675  	11, 12, 13, 14, 16, 0, 0, 0, 0, 0,
   676  	0, 0, -2, 5, 0, 15, 0, 0, 0, 42,
   677  	0, 22, 201, 202, 203, 204, 205, 206, 207, 208,
   678  	209, 210, 211, 212, 213, 214, 215, 216, 217, 218,
   679  	219, 220, 221, 222, 223, 224, 225, 226, 227, 228,
   680  	229, 230, 231, 232, 233, 234, 235, 236, 237, 238,
   681  	239, 240, 241, 242, 243, 0, 25, 27, 0, 0,
   682  	0, 0, 73, 0, 0, 0, 18, 0, 0, 43,
   683  	21, 0, 0, 0, 0, -2, -2, -2, 74, -2,
   684  	17, 19, 20, 23, 0, 29, 30, 31, 32, 33,
   685  	-2, 34, 0, 0, 39, 26, 28, 0, 157, 159,
   686  	160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
   687  	171, 0, 0, 0, 0, 237, 238, 0, 233, 207,
   688  	231, 0, 236, 137, 232, 0, 145, 147, 148, 149,
   689  	150, 152, 0, 236, 139, 0, 174, 176, 177, 178,
   690  	180, 0, 183, 185, 186, 187, 189, 0, 24, 0,
   691  	-2, 48, 53, 0, 64, 0, 35, 38, 41, 36,
   692  	37, 40, 155, 156, 170, 0, 230, 0, 230, 0,
   693  	230, 0, 0, 124, 126, 0, 0, 0, 0, 141,
   694  	0, 143, 144, 151, 0, 0, 129, 131, 134, 0,
   695  	172, 173, 179, 181, 182, 188, 0, 44, 46, 49,
   696  	50, 51, 52, 0, 59, -2, 0, 0, 0, 0,
   697  	0, 0, 0, 0, 0, 122, 0, 0, 0, 0,
   698  	-2, 0, 136, 140, 0, 0, 110, 111, 112, 113,
   699  	114, 115, 116, 117, 118, 119, 120, 121, 0, 138,
   700  	0, 0, 135, 0, 0, 54, 0, 58, -2, 0,
   701  	53, 65, 66, 0, 0, 0, 0, 0, 0, 0,
   702  	123, 0, 84, 0, 125, 127, 128, 0, 95, 97,
   703  	98, 99, 100, 102, 0, 230, 0, 142, 0, 153,
   704  	0, 130, 132, 133, 0, 242, 0, 55, 0, 0,
   705  	67, -2, 0, 53, 61, 63, 0, 0, 0, 0,
   706  	0, 0, 78, 0, 83, 0, 0, 93, 94, 101,
   707  	0, 0, 107, 0, 0, 154, 0, 0, 193, 56,
   708  	57, 0, 0, 53, 60, 62, 75, 0, -2, 0,
   709  	76, 0, -2, 0, 77, 0, -2, 0, 82, 85,
   710  	86, 0, 0, 108, 109, 190, -2, 192, 68, 69,
   711  	71, 79, 0, -2, 80, 0, -2, 81, 0, -2,
   712  	0, 0, 0, 195, 197, 198, 200, 0, 0, 87,
   713  	0, 88, 0, 89, 0, 103, 0, -2, 0, 191,
   714  	194, 199, 70, 72, 90, 91, 92, 104, 0, -2,
   715  	105, 0, 106,
   716  }
   717  
   718  var protoTok1 = [...]int{
   719  	1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   720  	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   721  	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   722  	3, 3, 3, 76, 3, 74, 73, 72, 70, 3,
   723  	65, 66, 69, 63, 60, 64, 59, 57, 3, 3,
   724  	3, 3, 3, 3, 3, 3, 3, 3, 53, 52,
   725  	62, 51, 61, 58, 75, 3, 3, 3, 3, 3,
   726  	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   727  	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   728  	3, 67, 56, 68, 71, 3, 78, 3, 3, 3,
   729  	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   730  	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   731  	3, 3, 3, 54, 3, 55, 77,
   732  }
   733  
   734  var protoTok2 = [...]int{
   735  	2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
   736  	12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
   737  	22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
   738  	32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
   739  	42, 43, 44, 45, 46, 47, 48, 49, 50,
   740  }
   741  
   742  var protoTok3 = [...]int{
   743  	0,
   744  }
   745  
   746  var protoErrorMessages = [...]struct {
   747  	state int
   748  	token int
   749  	msg   string
   750  }{}
   751  
   752  //line yaccpar:1
   753  
   754  /*	parser for yacc output	*/
   755  
   756  var (
   757  	protoDebug        = 0
   758  	protoErrorVerbose = false
   759  )
   760  
   761  type protoLexer interface {
   762  	Lex(lval *protoSymType) int
   763  	Error(s string)
   764  }
   765  
   766  type protoParser interface {
   767  	Parse(protoLexer) int
   768  	Lookahead() int
   769  }
   770  
   771  type protoParserImpl struct {
   772  	lval  protoSymType
   773  	stack [protoInitialStackSize]protoSymType
   774  	char  int
   775  }
   776  
   777  func (p *protoParserImpl) Lookahead() int {
   778  	return p.char
   779  }
   780  
   781  func protoNewParser() protoParser {
   782  	return &protoParserImpl{}
   783  }
   784  
   785  const protoFlag = -1000
   786  
   787  func protoTokname(c int) string {
   788  	if c >= 1 && c-1 < len(protoToknames) {
   789  		if protoToknames[c-1] != "" {
   790  			return protoToknames[c-1]
   791  		}
   792  	}
   793  	return __yyfmt__.Sprintf("tok-%v", c)
   794  }
   795  
   796  func protoStatname(s int) string {
   797  	if s >= 0 && s < len(protoStatenames) {
   798  		if protoStatenames[s] != "" {
   799  			return protoStatenames[s]
   800  		}
   801  	}
   802  	return __yyfmt__.Sprintf("state-%v", s)
   803  }
   804  
   805  func protoErrorMessage(state, lookAhead int) string {
   806  	const TOKSTART = 4
   807  
   808  	if !protoErrorVerbose {
   809  		return "syntax error"
   810  	}
   811  
   812  	for _, e := range protoErrorMessages {
   813  		if e.state == state && e.token == lookAhead {
   814  			return "syntax error: " + e.msg
   815  		}
   816  	}
   817  
   818  	res := "syntax error: unexpected " + protoTokname(lookAhead)
   819  
   820  	// To match Bison, suggest at most four expected tokens.
   821  	expected := make([]int, 0, 4)
   822  
   823  	// Look for shiftable tokens.
   824  	base := protoPact[state]
   825  	for tok := TOKSTART; tok-1 < len(protoToknames); tok++ {
   826  		if n := base + tok; n >= 0 && n < protoLast && protoChk[protoAct[n]] == tok {
   827  			if len(expected) == cap(expected) {
   828  				return res
   829  			}
   830  			expected = append(expected, tok)
   831  		}
   832  	}
   833  
   834  	if protoDef[state] == -2 {
   835  		i := 0
   836  		for protoExca[i] != -1 || protoExca[i+1] != state {
   837  			i += 2
   838  		}
   839  
   840  		// Look for tokens that we accept or reduce.
   841  		for i += 2; protoExca[i] >= 0; i += 2 {
   842  			tok := protoExca[i]
   843  			if tok < TOKSTART || protoExca[i+1] == 0 {
   844  				continue
   845  			}
   846  			if len(expected) == cap(expected) {
   847  				return res
   848  			}
   849  			expected = append(expected, tok)
   850  		}
   851  
   852  		// If the default action is to accept or reduce, give up.
   853  		if protoExca[i+1] != 0 {
   854  			return res
   855  		}
   856  	}
   857  
   858  	for i, tok := range expected {
   859  		if i == 0 {
   860  			res += ", expecting "
   861  		} else {
   862  			res += " or "
   863  		}
   864  		res += protoTokname(tok)
   865  	}
   866  	return res
   867  }
   868  
   869  func protolex1(lex protoLexer, lval *protoSymType) (char, token int) {
   870  	token = 0
   871  	char = lex.Lex(lval)
   872  	if char <= 0 {
   873  		token = protoTok1[0]
   874  		goto out
   875  	}
   876  	if char < len(protoTok1) {
   877  		token = protoTok1[char]
   878  		goto out
   879  	}
   880  	if char >= protoPrivate {
   881  		if char < protoPrivate+len(protoTok2) {
   882  			token = protoTok2[char-protoPrivate]
   883  			goto out
   884  		}
   885  	}
   886  	for i := 0; i < len(protoTok3); i += 2 {
   887  		token = protoTok3[i+0]
   888  		if token == char {
   889  			token = protoTok3[i+1]
   890  			goto out
   891  		}
   892  	}
   893  
   894  out:
   895  	if token == 0 {
   896  		token = protoTok2[1] /* unknown char */
   897  	}
   898  	if protoDebug >= 3 {
   899  		__yyfmt__.Printf("lex %s(%d)\n", protoTokname(token), uint(char))
   900  	}
   901  	return char, token
   902  }
   903  
   904  func protoParse(protolex protoLexer) int {
   905  	return protoNewParser().Parse(protolex)
   906  }
   907  
   908  func (protorcvr *protoParserImpl) Parse(protolex protoLexer) int {
   909  	var proton int
   910  	var protoVAL protoSymType
   911  	var protoDollar []protoSymType
   912  	_ = protoDollar // silence set and not used
   913  	protoS := protorcvr.stack[:]
   914  
   915  	Nerrs := 0   /* number of errors */
   916  	Errflag := 0 /* error recovery flag */
   917  	protostate := 0
   918  	protorcvr.char = -1
   919  	prototoken := -1 // protorcvr.char translated into internal numbering
   920  	defer func() {
   921  		// Make sure we report no lookahead when not parsing.
   922  		protostate = -1
   923  		protorcvr.char = -1
   924  		prototoken = -1
   925  	}()
   926  	protop := -1
   927  	goto protostack
   928  
   929  ret0:
   930  	return 0
   931  
   932  ret1:
   933  	return 1
   934  
   935  protostack:
   936  	/* put a state and value onto the stack */
   937  	if protoDebug >= 4 {
   938  		__yyfmt__.Printf("char %v in %v\n", protoTokname(prototoken), protoStatname(protostate))
   939  	}
   940  
   941  	protop++
   942  	if protop >= len(protoS) {
   943  		nyys := make([]protoSymType, len(protoS)*2)
   944  		copy(nyys, protoS)
   945  		protoS = nyys
   946  	}
   947  	protoS[protop] = protoVAL
   948  	protoS[protop].yys = protostate
   949  
   950  protonewstate:
   951  	proton = protoPact[protostate]
   952  	if proton <= protoFlag {
   953  		goto protodefault /* simple state */
   954  	}
   955  	if protorcvr.char < 0 {
   956  		protorcvr.char, prototoken = protolex1(protolex, &protorcvr.lval)
   957  	}
   958  	proton += prototoken
   959  	if proton < 0 || proton >= protoLast {
   960  		goto protodefault
   961  	}
   962  	proton = protoAct[proton]
   963  	if protoChk[proton] == prototoken { /* valid shift */
   964  		protorcvr.char = -1
   965  		prototoken = -1
   966  		protoVAL = protorcvr.lval
   967  		protostate = proton
   968  		if Errflag > 0 {
   969  			Errflag--
   970  		}
   971  		goto protostack
   972  	}
   973  
   974  protodefault:
   975  	/* default state action */
   976  	proton = protoDef[protostate]
   977  	if proton == -2 {
   978  		if protorcvr.char < 0 {
   979  			protorcvr.char, prototoken = protolex1(protolex, &protorcvr.lval)
   980  		}
   981  
   982  		/* look through exception table */
   983  		xi := 0
   984  		for {
   985  			if protoExca[xi+0] == -1 && protoExca[xi+1] == protostate {
   986  				break
   987  			}
   988  			xi += 2
   989  		}
   990  		for xi += 2; ; xi += 2 {
   991  			proton = protoExca[xi+0]
   992  			if proton < 0 || proton == prototoken {
   993  				break
   994  			}
   995  		}
   996  		proton = protoExca[xi+1]
   997  		if proton < 0 {
   998  			goto ret0
   999  		}
  1000  	}
  1001  	if proton == 0 {
  1002  		/* error ... attempt to resume parsing */
  1003  		switch Errflag {
  1004  		case 0: /* brand new error */
  1005  			protolex.Error(protoErrorMessage(protostate, prototoken))
  1006  			Nerrs++
  1007  			if protoDebug >= 1 {
  1008  				__yyfmt__.Printf("%s", protoStatname(protostate))
  1009  				__yyfmt__.Printf(" saw %s\n", protoTokname(prototoken))
  1010  			}
  1011  			fallthrough
  1012  
  1013  		case 1, 2: /* incompletely recovered error ... try again */
  1014  			Errflag = 3
  1015  
  1016  			/* find a state where "error" is a legal shift action */
  1017  			for protop >= 0 {
  1018  				proton = protoPact[protoS[protop].yys] + protoErrCode
  1019  				if proton >= 0 && proton < protoLast {
  1020  					protostate = protoAct[proton] /* simulate a shift of "error" */
  1021  					if protoChk[protostate] == protoErrCode {
  1022  						goto protostack
  1023  					}
  1024  				}
  1025  
  1026  				/* the current p has no shift on "error", pop stack */
  1027  				if protoDebug >= 2 {
  1028  					__yyfmt__.Printf("error recovery pops state %d\n", protoS[protop].yys)
  1029  				}
  1030  				protop--
  1031  			}
  1032  			/* there is no state on the stack with an error shift ... abort */
  1033  			goto ret1
  1034  
  1035  		case 3: /* no shift yet; clobber input char */
  1036  			if protoDebug >= 2 {
  1037  				__yyfmt__.Printf("error recovery discards %s\n", protoTokname(prototoken))
  1038  			}
  1039  			if prototoken == protoEofCode {
  1040  				goto ret1
  1041  			}
  1042  			protorcvr.char = -1
  1043  			prototoken = -1
  1044  			goto protonewstate /* try again in the same state */
  1045  		}
  1046  	}
  1047  
  1048  	/* reduction by production proton */
  1049  	if protoDebug >= 2 {
  1050  		__yyfmt__.Printf("reduce %v in:\n\t%v\n", proton, protoStatname(protostate))
  1051  	}
  1052  
  1053  	protont := proton
  1054  	protopt := protop
  1055  	_ = protopt // guard against "declared and not used"
  1056  
  1057  	protop -= protoR2[proton]
  1058  	// protop is now the index of $0. Perform the default action. Iff the
  1059  	// reduced production is ε, $1 is possibly out of range.
  1060  	if protop+1 >= len(protoS) {
  1061  		nyys := make([]protoSymType, len(protoS)*2)
  1062  		copy(nyys, protoS)
  1063  		protoS = nyys
  1064  	}
  1065  	protoVAL = protoS[protop+1]
  1066  
  1067  	/* consult goto table to find next state */
  1068  	proton = protoR1[proton]
  1069  	protog := protoPgo[proton]
  1070  	protoj := protog + protoS[protop].yys + 1
  1071  
  1072  	if protoj >= protoLast {
  1073  		protostate = protoAct[protog]
  1074  	} else {
  1075  		protostate = protoAct[protoj]
  1076  		if protoChk[protostate] != -proton {
  1077  			protostate = protoAct[protog]
  1078  		}
  1079  	}
  1080  	// dummy call; replaced with literal code
  1081  	switch protont {
  1082  
  1083  	case 1:
  1084  		protoDollar = protoS[protopt-1 : protopt+1]
  1085  //line proto.y:143
  1086  		{
  1087  			protoVAL.file = ast.NewFileNode(protoDollar[1].syn, nil)
  1088  			protolex.(*protoLex).res = protoVAL.file
  1089  		}
  1090  	case 2:
  1091  		protoDollar = protoS[protopt-1 : protopt+1]
  1092  //line proto.y:147
  1093  		{
  1094  			protoVAL.file = ast.NewFileNode(nil, protoDollar[1].fileDecls)
  1095  			protolex.(*protoLex).res = protoVAL.file
  1096  		}
  1097  	case 3:
  1098  		protoDollar = protoS[protopt-2 : protopt+1]
  1099  //line proto.y:151
  1100  		{
  1101  			protoVAL.file = ast.NewFileNode(protoDollar[1].syn, protoDollar[2].fileDecls)
  1102  			protolex.(*protoLex).res = protoVAL.file
  1103  		}
  1104  	case 4:
  1105  		protoDollar = protoS[protopt-0 : protopt+1]
  1106  //line proto.y:155
  1107  		{
  1108  		}
  1109  	case 5:
  1110  		protoDollar = protoS[protopt-2 : protopt+1]
  1111  //line proto.y:158
  1112  		{
  1113  			if protoDollar[2].fileDecl != nil {
  1114  				protoVAL.fileDecls = append(protoDollar[1].fileDecls, protoDollar[2].fileDecl)
  1115  			} else {
  1116  				protoVAL.fileDecls = protoDollar[1].fileDecls
  1117  			}
  1118  		}
  1119  	case 6:
  1120  		protoDollar = protoS[protopt-1 : protopt+1]
  1121  //line proto.y:165
  1122  		{
  1123  			if protoDollar[1].fileDecl != nil {
  1124  				protoVAL.fileDecls = []ast.FileElement{protoDollar[1].fileDecl}
  1125  			} else {
  1126  				protoVAL.fileDecls = nil
  1127  			}
  1128  		}
  1129  	case 7:
  1130  		protoDollar = protoS[protopt-1 : protopt+1]
  1131  //line proto.y:173
  1132  		{
  1133  			protoVAL.fileDecl = protoDollar[1].imprt
  1134  		}
  1135  	case 8:
  1136  		protoDollar = protoS[protopt-1 : protopt+1]
  1137  //line proto.y:176
  1138  		{
  1139  			protoVAL.fileDecl = protoDollar[1].pkg
  1140  		}
  1141  	case 9:
  1142  		protoDollar = protoS[protopt-1 : protopt+1]
  1143  //line proto.y:179
  1144  		{
  1145  			protoVAL.fileDecl = protoDollar[1].opt
  1146  		}
  1147  	case 10:
  1148  		protoDollar = protoS[protopt-1 : protopt+1]
  1149  //line proto.y:182
  1150  		{
  1151  			protoVAL.fileDecl = protoDollar[1].msg
  1152  		}
  1153  	case 11:
  1154  		protoDollar = protoS[protopt-1 : protopt+1]
  1155  //line proto.y:185
  1156  		{
  1157  			protoVAL.fileDecl = protoDollar[1].en
  1158  		}
  1159  	case 12:
  1160  		protoDollar = protoS[protopt-1 : protopt+1]
  1161  //line proto.y:188
  1162  		{
  1163  			protoVAL.fileDecl = protoDollar[1].extend
  1164  		}
  1165  	case 13:
  1166  		protoDollar = protoS[protopt-1 : protopt+1]
  1167  //line proto.y:191
  1168  		{
  1169  			protoVAL.fileDecl = protoDollar[1].svc
  1170  		}
  1171  	case 14:
  1172  		protoDollar = protoS[protopt-1 : protopt+1]
  1173  //line proto.y:194
  1174  		{
  1175  			protoVAL.fileDecl = ast.NewEmptyDeclNode(protoDollar[1].b)
  1176  		}
  1177  	case 15:
  1178  		protoDollar = protoS[protopt-2 : protopt+1]
  1179  //line proto.y:197
  1180  		{
  1181  			protoVAL.fileDecl = nil
  1182  		}
  1183  	case 16:
  1184  		protoDollar = protoS[protopt-1 : protopt+1]
  1185  //line proto.y:200
  1186  		{
  1187  			protoVAL.fileDecl = nil
  1188  		}
  1189  	case 17:
  1190  		protoDollar = protoS[protopt-4 : protopt+1]
  1191  //line proto.y:204
  1192  		{
  1193  			protoVAL.syn = ast.NewSyntaxNode(protoDollar[1].id.ToKeyword(), protoDollar[2].b, protoDollar[3].str.toStringValueNode(), protoDollar[4].b)
  1194  		}
  1195  	case 18:
  1196  		protoDollar = protoS[protopt-3 : protopt+1]
  1197  //line proto.y:208
  1198  		{
  1199  			protoVAL.imprt = ast.NewImportNode(protoDollar[1].id.ToKeyword(), nil, nil, protoDollar[2].str.toStringValueNode(), protoDollar[3].b)
  1200  		}
  1201  	case 19:
  1202  		protoDollar = protoS[protopt-4 : protopt+1]
  1203  //line proto.y:211
  1204  		{
  1205  			protoVAL.imprt = ast.NewImportNode(protoDollar[1].id.ToKeyword(), nil, protoDollar[2].id.ToKeyword(), protoDollar[3].str.toStringValueNode(), protoDollar[4].b)
  1206  		}
  1207  	case 20:
  1208  		protoDollar = protoS[protopt-4 : protopt+1]
  1209  //line proto.y:214
  1210  		{
  1211  			protoVAL.imprt = ast.NewImportNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), nil, protoDollar[3].str.toStringValueNode(), protoDollar[4].b)
  1212  		}
  1213  	case 21:
  1214  		protoDollar = protoS[protopt-3 : protopt+1]
  1215  //line proto.y:218
  1216  		{
  1217  			protoVAL.pkg = ast.NewPackageNode(protoDollar[1].id.ToKeyword(), protoDollar[2].cid.toIdentValueNode(nil), protoDollar[3].b)
  1218  		}
  1219  	case 22:
  1220  		protoDollar = protoS[protopt-1 : protopt+1]
  1221  //line proto.y:222
  1222  		{
  1223  			protoVAL.cid = &identList{protoDollar[1].id, nil, nil}
  1224  		}
  1225  	case 23:
  1226  		protoDollar = protoS[protopt-3 : protopt+1]
  1227  //line proto.y:225
  1228  		{
  1229  			protoVAL.cid = &identList{protoDollar[1].id, protoDollar[2].b, protoDollar[3].cid}
  1230  		}
  1231  	case 24:
  1232  		protoDollar = protoS[protopt-5 : protopt+1]
  1233  //line proto.y:229
  1234  		{
  1235  			refs, dots := protoDollar[2].optNms.toNodes()
  1236  			optName := ast.NewOptionNameNode(refs, dots)
  1237  			protoVAL.opt = ast.NewOptionNode(protoDollar[1].id.ToKeyword(), optName, protoDollar[3].b, protoDollar[4].v, protoDollar[5].b)
  1238  		}
  1239  	case 25:
  1240  		protoDollar = protoS[protopt-1 : protopt+1]
  1241  //line proto.y:235
  1242  		{
  1243  			protoVAL.optNms = &fieldRefList{protoDollar[1].ref, nil, nil}
  1244  		}
  1245  	case 26:
  1246  		protoDollar = protoS[protopt-3 : protopt+1]
  1247  //line proto.y:238
  1248  		{
  1249  			protoVAL.optNms = &fieldRefList{protoDollar[1].ref, protoDollar[2].b, protoDollar[3].optNms}
  1250  		}
  1251  	case 27:
  1252  		protoDollar = protoS[protopt-1 : protopt+1]
  1253  //line proto.y:242
  1254  		{
  1255  			protoVAL.ref = ast.NewFieldReferenceNode(protoDollar[1].id)
  1256  		}
  1257  	case 28:
  1258  		protoDollar = protoS[protopt-3 : protopt+1]
  1259  //line proto.y:245
  1260  		{
  1261  			protoVAL.ref = ast.NewExtensionFieldReferenceNode(protoDollar[1].b, protoDollar[2].tid, protoDollar[3].b)
  1262  		}
  1263  	case 31:
  1264  		protoDollar = protoS[protopt-1 : protopt+1]
  1265  //line proto.y:252
  1266  		{
  1267  			protoVAL.v = protoDollar[1].str.toStringValueNode()
  1268  		}
  1269  	case 33:
  1270  		protoDollar = protoS[protopt-1 : protopt+1]
  1271  //line proto.y:256
  1272  		{
  1273  			if protoDollar[1].id.Val == "true" || protoDollar[1].id.Val == "false" {
  1274  				protoVAL.v = ast.NewBoolLiteralNode(protoDollar[1].id.ToKeyword())
  1275  			} else if protoDollar[1].id.Val == "inf" || protoDollar[1].id.Val == "nan" {
  1276  				protoVAL.v = ast.NewSpecialFloatLiteralNode(protoDollar[1].id.ToKeyword())
  1277  			} else {
  1278  				protoVAL.v = protoDollar[1].id
  1279  			}
  1280  		}
  1281  	case 34:
  1282  		protoDollar = protoS[protopt-1 : protopt+1]
  1283  //line proto.y:266
  1284  		{
  1285  			protoVAL.v = protoDollar[1].f
  1286  		}
  1287  	case 35:
  1288  		protoDollar = protoS[protopt-2 : protopt+1]
  1289  //line proto.y:269
  1290  		{
  1291  			protoVAL.v = ast.NewSignedFloatLiteralNode(protoDollar[1].b, protoDollar[2].f)
  1292  		}
  1293  	case 36:
  1294  		protoDollar = protoS[protopt-2 : protopt+1]
  1295  //line proto.y:272
  1296  		{
  1297  			protoVAL.v = ast.NewSignedFloatLiteralNode(protoDollar[1].b, protoDollar[2].f)
  1298  		}
  1299  	case 37:
  1300  		protoDollar = protoS[protopt-2 : protopt+1]
  1301  //line proto.y:275
  1302  		{
  1303  			f := ast.NewSpecialFloatLiteralNode(protoDollar[2].id.ToKeyword())
  1304  			protoVAL.v = ast.NewSignedFloatLiteralNode(protoDollar[1].b, f)
  1305  		}
  1306  	case 38:
  1307  		protoDollar = protoS[protopt-2 : protopt+1]
  1308  //line proto.y:279
  1309  		{
  1310  			f := ast.NewSpecialFloatLiteralNode(protoDollar[2].id.ToKeyword())
  1311  			protoVAL.v = ast.NewSignedFloatLiteralNode(protoDollar[1].b, f)
  1312  		}
  1313  	case 39:
  1314  		protoDollar = protoS[protopt-1 : protopt+1]
  1315  //line proto.y:283
  1316  		{
  1317  			protoVAL.v = protoDollar[1].i
  1318  		}
  1319  	case 40:
  1320  		protoDollar = protoS[protopt-2 : protopt+1]
  1321  //line proto.y:286
  1322  		{
  1323  			protoVAL.v = ast.NewPositiveUintLiteralNode(protoDollar[1].b, protoDollar[2].i)
  1324  		}
  1325  	case 41:
  1326  		protoDollar = protoS[protopt-2 : protopt+1]
  1327  //line proto.y:289
  1328  		{
  1329  			if protoDollar[2].i.Val > math.MaxInt64+1 {
  1330  				// can't represent as int so treat as float literal
  1331  				protoVAL.v = ast.NewSignedFloatLiteralNode(protoDollar[1].b, protoDollar[2].i)
  1332  			} else {
  1333  				protoVAL.v = ast.NewNegativeIntLiteralNode(protoDollar[1].b, protoDollar[2].i)
  1334  			}
  1335  		}
  1336  	case 42:
  1337  		protoDollar = protoS[protopt-1 : protopt+1]
  1338  //line proto.y:298
  1339  		{
  1340  			protoVAL.str = &stringList{protoDollar[1].s, nil}
  1341  		}
  1342  	case 43:
  1343  		protoDollar = protoS[protopt-2 : protopt+1]
  1344  //line proto.y:301
  1345  		{
  1346  			protoVAL.str = &stringList{protoDollar[1].s, protoDollar[2].str}
  1347  		}
  1348  	case 44:
  1349  		protoDollar = protoS[protopt-3 : protopt+1]
  1350  //line proto.y:305
  1351  		{
  1352  			fields, delims := protoDollar[2].msgLit.toNodes()
  1353  			protoVAL.v = ast.NewMessageLiteralNode(protoDollar[1].b, fields, delims, protoDollar[3].b)
  1354  		}
  1355  	case 45:
  1356  		protoDollar = protoS[protopt-1 : protopt+1]
  1357  //line proto.y:310
  1358  		{
  1359  			if protoDollar[1].msgEntry != nil {
  1360  				protoVAL.msgLit = &messageFieldList{protoDollar[1].msgEntry, nil}
  1361  			} else {
  1362  				protoVAL.msgLit = nil
  1363  			}
  1364  		}
  1365  	case 46:
  1366  		protoDollar = protoS[protopt-2 : protopt+1]
  1367  //line proto.y:317
  1368  		{
  1369  			if protoDollar[1].msgEntry != nil {
  1370  				protoVAL.msgLit = &messageFieldList{protoDollar[1].msgEntry, protoDollar[2].msgLit}
  1371  			} else {
  1372  				protoVAL.msgLit = protoDollar[2].msgLit
  1373  			}
  1374  		}
  1375  	case 47:
  1376  		protoDollar = protoS[protopt-0 : protopt+1]
  1377  //line proto.y:324
  1378  		{
  1379  			protoVAL.msgLit = nil
  1380  		}
  1381  	case 48:
  1382  		protoDollar = protoS[protopt-1 : protopt+1]
  1383  //line proto.y:328
  1384  		{
  1385  			if protoDollar[1].msgField != nil {
  1386  				protoVAL.msgEntry = &messageFieldEntry{protoDollar[1].msgField, nil}
  1387  			} else {
  1388  				protoVAL.msgEntry = nil
  1389  			}
  1390  		}
  1391  	case 49:
  1392  		protoDollar = protoS[protopt-2 : protopt+1]
  1393  //line proto.y:335
  1394  		{
  1395  			if protoDollar[1].msgField != nil {
  1396  				protoVAL.msgEntry = &messageFieldEntry{protoDollar[1].msgField, protoDollar[2].b}
  1397  			} else {
  1398  				protoVAL.msgEntry = nil
  1399  			}
  1400  		}
  1401  	case 50:
  1402  		protoDollar = protoS[protopt-2 : protopt+1]
  1403  //line proto.y:342
  1404  		{
  1405  			if protoDollar[1].msgField != nil {
  1406  				protoVAL.msgEntry = &messageFieldEntry{protoDollar[1].msgField, protoDollar[2].b}
  1407  			} else {
  1408  				protoVAL.msgEntry = nil
  1409  			}
  1410  		}
  1411  	case 51:
  1412  		protoDollar = protoS[protopt-2 : protopt+1]
  1413  //line proto.y:349
  1414  		{
  1415  			protoVAL.msgEntry = nil
  1416  		}
  1417  	case 52:
  1418  		protoDollar = protoS[protopt-2 : protopt+1]
  1419  //line proto.y:352
  1420  		{
  1421  			protoVAL.msgEntry = nil
  1422  		}
  1423  	case 53:
  1424  		protoDollar = protoS[protopt-1 : protopt+1]
  1425  //line proto.y:355
  1426  		{
  1427  			protoVAL.msgEntry = nil
  1428  		}
  1429  	case 54:
  1430  		protoDollar = protoS[protopt-3 : protopt+1]
  1431  //line proto.y:359
  1432  		{
  1433  			if protoDollar[1].ref != nil {
  1434  				protoVAL.msgField = ast.NewMessageFieldNode(protoDollar[1].ref, protoDollar[2].b, protoDollar[3].v)
  1435  			} else {
  1436  				protoVAL.msgField = nil
  1437  			}
  1438  		}
  1439  	case 55:
  1440  		protoDollar = protoS[protopt-4 : protopt+1]
  1441  //line proto.y:366
  1442  		{
  1443  			if protoDollar[1].ref != nil {
  1444  				val := ast.NewArrayLiteralNode(protoDollar[3].b, nil, nil, protoDollar[4].b)
  1445  				protoVAL.msgField = ast.NewMessageFieldNode(protoDollar[1].ref, protoDollar[2].b, val)
  1446  			} else {
  1447  				protoVAL.msgField = nil
  1448  			}
  1449  		}
  1450  	case 56:
  1451  		protoDollar = protoS[protopt-5 : protopt+1]
  1452  //line proto.y:374
  1453  		{
  1454  			if protoDollar[1].ref != nil {
  1455  				vals, commas := protoDollar[4].sl.toNodes()
  1456  				val := ast.NewArrayLiteralNode(protoDollar[3].b, vals, commas, protoDollar[5].b)
  1457  				protoVAL.msgField = ast.NewMessageFieldNode(protoDollar[1].ref, protoDollar[2].b, val)
  1458  			} else {
  1459  				protoVAL.msgField = nil
  1460  			}
  1461  		}
  1462  	case 57:
  1463  		protoDollar = protoS[protopt-5 : protopt+1]
  1464  //line proto.y:383
  1465  		{
  1466  			protoVAL.msgField = nil
  1467  		}
  1468  	case 58:
  1469  		protoDollar = protoS[protopt-3 : protopt+1]
  1470  //line proto.y:386
  1471  		{
  1472  			if protoDollar[1].ref != nil {
  1473  				protoVAL.msgField = ast.NewMessageFieldNode(protoDollar[1].ref, protoDollar[2].b, protoDollar[3].v)
  1474  			} else {
  1475  				protoVAL.msgField = nil
  1476  			}
  1477  		}
  1478  	case 59:
  1479  		protoDollar = protoS[protopt-2 : protopt+1]
  1480  //line proto.y:393
  1481  		{
  1482  			if protoDollar[1].ref != nil {
  1483  				protoVAL.msgField = ast.NewMessageFieldNode(protoDollar[1].ref, nil, protoDollar[2].v)
  1484  			} else {
  1485  				protoVAL.msgField = nil
  1486  			}
  1487  		}
  1488  	case 60:
  1489  		protoDollar = protoS[protopt-5 : protopt+1]
  1490  //line proto.y:400
  1491  		{
  1492  			if protoDollar[1].ref != nil {
  1493  				fields, delims := protoDollar[4].msgLit.toNodes()
  1494  				msg := ast.NewMessageLiteralNode(protoDollar[3].b, fields, delims, protoDollar[5].b)
  1495  				protoVAL.msgField = ast.NewMessageFieldNode(protoDollar[1].ref, protoDollar[2].b, msg)
  1496  			} else {
  1497  				protoVAL.msgField = nil
  1498  			}
  1499  		}
  1500  	case 61:
  1501  		protoDollar = protoS[protopt-4 : protopt+1]
  1502  //line proto.y:409
  1503  		{
  1504  			if protoDollar[1].ref != nil {
  1505  				fields, delims := protoDollar[3].msgLit.toNodes()
  1506  				msg := ast.NewMessageLiteralNode(protoDollar[2].b, fields, delims, protoDollar[4].b)
  1507  				protoVAL.msgField = ast.NewMessageFieldNode(protoDollar[1].ref, nil, msg)
  1508  			} else {
  1509  				protoVAL.msgField = nil
  1510  			}
  1511  		}
  1512  	case 62:
  1513  		protoDollar = protoS[protopt-5 : protopt+1]
  1514  //line proto.y:418
  1515  		{
  1516  			protoVAL.msgField = nil
  1517  		}
  1518  	case 63:
  1519  		protoDollar = protoS[protopt-4 : protopt+1]
  1520  //line proto.y:421
  1521  		{
  1522  			protoVAL.msgField = nil
  1523  		}
  1524  	case 64:
  1525  		protoDollar = protoS[protopt-1 : protopt+1]
  1526  //line proto.y:425
  1527  		{
  1528  			protoVAL.ref = ast.NewFieldReferenceNode(protoDollar[1].id)
  1529  		}
  1530  	case 65:
  1531  		protoDollar = protoS[protopt-3 : protopt+1]
  1532  //line proto.y:428
  1533  		{
  1534  			protoVAL.ref = ast.NewExtensionFieldReferenceNode(protoDollar[1].b, protoDollar[2].tid, protoDollar[3].b)
  1535  		}
  1536  	case 66:
  1537  		protoDollar = protoS[protopt-3 : protopt+1]
  1538  //line proto.y:431
  1539  		{
  1540  			protoVAL.ref = nil
  1541  		}
  1542  	case 67:
  1543  		protoDollar = protoS[protopt-1 : protopt+1]
  1544  //line proto.y:435
  1545  		{
  1546  			protoVAL.sl = &valueList{protoDollar[1].v, nil, nil}
  1547  		}
  1548  	case 68:
  1549  		protoDollar = protoS[protopt-3 : protopt+1]
  1550  //line proto.y:438
  1551  		{
  1552  			protoVAL.sl = &valueList{protoDollar[1].v, protoDollar[2].b, protoDollar[3].sl}
  1553  		}
  1554  	case 69:
  1555  		protoDollar = protoS[protopt-3 : protopt+1]
  1556  //line proto.y:441
  1557  		{
  1558  			fields, delims := protoDollar[2].msgLit.toNodes()
  1559  			msg := ast.NewMessageLiteralNode(protoDollar[1].b, fields, delims, protoDollar[3].b)
  1560  			protoVAL.sl = &valueList{msg, nil, nil}
  1561  		}
  1562  	case 70:
  1563  		protoDollar = protoS[protopt-5 : protopt+1]
  1564  //line proto.y:446
  1565  		{
  1566  			fields, delims := protoDollar[2].msgLit.toNodes()
  1567  			msg := ast.NewMessageLiteralNode(protoDollar[1].b, fields, delims, protoDollar[3].b)
  1568  			protoVAL.sl = &valueList{msg, protoDollar[4].b, protoDollar[5].sl}
  1569  		}
  1570  	case 71:
  1571  		protoDollar = protoS[protopt-3 : protopt+1]
  1572  //line proto.y:451
  1573  		{
  1574  			protoVAL.sl = nil
  1575  		}
  1576  	case 72:
  1577  		protoDollar = protoS[protopt-5 : protopt+1]
  1578  //line proto.y:454
  1579  		{
  1580  			protoVAL.sl = protoDollar[5].sl
  1581  		}
  1582  	case 73:
  1583  		protoDollar = protoS[protopt-1 : protopt+1]
  1584  //line proto.y:458
  1585  		{
  1586  			protoVAL.tid = protoDollar[1].cid.toIdentValueNode(nil)
  1587  		}
  1588  	case 74:
  1589  		protoDollar = protoS[protopt-2 : protopt+1]
  1590  //line proto.y:461
  1591  		{
  1592  			protoVAL.tid = protoDollar[2].cid.toIdentValueNode(protoDollar[1].b)
  1593  		}
  1594  	case 75:
  1595  		protoDollar = protoS[protopt-6 : protopt+1]
  1596  //line proto.y:465
  1597  		{
  1598  			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b)
  1599  		}
  1600  	case 76:
  1601  		protoDollar = protoS[protopt-6 : protopt+1]
  1602  //line proto.y:468
  1603  		{
  1604  			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b)
  1605  		}
  1606  	case 77:
  1607  		protoDollar = protoS[protopt-6 : protopt+1]
  1608  //line proto.y:471
  1609  		{
  1610  			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b)
  1611  		}
  1612  	case 78:
  1613  		protoDollar = protoS[protopt-5 : protopt+1]
  1614  //line proto.y:474
  1615  		{
  1616  			protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, nil, protoDollar[5].b)
  1617  		}
  1618  	case 79:
  1619  		protoDollar = protoS[protopt-7 : protopt+1]
  1620  //line proto.y:477
  1621  		{
  1622  			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b)
  1623  		}
  1624  	case 80:
  1625  		protoDollar = protoS[protopt-7 : protopt+1]
  1626  //line proto.y:480
  1627  		{
  1628  			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b)
  1629  		}
  1630  	case 81:
  1631  		protoDollar = protoS[protopt-7 : protopt+1]
  1632  //line proto.y:483
  1633  		{
  1634  			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b)
  1635  		}
  1636  	case 82:
  1637  		protoDollar = protoS[protopt-6 : protopt+1]
  1638  //line proto.y:486
  1639  		{
  1640  			protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, protoDollar[5].cmpctOpts, protoDollar[6].b)
  1641  		}
  1642  	case 83:
  1643  		protoDollar = protoS[protopt-3 : protopt+1]
  1644  //line proto.y:490
  1645  		{
  1646  			opts, commas := protoDollar[2].opts.toNodes()
  1647  			protoVAL.cmpctOpts = ast.NewCompactOptionsNode(protoDollar[1].b, opts, commas, protoDollar[3].b)
  1648  		}
  1649  	case 84:
  1650  		protoDollar = protoS[protopt-1 : protopt+1]
  1651  //line proto.y:495
  1652  		{
  1653  			protoVAL.opts = &compactOptionList{protoDollar[1].opt, nil, nil}
  1654  		}
  1655  	case 85:
  1656  		protoDollar = protoS[protopt-3 : protopt+1]
  1657  //line proto.y:498
  1658  		{
  1659  			protoVAL.opts = &compactOptionList{protoDollar[1].opt, protoDollar[2].b, protoDollar[3].opts}
  1660  		}
  1661  	case 86:
  1662  		protoDollar = protoS[protopt-3 : protopt+1]
  1663  //line proto.y:502
  1664  		{
  1665  			refs, dots := protoDollar[1].optNms.toNodes()
  1666  			optName := ast.NewOptionNameNode(refs, dots)
  1667  			protoVAL.opt = ast.NewCompactOptionNode(optName, protoDollar[2].b, protoDollar[3].v)
  1668  		}
  1669  	case 87:
  1670  		protoDollar = protoS[protopt-8 : protopt+1]
  1671  //line proto.y:508
  1672  		{
  1673  			protoVAL.grp = ast.NewGroupNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b, protoDollar[7].msgDecls, protoDollar[8].b)
  1674  		}
  1675  	case 88:
  1676  		protoDollar = protoS[protopt-8 : protopt+1]
  1677  //line proto.y:511
  1678  		{
  1679  			protoVAL.grp = ast.NewGroupNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b, protoDollar[7].msgDecls, protoDollar[8].b)
  1680  		}
  1681  	case 89:
  1682  		protoDollar = protoS[protopt-8 : protopt+1]
  1683  //line proto.y:514
  1684  		{
  1685  			protoVAL.grp = ast.NewGroupNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b, protoDollar[7].msgDecls, protoDollar[8].b)
  1686  		}
  1687  	case 90:
  1688  		protoDollar = protoS[protopt-9 : protopt+1]
  1689  //line proto.y:517
  1690  		{
  1691  			protoVAL.grp = ast.NewGroupNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b, protoDollar[8].msgDecls, protoDollar[9].b)
  1692  		}
  1693  	case 91:
  1694  		protoDollar = protoS[protopt-9 : protopt+1]
  1695  //line proto.y:520
  1696  		{
  1697  			protoVAL.grp = ast.NewGroupNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b, protoDollar[8].msgDecls, protoDollar[9].b)
  1698  		}
  1699  	case 92:
  1700  		protoDollar = protoS[protopt-9 : protopt+1]
  1701  //line proto.y:523
  1702  		{
  1703  			protoVAL.grp = ast.NewGroupNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b, protoDollar[8].msgDecls, protoDollar[9].b)
  1704  		}
  1705  	case 93:
  1706  		protoDollar = protoS[protopt-5 : protopt+1]
  1707  //line proto.y:527
  1708  		{
  1709  			protoVAL.oo = ast.NewOneOfNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].ooDecls, protoDollar[5].b)
  1710  		}
  1711  	case 94:
  1712  		protoDollar = protoS[protopt-2 : protopt+1]
  1713  //line proto.y:531
  1714  		{
  1715  			if protoDollar[2].ooDecl != nil {
  1716  				protoVAL.ooDecls = append(protoDollar[1].ooDecls, protoDollar[2].ooDecl)
  1717  			} else {
  1718  				protoVAL.ooDecls = protoDollar[1].ooDecls
  1719  			}
  1720  		}
  1721  	case 95:
  1722  		protoDollar = protoS[protopt-1 : protopt+1]
  1723  //line proto.y:538
  1724  		{
  1725  			if protoDollar[1].ooDecl != nil {
  1726  				protoVAL.ooDecls = []ast.OneOfElement{protoDollar[1].ooDecl}
  1727  			} else {
  1728  				protoVAL.ooDecls = nil
  1729  			}
  1730  		}
  1731  	case 96:
  1732  		protoDollar = protoS[protopt-0 : protopt+1]
  1733  //line proto.y:545
  1734  		{
  1735  			protoVAL.ooDecls = nil
  1736  		}
  1737  	case 97:
  1738  		protoDollar = protoS[protopt-1 : protopt+1]
  1739  //line proto.y:549
  1740  		{
  1741  			protoVAL.ooDecl = protoDollar[1].opt
  1742  		}
  1743  	case 98:
  1744  		protoDollar = protoS[protopt-1 : protopt+1]
  1745  //line proto.y:552
  1746  		{
  1747  			protoVAL.ooDecl = protoDollar[1].fld
  1748  		}
  1749  	case 99:
  1750  		protoDollar = protoS[protopt-1 : protopt+1]
  1751  //line proto.y:555
  1752  		{
  1753  			protoVAL.ooDecl = protoDollar[1].grp
  1754  		}
  1755  	case 100:
  1756  		protoDollar = protoS[protopt-1 : protopt+1]
  1757  //line proto.y:558
  1758  		{
  1759  			protoVAL.ooDecl = ast.NewEmptyDeclNode(protoDollar[1].b)
  1760  		}
  1761  	case 101:
  1762  		protoDollar = protoS[protopt-2 : protopt+1]
  1763  //line proto.y:561
  1764  		{
  1765  			protoVAL.ooDecl = nil
  1766  		}
  1767  	case 102:
  1768  		protoDollar = protoS[protopt-1 : protopt+1]
  1769  //line proto.y:564
  1770  		{
  1771  			protoVAL.ooDecl = nil
  1772  		}
  1773  	case 103:
  1774  		protoDollar = protoS[protopt-5 : protopt+1]
  1775  //line proto.y:568
  1776  		{
  1777  			protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, nil, protoDollar[5].b)
  1778  		}
  1779  	case 104:
  1780  		protoDollar = protoS[protopt-6 : protopt+1]
  1781  //line proto.y:571
  1782  		{
  1783  			protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, protoDollar[5].cmpctOpts, protoDollar[6].b)
  1784  		}
  1785  	case 105:
  1786  		protoDollar = protoS[protopt-7 : protopt+1]
  1787  //line proto.y:575
  1788  		{
  1789  			protoVAL.grp = ast.NewGroupNode(nil, protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, nil, protoDollar[5].b, protoDollar[6].msgDecls, protoDollar[7].b)
  1790  		}
  1791  	case 106:
  1792  		protoDollar = protoS[protopt-8 : protopt+1]
  1793  //line proto.y:578
  1794  		{
  1795  			protoVAL.grp = ast.NewGroupNode(nil, protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, protoDollar[5].cmpctOpts, protoDollar[6].b, protoDollar[7].msgDecls, protoDollar[8].b)
  1796  		}
  1797  	case 107:
  1798  		protoDollar = protoS[protopt-5 : protopt+1]
  1799  //line proto.y:582
  1800  		{
  1801  			protoVAL.mapFld = ast.NewMapFieldNode(protoDollar[1].mapType, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, nil, protoDollar[5].b)
  1802  		}
  1803  	case 108:
  1804  		protoDollar = protoS[protopt-6 : protopt+1]
  1805  //line proto.y:585
  1806  		{
  1807  			protoVAL.mapFld = ast.NewMapFieldNode(protoDollar[1].mapType, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, protoDollar[5].cmpctOpts, protoDollar[6].b)
  1808  		}
  1809  	case 109:
  1810  		protoDollar = protoS[protopt-6 : protopt+1]
  1811  //line proto.y:589
  1812  		{
  1813  			protoVAL.mapType = ast.NewMapTypeNode(protoDollar[1].id.ToKeyword(), protoDollar[2].b, protoDollar[3].id, protoDollar[4].b, protoDollar[5].tid, protoDollar[6].b)
  1814  		}
  1815  	case 122:
  1816  		protoDollar = protoS[protopt-3 : protopt+1]
  1817  //line proto.y:606
  1818  		{
  1819  			ranges, commas := protoDollar[2].rngs.toNodes()
  1820  			protoVAL.ext = ast.NewExtensionRangeNode(protoDollar[1].id.ToKeyword(), ranges, commas, nil, protoDollar[3].b)
  1821  		}
  1822  	case 123:
  1823  		protoDollar = protoS[protopt-4 : protopt+1]
  1824  //line proto.y:610
  1825  		{
  1826  			ranges, commas := protoDollar[2].rngs.toNodes()
  1827  			protoVAL.ext = ast.NewExtensionRangeNode(protoDollar[1].id.ToKeyword(), ranges, commas, protoDollar[3].cmpctOpts, protoDollar[4].b)
  1828  		}
  1829  	case 124:
  1830  		protoDollar = protoS[protopt-1 : protopt+1]
  1831  //line proto.y:615
  1832  		{
  1833  			protoVAL.rngs = &rangeList{protoDollar[1].rng, nil, nil}
  1834  		}
  1835  	case 125:
  1836  		protoDollar = protoS[protopt-3 : protopt+1]
  1837  //line proto.y:618
  1838  		{
  1839  			protoVAL.rngs = &rangeList{protoDollar[1].rng, protoDollar[2].b, protoDollar[3].rngs}
  1840  		}
  1841  	case 126:
  1842  		protoDollar = protoS[protopt-1 : protopt+1]
  1843  //line proto.y:622
  1844  		{
  1845  			protoVAL.rng = ast.NewRangeNode(protoDollar[1].i, nil, nil, nil)
  1846  		}
  1847  	case 127:
  1848  		protoDollar = protoS[protopt-3 : protopt+1]
  1849  //line proto.y:625
  1850  		{
  1851  			protoVAL.rng = ast.NewRangeNode(protoDollar[1].i, protoDollar[2].id.ToKeyword(), protoDollar[3].i, nil)
  1852  		}
  1853  	case 128:
  1854  		protoDollar = protoS[protopt-3 : protopt+1]
  1855  //line proto.y:628
  1856  		{
  1857  			protoVAL.rng = ast.NewRangeNode(protoDollar[1].i, protoDollar[2].id.ToKeyword(), nil, protoDollar[3].id.ToKeyword())
  1858  		}
  1859  	case 129:
  1860  		protoDollar = protoS[protopt-1 : protopt+1]
  1861  //line proto.y:632
  1862  		{
  1863  			protoVAL.rngs = &rangeList{protoDollar[1].rng, nil, nil}
  1864  		}
  1865  	case 130:
  1866  		protoDollar = protoS[protopt-3 : protopt+1]
  1867  //line proto.y:635
  1868  		{
  1869  			protoVAL.rngs = &rangeList{protoDollar[1].rng, protoDollar[2].b, protoDollar[3].rngs}
  1870  		}
  1871  	case 131:
  1872  		protoDollar = protoS[protopt-1 : protopt+1]
  1873  //line proto.y:639
  1874  		{
  1875  			protoVAL.rng = ast.NewRangeNode(protoDollar[1].il, nil, nil, nil)
  1876  		}
  1877  	case 132:
  1878  		protoDollar = protoS[protopt-3 : protopt+1]
  1879  //line proto.y:642
  1880  		{
  1881  			protoVAL.rng = ast.NewRangeNode(protoDollar[1].il, protoDollar[2].id.ToKeyword(), protoDollar[3].il, nil)
  1882  		}
  1883  	case 133:
  1884  		protoDollar = protoS[protopt-3 : protopt+1]
  1885  //line proto.y:645
  1886  		{
  1887  			protoVAL.rng = ast.NewRangeNode(protoDollar[1].il, protoDollar[2].id.ToKeyword(), nil, protoDollar[3].id.ToKeyword())
  1888  		}
  1889  	case 134:
  1890  		protoDollar = protoS[protopt-1 : protopt+1]
  1891  //line proto.y:649
  1892  		{
  1893  			protoVAL.il = protoDollar[1].i
  1894  		}
  1895  	case 135:
  1896  		protoDollar = protoS[protopt-2 : protopt+1]
  1897  //line proto.y:652
  1898  		{
  1899  			protoVAL.il = ast.NewNegativeIntLiteralNode(protoDollar[1].b, protoDollar[2].i)
  1900  		}
  1901  	case 136:
  1902  		protoDollar = protoS[protopt-3 : protopt+1]
  1903  //line proto.y:656
  1904  		{
  1905  			ranges, commas := protoDollar[2].rngs.toNodes()
  1906  			protoVAL.resvd = ast.NewReservedRangesNode(protoDollar[1].id.ToKeyword(), ranges, commas, protoDollar[3].b)
  1907  		}
  1908  	case 138:
  1909  		protoDollar = protoS[protopt-3 : protopt+1]
  1910  //line proto.y:662
  1911  		{
  1912  			ranges, commas := protoDollar[2].rngs.toNodes()
  1913  			protoVAL.resvd = ast.NewReservedRangesNode(protoDollar[1].id.ToKeyword(), ranges, commas, protoDollar[3].b)
  1914  		}
  1915  	case 140:
  1916  		protoDollar = protoS[protopt-3 : protopt+1]
  1917  //line proto.y:668
  1918  		{
  1919  			names, commas := protoDollar[2].names.toNodes()
  1920  			protoVAL.resvd = ast.NewReservedNamesNode(protoDollar[1].id.ToKeyword(), names, commas, protoDollar[3].b)
  1921  		}
  1922  	case 141:
  1923  		protoDollar = protoS[protopt-1 : protopt+1]
  1924  //line proto.y:673
  1925  		{
  1926  			protoVAL.names = &nameList{protoDollar[1].str.toStringValueNode(), nil, nil}
  1927  		}
  1928  	case 142:
  1929  		protoDollar = protoS[protopt-3 : protopt+1]
  1930  //line proto.y:676
  1931  		{
  1932  			protoVAL.names = &nameList{protoDollar[1].str.toStringValueNode(), protoDollar[2].b, protoDollar[3].names}
  1933  		}
  1934  	case 143:
  1935  		protoDollar = protoS[protopt-5 : protopt+1]
  1936  //line proto.y:680
  1937  		{
  1938  			protoVAL.en = ast.NewEnumNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].enDecls, protoDollar[5].b)
  1939  		}
  1940  	case 144:
  1941  		protoDollar = protoS[protopt-2 : protopt+1]
  1942  //line proto.y:684
  1943  		{
  1944  			if protoDollar[2].enDecl != nil {
  1945  				protoVAL.enDecls = append(protoDollar[1].enDecls, protoDollar[2].enDecl)
  1946  			} else {
  1947  				protoVAL.enDecls = protoDollar[1].enDecls
  1948  			}
  1949  		}
  1950  	case 145:
  1951  		protoDollar = protoS[protopt-1 : protopt+1]
  1952  //line proto.y:691
  1953  		{
  1954  			if protoDollar[1].enDecl != nil {
  1955  				protoVAL.enDecls = []ast.EnumElement{protoDollar[1].enDecl}
  1956  			} else {
  1957  				protoVAL.enDecls = nil
  1958  			}
  1959  		}
  1960  	case 146:
  1961  		protoDollar = protoS[protopt-0 : protopt+1]
  1962  //line proto.y:698
  1963  		{
  1964  			protoVAL.enDecls = nil
  1965  		}
  1966  	case 147:
  1967  		protoDollar = protoS[protopt-1 : protopt+1]
  1968  //line proto.y:702
  1969  		{
  1970  			protoVAL.enDecl = protoDollar[1].opt
  1971  		}
  1972  	case 148:
  1973  		protoDollar = protoS[protopt-1 : protopt+1]
  1974  //line proto.y:705
  1975  		{
  1976  			protoVAL.enDecl = protoDollar[1].env
  1977  		}
  1978  	case 149:
  1979  		protoDollar = protoS[protopt-1 : protopt+1]
  1980  //line proto.y:708
  1981  		{
  1982  			protoVAL.enDecl = protoDollar[1].resvd
  1983  		}
  1984  	case 150:
  1985  		protoDollar = protoS[protopt-1 : protopt+1]
  1986  //line proto.y:711
  1987  		{
  1988  			protoVAL.enDecl = ast.NewEmptyDeclNode(protoDollar[1].b)
  1989  		}
  1990  	case 151:
  1991  		protoDollar = protoS[protopt-2 : protopt+1]
  1992  //line proto.y:714
  1993  		{
  1994  			protoVAL.enDecl = nil
  1995  		}
  1996  	case 152:
  1997  		protoDollar = protoS[protopt-1 : protopt+1]
  1998  //line proto.y:717
  1999  		{
  2000  			protoVAL.enDecl = nil
  2001  		}
  2002  	case 153:
  2003  		protoDollar = protoS[protopt-4 : protopt+1]
  2004  //line proto.y:721
  2005  		{
  2006  			protoVAL.env = ast.NewEnumValueNode(protoDollar[1].id, protoDollar[2].b, protoDollar[3].il, nil, protoDollar[4].b)
  2007  		}
  2008  	case 154:
  2009  		protoDollar = protoS[protopt-5 : protopt+1]
  2010  //line proto.y:724
  2011  		{
  2012  			protoVAL.env = ast.NewEnumValueNode(protoDollar[1].id, protoDollar[2].b, protoDollar[3].il, protoDollar[4].cmpctOpts, protoDollar[5].b)
  2013  		}
  2014  	case 155:
  2015  		protoDollar = protoS[protopt-5 : protopt+1]
  2016  //line proto.y:728
  2017  		{
  2018  			protoVAL.msg = ast.NewMessageNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].msgDecls, protoDollar[5].b)
  2019  		}
  2020  	case 156:
  2021  		protoDollar = protoS[protopt-2 : protopt+1]
  2022  //line proto.y:732
  2023  		{
  2024  			if protoDollar[2].msgDecl != nil {
  2025  				protoVAL.msgDecls = append(protoDollar[1].msgDecls, protoDollar[2].msgDecl)
  2026  			} else {
  2027  				protoVAL.msgDecls = protoDollar[1].msgDecls
  2028  			}
  2029  		}
  2030  	case 157:
  2031  		protoDollar = protoS[protopt-1 : protopt+1]
  2032  //line proto.y:739
  2033  		{
  2034  			if protoDollar[1].msgDecl != nil {
  2035  				protoVAL.msgDecls = []ast.MessageElement{protoDollar[1].msgDecl}
  2036  			} else {
  2037  				protoVAL.msgDecls = nil
  2038  			}
  2039  		}
  2040  	case 158:
  2041  		protoDollar = protoS[protopt-0 : protopt+1]
  2042  //line proto.y:746
  2043  		{
  2044  			protoVAL.msgDecls = nil
  2045  		}
  2046  	case 159:
  2047  		protoDollar = protoS[protopt-1 : protopt+1]
  2048  //line proto.y:750
  2049  		{
  2050  			protoVAL.msgDecl = protoDollar[1].fld
  2051  		}
  2052  	case 160:
  2053  		protoDollar = protoS[protopt-1 : protopt+1]
  2054  //line proto.y:753
  2055  		{
  2056  			protoVAL.msgDecl = protoDollar[1].en
  2057  		}
  2058  	case 161:
  2059  		protoDollar = protoS[protopt-1 : protopt+1]
  2060  //line proto.y:756
  2061  		{
  2062  			protoVAL.msgDecl = protoDollar[1].msg
  2063  		}
  2064  	case 162:
  2065  		protoDollar = protoS[protopt-1 : protopt+1]
  2066  //line proto.y:759
  2067  		{
  2068  			protoVAL.msgDecl = protoDollar[1].extend
  2069  		}
  2070  	case 163:
  2071  		protoDollar = protoS[protopt-1 : protopt+1]
  2072  //line proto.y:762
  2073  		{
  2074  			protoVAL.msgDecl = protoDollar[1].ext
  2075  		}
  2076  	case 164:
  2077  		protoDollar = protoS[protopt-1 : protopt+1]
  2078  //line proto.y:765
  2079  		{
  2080  			protoVAL.msgDecl = protoDollar[1].grp
  2081  		}
  2082  	case 165:
  2083  		protoDollar = protoS[protopt-1 : protopt+1]
  2084  //line proto.y:768
  2085  		{
  2086  			protoVAL.msgDecl = protoDollar[1].opt
  2087  		}
  2088  	case 166:
  2089  		protoDollar = protoS[protopt-1 : protopt+1]
  2090  //line proto.y:771
  2091  		{
  2092  			protoVAL.msgDecl = protoDollar[1].oo
  2093  		}
  2094  	case 167:
  2095  		protoDollar = protoS[protopt-1 : protopt+1]
  2096  //line proto.y:774
  2097  		{
  2098  			protoVAL.msgDecl = protoDollar[1].mapFld
  2099  		}
  2100  	case 168:
  2101  		protoDollar = protoS[protopt-1 : protopt+1]
  2102  //line proto.y:777
  2103  		{
  2104  			protoVAL.msgDecl = protoDollar[1].resvd
  2105  		}
  2106  	case 169:
  2107  		protoDollar = protoS[protopt-1 : protopt+1]
  2108  //line proto.y:780
  2109  		{
  2110  			protoVAL.msgDecl = ast.NewEmptyDeclNode(protoDollar[1].b)
  2111  		}
  2112  	case 170:
  2113  		protoDollar = protoS[protopt-2 : protopt+1]
  2114  //line proto.y:783
  2115  		{
  2116  			protoVAL.msgDecl = nil
  2117  		}
  2118  	case 171:
  2119  		protoDollar = protoS[protopt-1 : protopt+1]
  2120  //line proto.y:786
  2121  		{
  2122  			protoVAL.msgDecl = nil
  2123  		}
  2124  	case 172:
  2125  		protoDollar = protoS[protopt-5 : protopt+1]
  2126  //line proto.y:790
  2127  		{
  2128  			protoVAL.extend = ast.NewExtendNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].b, protoDollar[4].extDecls, protoDollar[5].b)
  2129  		}
  2130  	case 173:
  2131  		protoDollar = protoS[protopt-2 : protopt+1]
  2132  //line proto.y:794
  2133  		{
  2134  			if protoDollar[2].extDecl != nil {
  2135  				protoVAL.extDecls = append(protoDollar[1].extDecls, protoDollar[2].extDecl)
  2136  			} else {
  2137  				protoVAL.extDecls = protoDollar[1].extDecls
  2138  			}
  2139  		}
  2140  	case 174:
  2141  		protoDollar = protoS[protopt-1 : protopt+1]
  2142  //line proto.y:801
  2143  		{
  2144  			if protoDollar[1].extDecl != nil {
  2145  				protoVAL.extDecls = []ast.ExtendElement{protoDollar[1].extDecl}
  2146  			} else {
  2147  				protoVAL.extDecls = nil
  2148  			}
  2149  		}
  2150  	case 175:
  2151  		protoDollar = protoS[protopt-0 : protopt+1]
  2152  //line proto.y:808
  2153  		{
  2154  			protoVAL.extDecls = nil
  2155  		}
  2156  	case 176:
  2157  		protoDollar = protoS[protopt-1 : protopt+1]
  2158  //line proto.y:812
  2159  		{
  2160  			protoVAL.extDecl = protoDollar[1].fld
  2161  		}
  2162  	case 177:
  2163  		protoDollar = protoS[protopt-1 : protopt+1]
  2164  //line proto.y:815
  2165  		{
  2166  			protoVAL.extDecl = protoDollar[1].grp
  2167  		}
  2168  	case 178:
  2169  		protoDollar = protoS[protopt-1 : protopt+1]
  2170  //line proto.y:818
  2171  		{
  2172  			protoVAL.extDecl = ast.NewEmptyDeclNode(protoDollar[1].b)
  2173  		}
  2174  	case 179:
  2175  		protoDollar = protoS[protopt-2 : protopt+1]
  2176  //line proto.y:821
  2177  		{
  2178  			protoVAL.extDecl = nil
  2179  		}
  2180  	case 180:
  2181  		protoDollar = protoS[protopt-1 : protopt+1]
  2182  //line proto.y:824
  2183  		{
  2184  			protoVAL.extDecl = nil
  2185  		}
  2186  	case 181:
  2187  		protoDollar = protoS[protopt-5 : protopt+1]
  2188  //line proto.y:828
  2189  		{
  2190  			protoVAL.svc = ast.NewServiceNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].svcDecls, protoDollar[5].b)
  2191  		}
  2192  	case 182:
  2193  		protoDollar = protoS[protopt-2 : protopt+1]
  2194  //line proto.y:832
  2195  		{
  2196  			if protoDollar[2].svcDecl != nil {
  2197  				protoVAL.svcDecls = append(protoDollar[1].svcDecls, protoDollar[2].svcDecl)
  2198  			} else {
  2199  				protoVAL.svcDecls = protoDollar[1].svcDecls
  2200  			}
  2201  		}
  2202  	case 183:
  2203  		protoDollar = protoS[protopt-1 : protopt+1]
  2204  //line proto.y:839
  2205  		{
  2206  			if protoDollar[1].svcDecl != nil {
  2207  				protoVAL.svcDecls = []ast.ServiceElement{protoDollar[1].svcDecl}
  2208  			} else {
  2209  				protoVAL.svcDecls = nil
  2210  			}
  2211  		}
  2212  	case 184:
  2213  		protoDollar = protoS[protopt-0 : protopt+1]
  2214  //line proto.y:846
  2215  		{
  2216  			protoVAL.svcDecls = nil
  2217  		}
  2218  	case 185:
  2219  		protoDollar = protoS[protopt-1 : protopt+1]
  2220  //line proto.y:853
  2221  		{
  2222  			protoVAL.svcDecl = protoDollar[1].opt
  2223  		}
  2224  	case 186:
  2225  		protoDollar = protoS[protopt-1 : protopt+1]
  2226  //line proto.y:856
  2227  		{
  2228  			protoVAL.svcDecl = protoDollar[1].mtd
  2229  		}
  2230  	case 187:
  2231  		protoDollar = protoS[protopt-1 : protopt+1]
  2232  //line proto.y:859
  2233  		{
  2234  			protoVAL.svcDecl = ast.NewEmptyDeclNode(protoDollar[1].b)
  2235  		}
  2236  	case 188:
  2237  		protoDollar = protoS[protopt-2 : protopt+1]
  2238  //line proto.y:862
  2239  		{
  2240  			protoVAL.svcDecl = nil
  2241  		}
  2242  	case 189:
  2243  		protoDollar = protoS[protopt-1 : protopt+1]
  2244  //line proto.y:865
  2245  		{
  2246  			protoVAL.svcDecl = nil
  2247  		}
  2248  	case 190:
  2249  		protoDollar = protoS[protopt-6 : protopt+1]
  2250  //line proto.y:869
  2251  		{
  2252  			protoVAL.mtd = ast.NewRPCNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].rpcType, protoDollar[4].id.ToKeyword(), protoDollar[5].rpcType, protoDollar[6].b)
  2253  		}
  2254  	case 191:
  2255  		protoDollar = protoS[protopt-8 : protopt+1]
  2256  //line proto.y:872
  2257  		{
  2258  			protoVAL.mtd = ast.NewRPCNodeWithBody(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].rpcType, protoDollar[4].id.ToKeyword(), protoDollar[5].rpcType, protoDollar[6].b, protoDollar[7].rpcDecls, protoDollar[8].b)
  2259  		}
  2260  	case 192:
  2261  		protoDollar = protoS[protopt-4 : protopt+1]
  2262  //line proto.y:876
  2263  		{
  2264  			protoVAL.rpcType = ast.NewRPCTypeNode(protoDollar[1].b, protoDollar[2].id.ToKeyword(), protoDollar[3].tid, protoDollar[4].b)
  2265  		}
  2266  	case 193:
  2267  		protoDollar = protoS[protopt-3 : protopt+1]
  2268  //line proto.y:879
  2269  		{
  2270  			protoVAL.rpcType = ast.NewRPCTypeNode(protoDollar[1].b, nil, protoDollar[2].tid, protoDollar[3].b)
  2271  		}
  2272  	case 194:
  2273  		protoDollar = protoS[protopt-2 : protopt+1]
  2274  //line proto.y:883
  2275  		{
  2276  			if protoDollar[2].rpcDecl != nil {
  2277  				protoVAL.rpcDecls = append(protoDollar[1].rpcDecls, protoDollar[2].rpcDecl)
  2278  			} else {
  2279  				protoVAL.rpcDecls = protoDollar[1].rpcDecls
  2280  			}
  2281  		}
  2282  	case 195:
  2283  		protoDollar = protoS[protopt-1 : protopt+1]
  2284  //line proto.y:890
  2285  		{
  2286  			if protoDollar[1].rpcDecl != nil {
  2287  				protoVAL.rpcDecls = []ast.RPCElement{protoDollar[1].rpcDecl}
  2288  			} else {
  2289  				protoVAL.rpcDecls = nil
  2290  			}
  2291  		}
  2292  	case 196:
  2293  		protoDollar = protoS[protopt-0 : protopt+1]
  2294  //line proto.y:897
  2295  		{
  2296  			protoVAL.rpcDecls = nil
  2297  		}
  2298  	case 197:
  2299  		protoDollar = protoS[protopt-1 : protopt+1]
  2300  //line proto.y:901
  2301  		{
  2302  			protoVAL.rpcDecl = protoDollar[1].opt
  2303  		}
  2304  	case 198:
  2305  		protoDollar = protoS[protopt-1 : protopt+1]
  2306  //line proto.y:904
  2307  		{
  2308  			protoVAL.rpcDecl = ast.NewEmptyDeclNode(protoDollar[1].b)
  2309  		}
  2310  	case 199:
  2311  		protoDollar = protoS[protopt-2 : protopt+1]
  2312  //line proto.y:907
  2313  		{
  2314  			protoVAL.rpcDecl = nil
  2315  		}
  2316  	case 200:
  2317  		protoDollar = protoS[protopt-1 : protopt+1]
  2318  //line proto.y:910
  2319  		{
  2320  			protoVAL.rpcDecl = nil
  2321  		}
  2322  	}
  2323  	goto protostack /* stack new state and value */
  2324  }