Przygotowuję się do testu z języków komputerowych i jest jeden pomysł, że mam problemy ze zrozumieniem.
Zrozumiałem, że zwykłe gramatyki są prostsze i nie mogą zawierać niejednoznaczności, ale nie mogą wykonywać wielu zadań wymaganych w językach programowania. Zrozumiałem również, że gramatyki bezkontekstowe pozwalają na niejednoznaczność, ale pozwalają na pewne rzeczy niezbędne dla języków programowania (np. Palindromy).
To, z czym mam problem, to zrozumienie, w jaki sposób mogę wyprowadzić wszystkie powyższe informacje, wiedząc, że nieterminały gramatyki regularnej mogą mapować do terminala lub nieterminala, po którym następuje terminal, lub że bezkontekstowe mapowanie nieterminala do dowolnej kombinacji terminali i nieterminali .
Czy ktoś może mi pomóc połączyć to wszystko razem?
źródło
A-> a | c
aB->b
wtedy ta gramatyka dopuszcza inne niż palindromy. Na przykład, mogę produkować:S->ABA->aBA->abA->abc
. Problem polega na tym, że w pierwszej regule nie chcemy tworzyć dwóch zmiennych, ale raczej dwa terminale. Możliwość gramatyki, która dopuszcza palindromy to:S -> aSa | bSb | a | b
S -> aSa | e
ia(aa)*a
oba opisują język regularny. To pokazuje, że CFG może opisywać zwykły język, nawet jeśli narusza lewą lub prawą liniowość. Trzeba przyznać, że to nie tak oczywisty palindrom ...Myślę, że chcesz pomyśleć o różnych lemmatach o pompowaniu. Język regularny może zostać rozpoznany przez automat skończony. Język bezkontekstowy wymaga stosu, a język wrażliwy na kontekst wymaga dwóch stosów (co jest równoważne stwierdzeniu, że wymaga pełnej maszyny Turinga).
Tak więc, jeśli pomyślimy o lemacie pompowania dla języków regularnych , zasadniczo mówi on, że każdy język regularny można podzielić na trzy części, x , y i z , gdzie wszystkie wystąpienia języka znajdują się w xy * z (gdzie * jest powtórzeniem Kleene, tj. 0 lub więcej kopii y .) W zasadzie masz jeden „nieterminal”, który można rozwinąć.
A co z językami bezkontekstowymi? Istnieje analogiczny lemat o pompowaniu dla języków bezkontekstowych, który dzieli ciągi w języku na pięć części, uvxyz , i gdzie wszystkie wystąpienia języka są w uv i xy i z , dla i ≥ 0. Teraz masz dwa „nieterminale "które można powielić lub pompować, o ile masz ten sam numer .
źródło
Różnica między gramatyką regularną i bezkontekstową: (N, Σ, P, S): terminale, nieterminale, produkcje, stan początkowy Symbole terminali
● elementarne symbole języka określone przez gramatykę formalną
● abc
Symbole nieterminalne (lub zmienne składniowe)
● zastąpione grupami symboli terminali zgodnie z zasadami produkcji
● ABC
gramatyka regularna: prawa lub lewa gramatyka regularna prawa gramatyka regularna, wszystkie zasady są zgodne z formami
zostawił gramatykę regularną, wszystkie reguły są zgodne z formularzami
gramatyka bezkontekstowa (CFG)
○ gramatyka formalna, w której każda reguła produkcji ma postać V → w
○ V jest pojedynczym nieterminalnym symbolem
○ w to ciąg terminali i / lub nieterminali (w może być puste)
źródło
Gramatyka regularna: - gramatyka zawierająca produkcję w następujący sposób to RG:
gdzie V = zmienna i T = terminal
RG może być lewą gramatyką liniową lub prawą gramatyką liniową, ale nie środkową gramatyką liniową.
Jak wiemy, wszystkie RG to Linear Grammar, ale tylko Left Linear lub Right Linear Grammar są RG.
Zwykła gramatyka może być niejednoznaczna.
Niejednoznaczna gramatyka: - dla łańcucha x istnieje więcej niż jeden LMD lub Więcej niż RMD lub Więcej niż jedno drzewo analizy lub Jedno LMD i jedno RMD, ale oba produkują różne drzewo analizy.
ta Gramatyka jest niejednoznaczna Gramatyka, ponieważ dwa drzewa parsowania.
CFG: - gramatyka nazywana CFG, jeśli jej produkcja ma postać:
DCFL: - jak wiemy, wszystkie DCFL to LL (1) Gramatyka, a wszystkie LL (1) to LR (1), więc nigdy nie jest niejednoznaczne. więc DCFG nigdy nie jest niejednoznaczne.
Wiemy również, że wszystkie RL to DCFL, więc RL nigdy nie jest niejednoznaczne. Zauważ, że RG może być niejednoznaczne, ale RL nie.
CFL: CFl Może być niejednoznaczny lub nie.
Uwaga: RL nigdy nie będzie z natury niejednoznaczne.
źródło
Wyrażenia regularne
Gramatyki bezkontekstowe
źródło
Gramatyka jest bezkontekstowa, jeśli wszystkie reguły produkcji mają postać: A (to znaczy lewa strona reguły może być tylko pojedynczą zmienną; prawa strona jest nieograniczona i może być dowolną sekwencją terminali i zmiennych). Możemy zdefiniować gramatykę jako czteroosobową krotkę, gdzie V to skończony zbiór (zmienne), _ to skończony zbiór (terminale), S to zmienna początkowa, a R to skończony zbiór reguł, z których każda jest odwzorowaniem V
gramatyka regularna jest liniowa w prawo lub w lewo, podczas gdy gramatyka bezkontekstowa jest w zasadzie dowolną kombinacją terminali i nieterminali. stąd możemy powiedzieć, że gramatyka regularna jest podzbiorem gramatyki bezkontekstowej. Po tych właściwościach możemy powiedzieć, że zestaw języków wolnych od kontekstu zawiera również zestaw języków regularnych
źródło
Zasadniczo gramatyka regularna jest podzbiorem gramatyki bezkontekstowej, ale nie możemy powiedzieć, że każda gramatyka bezkontekstowa jest gramatyką regularną. Głównie gramatyka bezkontekstowa jest niejednoznaczna, a gramatyka regularna może być niejednoznaczna.
źródło
gramatyka regularna nigdy nie jest niejednoznaczna, ponieważ jest albo lewostronna, albo prawostronna, więc nie możemy utworzyć dwóch drzew decyzyjnych dla gramatyki regularnej, więc jest ona zawsze jednoznaczna. ale poza gramatyką regularną wszystkie mogą być regularne lub nie
źródło