2011-12-13 21 views
11

To nie jest moja praca domowa, staram się zrozumieć gramatykę LALR (k). Więc znalazłem thisDlaczego ta gramatyka LR (1) nie jest LALR (1)?

S -> aEa | bEb | aFb | bFa 
E -> e 
F -> e 

zrobiłem analizatora (dostępny w formacie PDF w moim git repo jako LR1notLARL1.pdf

Ale nie mogę dowiedzieć się, dlaczego nie jest to gramatyka LR LALR? Może ktoś pomóc ? mi Dziękuję

Odpowiedz

18

Zacznijmy od budowy LR zestawy (1) skonfigurowaniu dla gramatyki:

(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. [$] 

Jeśli yo Wskazówka Bedziesz, Zjednoczone (4) i (10) mają ten sam rdzeń, więc w LALR (1) automat chcielibyśmy połączyć je ze sobą, tworząc nowe państwo

(4, 10) 
E -> e. [a, b] 
F -> e. [a, b] 

Która teraz ma zmniejszyć/zredukuj konflikt w nim (wszystkie konflikty w LALR (1), które nie były obecne w parserze LR (1), są przy okazji redukowane/zmniejszane). To wyjaśnia, dlaczego gramatyka to LR (1), ale nie LALR (1).

Mam nadzieję, że to pomoże!

+0

Cóż, bardzo mi pomogłeś, zdałem sobie sprawę, że jeden błąd popełniono w analizie w moim pliku pdf, ale w każdym razie znalazłem to [tutaj] (http://compilers.iecc.com/comparch/article/95- 02-053) i chciałem udowodnić to sobie, moim wynikiem jest również to, że jest to ważna gramatyka LARL (1), więc przypuszczam, że na tej stronie jest błąd? czy mam rację? –

+0

Myślę, że byłby to błąd na stronie internetowej, ponieważ właśnie zbudowaliśmy automat LALR i "bison" to sprawdził dla nas. Zakładam, że chodziło o znalezienie gramatyki LALR, ale nie SLR. – templatetypedef

+0

ok, btw dziękuję za narzędzie 'bison' również :) –