gramatyka bezkontekstowa

Tematy

biblia

niejednoznaczność bierze się z tego, ze składnia C (gramatyka bezkontekstowa z której można wyprowadzić program) nie określa jak ba zostać skonstruowane drzewo rozbioru (drzewo wyprowadzenia słowa z gramatyki nie jest jednoznaczne)

np. oblczenie wyrażenia: x + x++ = ?
niby oeprator ++ zwiększa x o 1 po użyciu x, to jak powinno byc obliczane to wyrażenie??
np. x = 5. jak sie najpierw obliczy lewy składnik to 'powinno' wyjsc 5 + 5 = 10 (x = 6) a jak prawy to 6 + 5 = 11 (x=6) ale to jak jest to obliczane zalezy od kompilaotry i jakby umowy (i obecnie x zostanie zwiększony po obliczeniu CAŁEGO wyrażenia - niewiadomo czemu).

A w czystym SML'u takiego problemu juz nie ma (bo są trkuktury ulotne )




A jeśli chodzi o Kura, to on już w ogóle prawie wcale nie bywa nieszczery.
Ale się przyczepili. Szefie, co mówi na to Twój automatyczny fuzzy logic?

"A jeśli chodzi o Kura" - wskazuję, że wypowiedź dotyczy Kura

"to on" - Kur

"już w ogóle" - ogólnie rzecz ujmując, generalnie zazwyczaj

"ogóle prawie" - hehe, logika rozmazana :P

"prawie wcale" - rzadko się zdarza by było inaczej

"wcale nie" - po prostu nie, tylko trochę wzmocnione w swoim wyrazie

"nie bywa nieszczery" - tu podwójne zaprzeczenie, które w polskim języku oznacza po prostu zaprzeczenie

czyli innymi słowami: Wszyscy jesteśmy szczerzy jak zęby wściekły pies, a kur to już wogóle (czyli zwlaszcza on). To chyba prostsze, niż rekurencyjnie działający analizator składni języka opartego na gramatyce bezkontekstowej, wykorzystujący deterministyczny automat ze stosem, który wlaśnie robię, a który mam zamiar wykorzystać w kompilatorze, będącym moim zaległym projektem z poprzedniego semestru.



tak specyfikacja za tydzien.

w skład specyfikacje wchodzi:
- lista atomów leksykalnych, czyli jakie rzeczy ma wypluwać analizator leksykalny
- graf przejsc maszyny analizatora lexykalnego (cos jak robilismy na cwiczeniach - to co wypluwa atomy)

- diagramy syntaktyczne jezyka - czyli cos takiego jak na poczatku oglądaliśmy z książki, cos z czego robilismy gramatyke bezkontekstową.



Klasa 0 - żadnych ograniczeń, dowolne mieszaniny terminali i nieterminali mogą przechodzić w dowolne mieszaniny terminali i nieterminali.
Klasa 1 - gramatyki kontekstowe - żadna produkcja nie skraca długości słowa. Czyli z AA nie może się zrobić A, ale aA albo ac tak.
Klasa 2 - gramatyki bezkontekstowe - to co w klasie 1 + po lewej stronie produkcji mamy jedynie jeden nieterminal. Czyli są one postaci A -> AAA, B -> bcAAB, B -> c.
Klasa 3 - gramatyki regularne (prawo albo lewostronne) - to co w klasie 2 + wszystkie produkcje są postaci A -> b lub A -> Bb (przykład lewostronnej). Czyli z każdego nieterminala wychodzi albo jeden terminal, albo jeden nieterminal + jeden terminal.




Klasa 0 - żadnych ograniczeń, dowolne mieszaniny terminali i nieterminali mogą przechodzić w dowolne mieszaniny terminali i nieterminali.


Klasa 1 - gramatyki kontekstowe - żadna produkcja nie skraca długości słowa. Czyli z AA nie może się zrobić A, ale aA albo ac tak.

Klasa 2 - gramatyki bezkontekstowe - to co w klasie 1 + po lewej stronie produkcji mamy jedynie jeden nieterminal. Czyli są one postaci A -> AAA, B -> bcAAB, B -> c.

Klasa 3 - gramatyki regularne (prawo albo lewostronne) - to co w klasie 2 + wszystkie produkcje są postaci A -> b lub A -> Bb (przykład lewostronnej). Czyli z każdego nieterminala wychodzi albo jeden terminal, albo jeden nieterminal + jeden terminal.

Tutaj male sprostowanie: ilosc nieterminali po prawej moze byc dowolna, pod warunkiem oczywiscie, ze "przyrastaja" z jedej strony nieterminala.
Czyli moga byc produkcje typu:
A -> abcd
A -> Baaba (A-> aabaB dla prawostronnie regularnych)

I tutaj juz nie ma zadnych obostrzen: klasa 3 pieknie zawiera sie w klasie 2, a nawet w klasie 1 (bo slowo puste nie moze byc po prawej stronie zadnej produkcji).



Ufff, to chyba tyle. Jakby byly jeszcze jakies pytania czy watpliwosci to dawac - a nuz znam odpowiedz :D



Pytanie jest jak najbardziej serio !!

W sekretariacie mi powiedziano, że można sobie wybrać coś z naszego centrum językowego. Na plakatach wisi info o łacinie i chińskim. Na pewno na UJocie jest też japoński, ale chyba nie jako lektorat.

Tak więc, zupełnie poważne, pytanie brzmi: ktoś miałby ochotę iść na chiński lub łacinę? ;) Angielski w tym semestrze mi się nie przydał zupełnie, ba, wręcz regres nastąpił (chodziłem na B2). Więc jeśli już tracić parę godzin tygoodniowo, to fajnie byłoby na coś ciekawego przynajmniej.

Chiński to mocno przyszłościowy język; łacina z kolei mogłaby być nawet ciekawsza, no i prostsza (ten sam alfabet, praktycznie ta sama wymowa) - a przy tym można się poczuć bogatszym duchowo ;))

Gdyby się ktoś zdecydował, to niech da mi info na priva albo na II mnie łapie jutro. Poziom oczywiście najniższy z możliwych, raczej trudne do zdania to nie będzie, trzeba tylko będzie słówek powtarzać trochę (po językach formalnych i gramatykach bezkontekstowych to reszta już pikuś i tak ;))

Ogółem, studia są po to, aby robić głupie rzeczy i poznawać różne dziwne przedmioty, których nikt później nie będzie chciał - ani nawet pewnie miał okazji - się nauczyć, więc zachęcam gorąco ;))

(Aha, opcja jest jeszcze, aby wpisać japoński - panie w sekretariacie mówiły, że ktoś już wpisywał - i co najwyżej później, jak się dostanie odmowę, wziąć coś dostępnego).

Jeśli ktoś już wpisał, to pewnie wykreślenie i wpisanie na nowo nie będzie też problemem.



Jak to jest z tym udowadnianiem, że jakiś język/gramatyka/automat jest regularny/kontekstowy/bezkontekstowy i tak dalej :?:

Wiem, że stosuje się lematy o pompowaniach. Czy coś jeszcze :?:
Jakby ktoś mógł się oderwać na chwilkę od RPS i wyjaśnić mi to mniej więcej......



Zwykły automaty skończony rozpoznaje tylko języki regularne...

Gramatyka w jakiej jest klasie to się pokazuje z definicji danej klasy (definicje są właśnie dla gramatyk)

Co do języków...
Regularność pokazuje się przez pompowanie pierwsze.
Co do bezkontekstowości, to jej brak można pokazać przez niespełnienie lematu o pompowaniu drugiego. Nie mniej jednak spełnienie lematu nie oznacza od razu, że język jest bezkontekstowy, do tego służy jakiś inny lemat którego nazwy nie pamiętam.
Generalnie jednak zawsze można próbować tworzyć gramatykę rozpoznającą dany język i należącą do takiej klasy jaką chcemy udowodnić. Ja przynajmniej tak bym dowodził, że coś jest kontekstowe, względnie nawet że jest bezkontekstowe.

edited:
Pytanie - haczyk: Czy każdy język ma jakąś gramatykę która go rozpoznaje?



Od RPSu oderwałem się dzisiaj rano :]

Jeśli chodzi o gramatyki, to patrzysz na postaci produkcji (na ważniaku są podane reguły dla 4 klas gramatyk)

Jeśli chodzi o języki to mamy lematy o pompowaniu. Oby dwa lematy (dla regularnych i bezkontekstowych) mówią tyle, że jeśli jakiś jest regularny/kontekstowy, to spełnia odpowiedni lemat. Jako, że mamy tu implikację, to może się tak zdarzyć (zad 3 z 04_tja_sesyjny.pdf), że język spełnia założenia lematu, ale reularnym/bezkontekstowym nie jest.

Jeśli chodzi o automaty, to automaty zwykłe rozpoznają języki regularne, natomiast automaty ze stosem bezkontekstowe. Wiedząc z jakim automatem masz do czynienia, wiesz jaki język ten automat rozpoznaje.

EDIT: @rogal: Gwoli ścisłości, to gramatyka raczej generuje niż rozpoznaje.
A jeśli chodzi o odp, to raczej nie. Np języki naturalne. Chomsky się chyba na tym przejechał właśnie...

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • wpserwis.htw.pl
  • Powered by MyScript