|Simple question on lex/yacc specifications email@example.com (Eric Fowler) (2009-03-13)|
|Re: Simple question on lex/yacc specifications firstname.lastname@example.org (Eric Fowler) (2009-03-14)|
|Re: Simple question on lex/yacc specifications email@example.com (russell kym horsell) (2009-03-15)|
|Re: Simple question on lex/yacc specifications firstname.lastname@example.org (Max Hailperin) (2009-03-15)|
|Re: Simple question on lex/yacc specifications email@example.com (Eric Fowler) (2009-03-15)|
|From:||Max Hailperin <firstname.lastname@example.org>|
|Date:||Sun, 15 Mar 2009 06:12:51 -0500|
|Posted-Date:||15 Mar 2009 16:58:26 EDT|
Eric Fowler <email@example.com> writes:
> Here is what is NOT working (cut down):
> Obviously I am doing something fundamentally wrong.
> I tried transposing the rules for decimalnum and opt_decimalnum in the
> yacc rules file, and it inverted the outcome, in other words, the
> string with the empty number token is now not recognized, but a string
> with digits is....
> [Try this:
> Empty RHS rules are valid and useful in a situation like this. -John]
John is of course correct that empty right hand sides are valid and
could be used to make a cleaner grammar.
But that doesn't explain why Eric's grammar wasn't working.
The answer is: something he isn't showing us. The stripped down code
he included in his posting is 100% correct -- if extended with a
correct lexical analyzer and test harness (main, etc.) it produces the
correct output when fed either of his two test inputs. So the problem
must be in the stuff he stripped out.
We get a clue from the fact that reversing the order of the
productions for two nonterminals (neither of which is the start
symbol) changes the symptoms. This strongly suggests that the problem
in the full grammar is a reduce-reduce conflict. Without seeing that
full grammar, and where the reduce-reduce conflict is within it, I
wouldn't place a bet in either direction regarding whether the
conflict might go away as a side effect of making John's suggested
Return to the
Search the comp.compilers archives again.