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
%type <num> expr expr1 expr2 expr3
+%token '+' '-' '*' '/' '(' ')'
+
%token <num> NUM
%%
}
type Symb struct {
- name string
- value int
+ name string
+ noconst bool
+ value int
}
type Wset struct {
// 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)
}
}
copy(anontrst, nontrst)
nontrst = anontrst
}
- nontrst[nnonter] = Symb{s, 0}
+ nontrst[nnonter] = Symb{name: s}
return NTBASE + nnonter
}
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