Следуя формализации правила явного предпочтения, может быть построена следующая грамматика:
(1) | stmt | -> | matched_stmt |
(2) | stmt | -> | unmatched_stmt |
(3) | matched_stmt | -> | if expr then matched_stmt else matched_stmt |
(4) | matched_stmt | -> | Other |
(5) | unmatched_stmt | -> | if expr then stmt |
(6) | unmatched_stmt | -> | if expr then matched_stmt else unmatched_stmt |
Новая грамматика порождает тот же язык, что и старая, но вывод цепочки if E1 then if E2 then S1 else S2 теперь не содержит конфликтов.
Альтернативой построению новой грамматики может служить "соглашение", что в случае конфликта перенос-свертка, перенос является предпочтительным действием.
После принятия одной из этих альтернатив вывод может быть продолжен следующим образом:
Stack contents | Unprocessed input string | Action |
$ if E1 then if E2 then S1 else | S2 | shift |
$ if E1 then if E2 then S 1 else S2 | reduce [2] | |
$ if E 1 then S | reduce [1] | |
$ |