Konwersja gramatyki wieloznacznej na jednoznaczną
Nie rozumiałem jak gramatyka jednoznaczna wywodzi się z gramatyki niejednoznacznej? Rozważmy przykład na stronie: Przykład . Jak powstała gramatyka jest dla mnie mylące.
Czy ktoś może mnie poprowadzić ?
2 answers
Przykład ma dwie gramatyki:
Dwuznaczne:
E → E + E | E ∗ E | (E) | a
Jednoznaczne:
E → E + T | T
T → T ∗ F | F
F → (E) | a
Gramatyka jednoznaczna została wyprowadzona z niejednoznacznej przy użyciu informacji nie określonych w gramatyce niejednoznacznej:
- operator " * "wiąże się mocniej niż operator"+".
- oba operatory ' * ' i ' + ' pozostają asocjacyjne.
Bez informacji zewnętrznej, nie ma możliwości dokonania transformacji.
Z zewnętrznym informacje, możemy powiedzieć, że:
a * a + b * b
Jest zgrupowane tak, jakby było napisane:
(a * a) + (b * b)
Zamiast jako:
a * ((a + b) * b)
Druga zakłada, że ' + 'wiąże się mocniej niż'*', i że operatory wiążą się z prawej do lewej, a nie z lewej do prawej.
Komentarz
W Jaki Sposób Asocjacja pojawi się na obrazku dla przykładów takich jak:
S → aA | Ba
A → BA | a
B → aB | epsilon
Jest to gramatyka wieloznaczna, więc jak przejść do jej konwersji na jednoznaczną?
I zastanów się, czy' epsilon ' to ε, pusty ciąg; przeanalizujmy gramatykę w obie strony.
Ε jest pustym łańcuchem
Reguła dla B mówi, że A B jest albo pustym ciągiem, albo a, po którym następuje poprawne b, co oznacza nieskończenie długi ciąg 0 lub więcej a.
Zasada mówi, że A jest albo a, albo A B, po którym następuje a. tak więc nieskończenie długi ciąg a może być również A. Tak więc gramatyka nie ma możliwości wyboru, czy ciąg a jest albo A, albo B.
I reguła dla S nie jest pomocna; S jest albo a, po którym następuje nieskończenie długi ciąg a lub nieskończenie długi ciąg a, po którym następuje a. wymaga co najmniej jednego a, ale dowolna liczba a od jednego do góry jest w porządku, ale gramatyka nie ma podstaw do decydowania między lewą i prawą alternatywą.
Więc ta gramatyka jest z natury niejednoznaczna i nie może, w mojej ocenie, być jednoznaczna; z pewnością nie może być jednoznaczna bez innych informacji nie w nasze posiadanie.
Ε nie jest pustym łańcuchem
A jeśli ε nie jest pustym łańcuchem?
- B jest albo ε, albo ae.
- A jest albo a, albo A B, po którym następuje a (więc albo a, ae lub aae). W 1995 roku został wybrany do Izby Gmin.]}
- lub: S to B, po którym następuje a (stąd ea lub aea).
W tym przypadku gramatyka jest jednoznaczna w obecnej postaci (choć niekoniecznie LR (1)). / Align = "left" / o znaczeniu "epsilon" w komentarzu/pytaniu.
Asocjacja
Nie sądzę, by Asocjacja miała wpływ na tę gramatykę. Zwykle wchodzi w grę z operatorami infiksowymi (takimi jak " + " w "a + b").Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-24 02:45:19
Niektóre gramatyki niejednoznaczne mogą być przekształcone w gramatyki jednoznaczne, ale żadna ogólna procedura tego nie jest możliwa, tak jak żaden algorytm nie istnieje do wykrywania gramatyk niejednoznacznych.
Aby wymyślić drugą gramatykę, musisz znaleźć gramatykę, która jest
- odpowiednik pierwszego: oba generują ten sam język
- jednoznaczne: dla każdego zdania język, drzewo parse jest unikalne
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-05 17:46:26