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