Vamos a empezar con la construcción de conjuntos LR (1) configuradora de la gramática:
(1)
S' -> .S [$]
S -> .aEa [$]
S -> .aFb [$]
S -> .bFa [$]
S -> .bEb [$]
(2)
S' -> S. [$]
(3)
S -> a.Ea [$]
S -> a.Fb [$]
E -> .e [a]
F -> .e [b]
(4)
E -> e. [a]
F -> e. [b]
(5)
S -> aE.a [$]
(6)
S -> aEa. [$]
(7)
S -> aF.b [$]
(8)
S -> aFb. [$]
(9)
S -> b.Fa [$]
S -> b.Eb [$]
E -> .e [b]
F -> .e [a]
(10)
E -> e. [b]
F -> e. [a]
(11)
S -> bF.a [$]
(12)
S -> bFa. [$]
(13)
S -> bE.b [$]
(14)
S -> bEb. [$]
Si yo ua aviso, estados (4) y (10) tienen el mismo núcleo, por lo que en la LALR (1) autómata nos gustaría combinarlos entre sí para formar el nuevo estado
(4, 10)
E -> e. [a, b]
F -> e. [a, b]
que ahora tiene una reducción/reducir el conflicto en él (todos los conflictos en LALR (1) que no estaban presentes en el analizador LR (1) son de reducción/reducción, por cierto). Esto explica por qué la gramática es LR (1) pero no LALR (1).
Espero que esto ayude!
bueno, me ayudaste mucho, me di cuenta de un error que hacer en un análisis en mi pdf, pero de todos modos, encontré esto [aquí] (http://compilers.iecc.com/comparch/article/95- 02-053) y quería demostrarlo por mí mismo, mi resultado también es que es una gramática válida de LARL (1), así que supongo que hay un error en ese sitio web. estoy en lo cierto? –
Supongo que sería un error en el sitio web, ya que acabamos de construir el autómata LALR e hicimos que 'bison' lo revisara por nosotros. Asumiría que la intención era encontrar una gramática LALR pero no SLR. – templatetypedef
ok, por cierto, gracias por la herramienta 'bison' :) –