fox@allegra.att.com (11/16/89)
I have just learned that if a grammar contains useless nonterminals
it will not work properly. Here is the last entry in the change log:
Wed Aug 23 15:03:07 1989 Jay Fenlason (hack at gnu)
* Makefile: Include system.h in bison-dist.tar
Here is an input file that provides evidence of the bug:
------------- Cut here ---------------
%token sym5
%token sym6
%token sym7
%token sym8
%token sym9
%token sym0
%%
sym1:
sym3
| sym4
;
sym2:
sym5
| sym6
;
sym3:
sym7
| sym8
;
sym4:
sym9
| sym0
;
------------------------------
And here is the evidence: incorrect entries in yyrline[]:
static const short yyrline[] = { 0,
10, 12, 15, 17, 20, 22
};
The sym2: rule is useless, but its lines appear in the array
and those of sym4 do not. Note that it is not only yydebug
output that is incorrect; such parsers do not parse correctly.
Thanks,
David Fox
fox@allegra.att.com
fox@cs.columbia.edu