Small correction: The 2 rules are:
sentence: /* empty */ | sentence line optional_comma '$' { printf("\nInput line: >>>%s ::: %s <<<\n", $2, $3); } ; sentence: line optional_comma '$' { printf("\nInput line: >>>%s ::: %s <<<\n", $2, $3); } ; On Sat, May 2, 2009 at 2:51 PM, Samkit Jain <samkit.fe...@gmail.com> wrote: > Hi, > > And I created a small program to test some small fundamentals and found > that there is a lot of difference between the below 2 rules. > > sentence: /* empty */ > | sentence line optional_comma '$' { printf("\nInput line: > >>>%s ::: %s <<<\n", $2, $3); } > ; > > > sentence: sentence line optional_comma '$' { printf("\nInput line: > >>>%s ::: %s <<<\n", $2, $3); } > ; > > I am using scanf in yylex (my own yylex), which always accepts some string. > > And now I am confused as to why is "/* empty */" necessary even when empty > cannot be returned by yylex. > > When I checked the states generated by the parser, I found that there is a > difference in the way $default and $end are created for some states. > > Can someone please tell me basic principle behind $end and $default > terminal symbols. > > > : Samkit Jain > _______________________________________________ help-bison@gnu.org http://lists.gnu.org/mailman/listinfo/help-bison