Am Montag, 25. September 2006 11:02 schrieben Sie:
> I am not sure what additional compressions that Bison uses besides
> LALR(1), but the phenomenon is due to these compressions, where one
> deliberately merges states, accepting certain additional extra
> reductions. The technique is described in the ("Dragon") book by Aho
> et al., "Compilers...".

Before my last mail, I sat down and created the LALR(1) sets by hand. In the 
case of the "pure" LALR(1) sets for this grammar, there are no possible 
reductions/shifts on lookahead tokens A or F in state 1, because it doesn't 
result from a merger of the starting state (which as the only possible state 
contains the valid lookahead A, resulting in shift here) with some other 
state.

Seeing a reduction on lookahead A comes from the $default reduction, which is 
implemented to speed up table lookup (in this case, there's either a shift 
which is explicitly listed or reduction on opt_C on all possible lookaheads 
which are valid in state 1 [BCDE], so basically bison decides to combine them 
to a default reduce in case no shift matches). This introduces other possible 
(but invalid) reduction chains which don't come from LALR, but will error out 
on the first unmatched shift in any case (when a rule appears which doesn't 
have any possible reductions, just shifts, see for example state 12 resulting 
automaton, which is the error state for AA), just as LALR would when states 
are merged.

So, basically, this form of table compression might introduce erraneous 
reduction chains (just as LALR does), but on the other hand allows for faster 
lookup. It's also described in the Dragon-Book, AFAIK.

If one of the bison developers is around: correct me if this is utterly and 
completely wrong, but as far as I understand bison, this is the way it 
works. ;-)

-- 
--- Heiko Wundram.

  ____      _          _                    ___ _____
 / ___| ___| |__  _ __| | _____ _ __  ___  |_ _|_   _|
| |  _ / _ \ '_ \| '__| |/ / _ \ '_ \/ __|  | |  | |
| |_| |  __/ | | | |  |   <  __/ | | \__ \_ | |  | |
 \____|\___|_| |_|_|  |_|\_\___|_| |_|___(_)___| |_|

FON 0511-59027954
FAX 0511-59027957
Gehrkens.IT GmbH
Mailänder Strasse 2
http://www.gehrkens.it
http://www.xencon.net


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

Reply via email to