>You should have gotten an ambiguous grammar. Then Bison still  
>produces a runnable parser by choosing: in the case of reduce/reduce [sic]
>conflicts, shift over reduce, and in the case of reduce/reduce  
>conflicts, the first occurring reduce in the .y grammar.

Yes, the grammar is indeed ambiguous, resulting in a shift/reduce
conflict in state 2.  The conflict is realized when the look-ahead
token in that state is the end-of-file token.  The conflict is then
resolved (as you dewscribe) by shifting, which leads to successful
termination.  All of this makes sense, but is irrelevant to my
question, since the conflict is not realized in the execution of
interest.  In this execution, when we enter state 2, the look-ahead
token is 'b', which is not shiftable.  The output file suggests a
reduction via rule 3 at this point:

state 2

    a  ->  p .   (rule 3)

    $           go to state 4

    $           [reduce using rule 3 (a)]
    $default    reduce using rule 3 (a)

Indeed, this is what I would have predicted.  But instead, the parser
terminates with an error.  How did Bison decide to prescribe this
action, and why does it not appear in the output file?



_______________________________________________
help-bison@gnu.org http://lists.gnu.org/mailman/listinfo/help-bison

Reply via email to