Analizator syntaktyczny

Podobne dokumenty
Metody Kompilacji Wykład 8 Analiza Syntaktyczna cd. Włodzimierz Bielecki WI ZUT

Gramatyka operatorowa

Metody Kompilacji Wykład 7 Analiza Syntaktyczna

Plan wykładu. Kompilatory. Literatura. Translatory. Literatura Translatory. Paweł J. Matuszyk

Języki formalne i automaty Ćwiczenia 3

Analiza leksykalna 1. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

3.4. Przekształcenia gramatyk bezkontekstowych

0.1 Lewostronna rekurencja

Analiza leksykalna 1. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki

Wykład 5. Jan Pustelnik

Automat ze stosem. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki

Języki formalne i automaty Ćwiczenia 4

Matematyczne Podstawy Informatyki

Gramatyki rekursywne

Języki formalne i automaty Ćwiczenia 2

Odtworzenie wywodu metodą wstępującą (bottom up)

Zadanie analizy leksykalnej

Uproszczony schemat działania kompilatora

2.2. Gramatyki, wyprowadzenia, hierarchia Chomsky'ego

Wprowadzenie do analizy składniowej. Bartosz Bogacki.

Uproszczony schemat działania kompilatora

Gramatyki atrybutywne

JIP. Analiza składni, gramatyki

Włączenie analizy leksykalnej do analizy składniowej jest nietrudne; po co więc jest wydzielona?

Generatory analizatorów

10. Translacja sterowana składnią i YACC

Gramatyki, wyprowadzenia, hierarchia Chomsky ego. Gramatyka

Analiza semantyczna. Gramatyka atrybutywna

Efektywna analiza składniowa GBK

GRAMATYKI BEZKONTEKSTOWE

Program We Kompilator Wy Źródłowy

Wybrane narzędzia do tworzenia analizatorów leksykalnych i składniowych w C/C++ by Kapitol Team

ZYKI BEZKONTEKSTOWE (KLASA

PARADYGMATY I JĘZYKI PROGRAMOWANIA. Analiza leksykalna i syntaktyczna. w- 5

Języki formalne i automaty Ćwiczenia 1

5. JĘZYKI BEZKONTEKSTOWE (KLASA "2") GRAMATYKI BEZKONTEKSTOWE AUTOMATY ZE STOSEM DETERMINISTYCZNE JĘZYKI BEZKONTEKSTOWE I

Lingwistyka Matematyczna Języki formalne i gramatyki Analiza zdań

Metody Kompilacji Wykład 1 Wstęp

Języki formalne i automaty Ćwiczenia 9

Translacja wprowadzenie

Metody Realizacji Języków Programowania

Matematyczne Podstawy Informatyki

Generator YACC: gramatyki niejednoznaczne

Hierarchia Chomsky ego Maszyna Turinga

Wykład 10. Translacja sterowana składnią

1 X-gramatyki, Hierarchia Chomsky ego

JAO - lematy o pompowaniu dla jezykow bezkontekstowy

JAO - Wprowadzenie do Gramatyk bezkontekstowych

Semantyka i Weryfikacja Programów - Laboratorium 6

Algorytmy zwiazane z gramatykami bezkontekstowymi

11 Probabilistic Context Free Grammars

Hierarchia Chomsky ego

Języki, automaty i obliczenia

Maszyna Turinga. Algorytm. czy program???? Problem Hilberta: Przykłady algorytmów. Cechy algorytmu: Pojęcie algorytmu

Wprowadzenie do programowania języki i gramatyki formalne. dr hab. inż. Mikołaj Morzy

Lista 5 Gramatyki bezkontekstowe i automaty ze stosem

Teoretyczne podstawy informatyki. Wykład 12: Gramatyki. E. Richter-Was 1

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Metody Kompilacji Wykład 3

Wprowadzenie do kompilatorów

Metody Kompilacji Wykład 13

Języki i gramatyki formalne

Generacja kodu docelowego

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

Obiektowa implementacja parsera klasy LL(1)

Gramatyki wykorzystywane w analizie języka naturalnego

Analiza leksykalna i generator LEX

TRANSLACJA I TRANSLATORY

Metodologie programowania

Analiza metodą zstępującą. Bartosz Bogacki.

Podstawy generatora YACC. Bartosz Bogacki.

Wprowadzenie do złożoności obliczeniowej

Gramatyki regularne i automaty skoczone

Analiza algorytmów zadania podstawowe

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Generator YACC: gramatyki niejednoznaczne

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.

Algorytmy i Struktury Danych

Gramatyki grafowe. Dla v V, ϕ(v) etykieta v. Klasa grafów nad Σ - G Σ.

Sortowanie topologiczne skierowanych grafów acyklicznych

Algorytmy i struktury danych. wykład 2

Generator LLgen. Wojciech Complak Generator LLgen - charakterystyka. Generator LLgen -składnia specyfikacji

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

Efektywny parsing języka naturalnego przy użyciu gramatyk probabilistycznych

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

Strategia "dziel i zwyciężaj"

Podstawy Informatyki Gramatyki formalne

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Data Mining Wykład 3. Algorytmy odkrywania binarnych reguł asocjacyjnych. Plan wykładu

Złożoność obliczeniowa zadania, zestaw 2

Programowanie w Logice Gramatyki metamorficzne. Przemysław Kobylański na podstawie [CM2003] i [SS1994]

Metoda tabel semantycznych. Dedukcja drogi Watsonie, dedukcja... Definicja logicznej konsekwencji. Logika obliczeniowa.

Gramatyki (1-2) Definiowanie języków programowania. Piotr Chrząstowski-Wachjtel

Teoretyczne Podstawy Informatyki

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott

1 Automaty niedeterministyczne

Wykład 6. Wyszukiwanie wzorca w tekście

Translacja sterowana składnią w metodzie zstępującej

Definiowanie języka przez wyrażenie regularne(wr)

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Transkrypt:

Analizator syntaktyczny program źródłowy analizator leksykalny token daj nast. token analizator syntaktyczny drzewo rozbioru syntaktycznego analizator semantyczny kod pośredni tablica symboli Analizator Syntaktyczny (parser) ma za zadanie dokonać rozbioru syntaktycznego tekstu źródłowego analizowanego programu. Analizator leksykalny (skaner) dokonuje zamiany tekstu wejściowego na ciąg tokenów. Nie zostaje przy tym zmieniona struktura syntaktyczna programu wejściowego. Parser pracuje na podstawie gramatyki syntaktycznej G s, która na ogół jest gramatyką bezkontekstową. Od parsera oczekujemy odtworzenia wywodu i jakiegoś zanotowania tego wywodu. Najczęściej stosowanym sposobem notowania wyprowadzenia jest podanie ciągu numerów produkcji. Niekiedy równolegle z analizą syntaktyczną parser wykonuje pewne akcje semantyczne jak np. generowanie kodu pośredniego w postaci ONP. tetrad (n-tek), itd. Działanie parsera: * We: ω S (ω jest słowem nad alfabetem S, S jest zbiorem tokenów) Wy: π=p 1...p i...p n (p i numer produkcji) lub err

Przykład: G S =<{,,},{id,+,*,(,)},p,> P: (1) + (2) (3) * (4) (5) () (6) id * Analizowane słowo: (id+id)*id Do zbudowania drzewa rozbioru syntakt. (podstawa konstrukcji kodu wynikowego) niezbędna jest wiadomość, że ciąg numerów produkcji związany jest z wywodem (tutaj) lewostronnym ( id + ) id (2) (3) (4) (5) (1) (2) (4) (6) (4) (6) (6) * * ()* (+)* (+)* (+)* (id+)* (id+)* (id+id)* (id+id)* id acc ciąg numerów produkcji jest wyjściem z parsera

Definicja zbiorów IRS i OLLOW G = < N,, P, Z > G BK IRS K (α) = {x * : (α*xβ x =k) (α*x x <k); α,β (N ) * } Zbiór IRS K (α) jest zbiorem wszystkich terminalnych przedrostków długości k (lub mniejszej, jeżeli z α wyprowadza się łańcuch terminalny krótszy niż k) łańcuchów, które mogą być wyprowadzalne z α OLLOW K (β) = {x * : (Z*αβγ x IRS K (γ); α,β,γ (N ) * } Zbiór OLLOW K (β) zawiera terminalne łańcuchy o długości k (lub mniejszej patrz powyżej), które mogą pojawić się w wyprowadzeniach jako następniki β. Uwaga: jeśli OLLOW K (β) zawiera x: x <k, to wówczas zastępujemy x przez x$, gdzie $ prawy ogranicznik słowa (dla wygody). Wyznaczanie IRS 1 dla gramatyki G=<N,, P, Z> G BK Wyznaczanie IRS 1 (x) dla x (N ) (1) if x then IRS 1 (x):={x}; (2) if (x ε) P then IRS 1 (x):= IRS 1 (x) {ε}; (3) if x N and (x y 1 y 2...y k ) P then begin IRS 1 (x):=irs 1 (x) (IRS 1 (y 1 )\{ε}) for i:=2 to k do if (ε IRS 1 (y 1 ))and...and(ε IRS 1 (y i-1 )) then IRS 1 (x):=irs 1 (x) (IRS 1 (y i )\{ε}); if (ε IRS 1 (y 1 ))and...and(ε IRS 1 (y k )) then IRS 1 (x):=irs 1 (x) {ε} end; Aby wyznaczyć IRS 1 (x) dla wszystkich X (N ) należy stosować reguły (1), (2) i (3) tak długo, aż nic nowego nie da się dołączyć do któregokolwiek zbioru IRS 1 (x). Wyznaczanie IRS 1 (x 1 x 2...x n ) IRS 1 (x 1 x 2 x n ):=IRS 1 (x 1 )\{ε} for i:=2 to k do if (ε IRS 1 (x 1 ))and and(ε IRS 1 (x i-1 ))then IRS 1 (x 1 x n ):= IRS 1 (x 1 x n ) (IRS 1 (x i )\{ε}); if (ε IRS 1 (x 1 ))and and(ε IRS 1 (x n )) then IRS 1 (x 1 x n ):= IRS 1 (x 1 x n ) {ε};

Wyznaczenie OLLOW 1 dla wszystkich A N Stosować poniższe reguły (1), (2), (3) dopóty nic nowego nie może już zostać dodane do żadnego zbioru OLLOW 1. (1) OLLOW 1 (Z):=OLLOW 1 (Z) {$} (2) if (A αbβ) P then OLLOW 1 (B):=OLLOW 1 (B) (IRS 1 (β)\{ε}) (3) if (A αb) P or ((A αbβ) P and (ε IRS 1 (β))) then OLLOW 1 (B):=OLLOW 1 (B) OLLOW 1 (A); Przykład: (1) ` (2) +` ε (3) ` (4) ` *` ε (5) () id IRS 1 [+]={+} IRS 1 [*]={*} IRS 1 [(]={(} IRS 1 [)]={)} IRS 1 [id]={id} IRS 1 ()={(, id} IRS 1 (`)={ε,+} IRS 1 ()={(, id } IRS 1 (`)={ε,*} IRS 1 ()={(, id} OLLOW 1 ()={$,)} OLLOW 1 (`)={$,)} OLLOW 1 ()={+,),$} OLLOW 1 (`)={+,),$} OLLOW 1 ()={+,*,),$}

Generacja parsera: We: gramatyka syntaktyczna G S =<N S, S,P S,Z S > (oznaczana dalej G=<N,,P,Z>) Wy: algorytm parsera Algorytm parsera musi być efektywny. Uniwersalny algorytm arley a ma dla gramatyki bezkontekstowej (bez ograniczeń na jednoznaczność) złożoność obliczeniową: czasową O(n 3 ), pamięciową O(n 2 ), zaś dla gramatyk jednoznacznych złożoność czasowa wynosi O(n 2 ). Są to złożoności niedopuszczalne w praktyce. Musimy się posługiwać algorytmami prostszymi, ale wiąże się to z zawężeniem klasy gramatyk. Dla gramatyk LL(k) i LR(k) złożoność obliczeniowa algorytmu parsera wynosi: czasowa O(n) oraz pamięciowa O(n). Dalej rozpatrywane będą algorytmy parsingu dla gramatyk LL(k) i LR(k) przeglądanie wejścia od lewej do prawej LR(k) odtwarzanie wywodu prawostronnego metodą bottom-up LL(k) liczba symboli, które trzeba podglądać na wejściu, aby jednoznacznie określić numer produkcji, którą należy zastosować przeglądanie wejścia od lewej do prawej odtwarzanie wywodu lewostronnego metodą top-down liczba symboli, które trzeba podglądać na wejściu, aby jednoznacznie określić numer produkcji, którą należy zastosować

Na ogół stosowane są gramatyki: LL(1) LR(1) oraz jej podklasy SLR(1) oraz LALR(1), dające możliwość znacznego uproszczenia algorytmu parsingu przy niewielkim ograniczeniu możliwości gramatyki.