]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/yacc: allow leading underscore in token name
authorRob Pike <r@golang.org>
Fri, 7 Sep 2012 16:31:51 +0000 (09:31 -0700)
committerRob Pike <r@golang.org>
Fri, 7 Sep 2012 16:31:51 +0000 (09:31 -0700)
Fixes #4037.

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/6488093

src/cmd/yacc/units.y
src/cmd/yacc/yacc.go

index eaa3fb18a48b6cd019583d839f1a21667916ddf7..32d37e50394cd57c8453b6e4ec1b59fb4f122381 100644 (file)
@@ -78,7 +78,7 @@ var vflag bool
 
 %token <vval>  VAL
 %token <vvar>  VAR
-%token <numb>  SUP
+%token <numb>  _SUP // tests leading underscore in token name
 %%
 prog:
        ':' VAR expr
@@ -159,7 +159,7 @@ expr3:
 
 expr2:
        expr1
-|      expr2 SUP
+|      expr2 _SUP
        {
                xpn(&$$, &$1, $2)
        }
@@ -236,13 +236,13 @@ loop:
                return '/'
        case '¹', 'ⁱ':
                yylval.numb = 1
-               return SUP
+               return _SUP
        case '²', '⁲':
                yylval.numb = 2
-               return SUP
+               return _SUP
        case '³', '⁳':
                yylval.numb = 3
-               return SUP
+               return _SUP
        }
        return int(c)
 
index cca5570fb8dab122bbb0df714555c5569ad7166f..a4ae35349a28c95d4beb1e2c151991cc7be147ef 100644 (file)
@@ -988,7 +988,7 @@ func gettok() int {
 
 func getword(c rune) {
        tokname = ""
-       for isword(c) || isdigit(c) || c == '_' || c == '.' || c == '$' {
+       for isword(c) || isdigit(c) || c == '.' || c == '$' {
                tokname += string(c)
                c = getrune(finput)
        }
@@ -1338,7 +1338,7 @@ loop:
                                if j >= max {
                                        errorf("Illegal use of $%v", j)
                                }
-                       } else if isword(c) || c == '_' || c == '.' {
+                       } else if isword(c) || c == '.' {
                                // look for $name
                                ungetrune(finput, c)
                                if gettok() != IDENTIFIER {
@@ -3090,7 +3090,7 @@ var peekrune rune
 func isdigit(c rune) bool { return c >= '0' && c <= '9' }
 
 func isword(c rune) bool {
-       return c >= 0xa0 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
+       return c >= 0xa0 || c == '_' || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
 }
 
 func mktemp(t string) string { return t }