Skip to content

Commit

Permalink
cmd/yacc: fix handling of tokens that don't start with letters
Browse files Browse the repository at this point in the history
CL 149110043 changed yacc to no longer keep a leading space
for quoted tokens.  That is OK by itself but unfortunately
yacc was relying on that leading space to notice which tokens
it should not output as const declarations.

Add a few such tokens to expr.y, although it won't make any
immediate difference as we seem to have no tests for yacc.

LGTM=rsc
R=golang-codereviews, rsc
CC=golang-codereviews
https://golang.org/cl/152720043
  • Loading branch information
ianlancetaylor committed Sep 29, 2014
1 parent 1cfa595 commit fe2bc11
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 5 deletions.
2 changes: 2 additions & 0 deletions src/cmd/yacc/testdata/expr/expr.y
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ import (

%type <num> expr expr1 expr2 expr3

%token '+' '-' '*' '/' '(' ')'

%token <num> NUM

%%
Expand Down
14 changes: 9 additions & 5 deletions src/cmd/yacc/yacc.go
Original file line number Diff line number Diff line change
Expand Up @@ -195,8 +195,9 @@ type Item struct {
}

type Symb struct {
name string
value int
name string
noconst bool
value int
}

type Wset struct {
Expand Down Expand Up @@ -509,8 +510,7 @@ outer:
// put out non-literal terminals
for i := TOKSTART; i <= ntokens; i++ {
// non-literals
c := tokset[i].name[0]
if c != ' ' && c != '$' {
if !tokset[i].noconst {
fmt.Fprintf(ftable, "const %v = %v\n", tokset[i].name, tokset[i].value)
}
}
Expand Down Expand Up @@ -734,7 +734,7 @@ func defin(nt int, s string) int {
copy(anontrst, nontrst)
nontrst = anontrst
}
nontrst[nnonter] = Symb{s, 0}
nontrst[nnonter] = Symb{name: s}
return NTBASE + nnonter
}

Expand Down Expand Up @@ -769,9 +769,13 @@ func defin(nt int, s string) int {
if val == 0 {
errorf("token value 0 is illegal")
}
tokset[ntokens].noconst = true
} else {
val = extval
extval++
if s[0] == '$' {
tokset[ntokens].noconst = true
}
}

tokset[ntokens].value = val
Expand Down

0 comments on commit fe2bc11

Please sign in to comment.