@@ -258,6 +258,8 @@ var nerrors = 0 // number of errors
258
258
// assigned token type values
259
259
260
260
var extval = 0
261
+ var firsttok = 0
262
+ var lasttok = 0
261
263
262
264
// grammar rule information
263
265
@@ -698,6 +700,12 @@ outer:
698
700
// non-literals
699
701
if ! tokset [i ].noconst {
700
702
fmt .Fprintf (ftable , "const %v = %v\n " , tokset [i ].name , tokset [i ].value )
703
+ if firsttok == 0 {
704
+ firsttok = tokset [i ].value
705
+ }
706
+ if lasttok == 0 && i == ntokens {
707
+ lasttok = tokset [i ].value
708
+ }
701
709
}
702
710
}
703
711
@@ -709,6 +717,11 @@ outer:
709
717
}
710
718
fmt .Fprintf (ftable , "}\n " )
711
719
720
+ fmt .Fprintf (ftable , "\n " )
721
+ fmt .Fprintf (ftable , "var %sFirsttok = %d\n " , prefix , firsttok )
722
+ fmt .Fprintf (ftable , "var %sLasttok = %d\n " , prefix , lasttok )
723
+ fmt .Fprintf (ftable , "\n " )
724
+
712
725
// put out names of states.
713
726
// commented out to avoid a huge table just for debugging.
714
727
// re-enable to have the names in the binary.
@@ -3296,9 +3309,14 @@ func $$NewParser() $$Parser {
3296
3309
const $$Flag = -1000
3297
3310
3298
3311
func $$Tokname(c int) string {
3299
- if c >= 1 && c-1 < len($$Toknames) {
3300
- if $$Toknames[c-1] != "" {
3301
- return $$Toknames[c-1]
3312
+ offset := 1
3313
+ if c >= $$Private {
3314
+ offset = $$Private-1
3315
+ }
3316
+
3317
+ if c >= offset && c-offset < len($$Toknames) {
3318
+ if $$Toknames[c-offset] != "" {
3319
+ return $$Toknames[c-offset]
3302
3320
}
3303
3321
}
3304
3322
return __yyfmt__.Sprintf("tok-%v", c)
0 commit comments