Rozumiem następujące twierdzenia, które są prawdziwe:
- Dwie różne pochodne łańcucha w danym CFG mogą czasem przypisywać to samo drzewo parsowania łańcuchowi.
- Kiedy w danym CFG występują pochodne jakiegoś łańcucha, które przypisują różne drzewa parsowania, CFG jest niejednoznaczny.
- Niektóre języki bezkontekstowe generowane przez niejednoznaczne CFG są również generowane przez jednoznaczne CFG.
- Niektóre języki są takie, że jedyne CFG, które mogą je generować (i są takie), są niejednoznaczne.
Pytanie 1 Rozumiem również, że nierozstrzygalne jest, czy arbitralne CFG jest dwuznaczne, w rozumieniu pkt 3 powyżej. A może raczej nie można rozstrzygnąć, czy język bezkontekstowy jest dwuznaczny w rozumieniu punktu 4? Czy oba są nierozstrzygalne?
Q2 Który z punktów 1-4 stanie się fałszywy, gdy zamienimy „bezkontekstowy” na „zwykły”? Czy regularne gramatyki i języki są zawsze jednoznaczne?
fl.formal-languages
regular-language
context-free
dubiousjim
źródło
źródło
Odpowiedzi:
O Q1: Zarówno problem niejednoznaczności (biorąc pod uwagę CFG, czy jest niejednoznaczny), jak i nieodłączny problem niejednoznaczności (biorąc pod uwagę CFG, czy jego język jest z natury niejednoznaczny, tj. Czy jakikolwiek równoważny CFG jest niejednoznaczny) są nierozstrzygalne. Oto oryginalne odniesienia:
O Q2: Gramatyka regularna jest bezkontekstową gramatyką „jednostronną liniową”, w której co najwyżej jedna nieterminala pojawia się w dowolnej prawej części reguły i gdzie ta nieterminala jest na końcu (w prawej gramatyce liniowej ) lub na początku (w pozycja lewej gramatyki liniowej ). Takie gramatyki można łatwo przetłumaczyć na równoważne automaty skończone (z grubsza biorąc pod uwagę każdy nieterminal jako stan), które są jednoznaczne, jeśli zwykła gramatyka jest jednoznaczna. Klasa jednoznacznych gramatyk regularnych i jednoznacznych automatów była badana w szczególności przez Stearnsa i Hunta (1985) , którzy wykazują, że lubią algorytmy rozwiązywania problemu integracji.
W liniowej gramatyce bezkontekstowej nie ma takiego wyboru, ponieważ istnieje co najwyżej jeden nieterminal w dowolnej formie sentymentalnej, a dla danego drzewa pochodnego istnieje jedna pochodna, która jest zarówno skrajna lewa, jak i skrajna prawa.
oraz 4. Jeśli weźmiesz widok automatów skończonych, wystarczy określić twój dwuznaczny automat, aby otrzymać jednoznaczny automat dla tego samego języka: dla każdego słowa będzie jeden przebieg. Ten deterministyczny automat jest równoważny jednoznacznej regularnej gramatyce.
źródło
Nie do końca wiedziałem, w jakim języku mówisz w 4. Każdy język CF ma niejednoznaczną gramatykę.
Q2 Wszystko jest rozstrzygalne, jeśli masz do czynienia ze zwykłą gramatyką. Po prostu powinieneś zbudować minimalny DFA, a używając go, możesz zbudować jednoznaczną gramatykę. Jeśli masz do czynienia ze zwykłym językiem zdefiniowanym przez gramatykę CF, odpowiedź brzmi nie - patrz Q1.
źródło
Zależy to od tego, czy „bez kontekstu” zastąpisz „zwykłym” tylko przed „językiem (językami)”, czy też przed „gramatyką”.
Wszystkie zwykłe języki są generowane przez gramatykę regularną , w szczególności przez jednoznaczne gramatyki regularne, np. Gramatyki prawostronne LL (1) , które wszystkie są jednoznaczne.
źródło