Ludzie często mówią, że parsery LR (k) są silniejsze niż parsery LL (k) . Te stwierdzenia są przez większość czasu niejasne; w szczególności, czy powinniśmy porównać klasy dla ustalonego lub unii dla całego ? Jak więc naprawdę wygląda sytuacja? W szczególności jestem zainteresowany tym, jak pasuje LL (*).
O ile mi wiadomo, odpowiednie zestawy gramatyk, które akceptują parsery LL i LR, są ortogonalne, więc porozmawiajmy o językach generowanych przez odpowiednie zestawy gramatyk. Niech oznacza klasę języków generowanych przez gramatykę, które mogą być analizowane przez parser L R ( k ) i podobne dla innych klas.
Interesują mnie następujące relacje:
Niektóre z nich są prawdopodobnie łatwe; moim celem jest zebranie „kompletnego” porównania. Referencje są mile widziane.
Odpowiedzi:
Istnieje wiele znanych pojemników. Niech oznacza ograniczenie i ⊂ właściwe ograniczenie. Niech × oznacza nieporównywalność.⊆ ⊂ ×
Niech , L R = ⋃ k L R ( k ) .L L = ⋃kL L ( k ) L R = ⋃kL R ( k )
Poziom gramatyki
Dla LL
Dla LR
To są wszystkie proste ćwiczenia.
LL kontra LR
Poziom języka
Dla LL
Dla LR
Niektóre z nich zostały udowodnione przez Knutha w jego artykule na temat tłumaczenia języków od lewej do prawej, w którym wprowadził LR (k), pozostałe zostały udowodnione w Transformacji gramatyki LR (k) do LR (1), SLR (1), oraz (1,1) Ograniczone gramatyki prawego kontekstu autorstwa Mickunas i in.
LL kontra LR
źródło