Uproszczony schemat działania kompilatora

Podobne dokumenty
Uproszczony schemat działania kompilatora

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

Metody Kompilacji Wykład 7 Analiza Syntaktyczna

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

Analizator syntaktyczny

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

Metodologie programowania

Wykład 5. Jan Pustelnik

Metody Kompilacji Wykład 3

Zadanie analizy leksykalnej

Gramatyka operatorowa

Metody Kompilacji Wykład 1 Wstęp

10. Translacja sterowana składnią i YACC

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

Parsery LL(1) Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

Wprowadzenie do analizy składniowej. Bartosz Bogacki.

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

Matematyczne Podstawy Informatyki

Analiza semantyczna. Gramatyka atrybutywna

Program We Kompilator Wy Źródłowy

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

Metody Kompilacji Wykład 13

Wykład5,str.1. Maszyny ze stosem ... 1,0 λ r. λ,z λ

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

Obiektowa implementacja parsera klasy LL(1)

Gramatyki atrybutywne

Efektywna analiza składniowa GBK

Wykład 10. Translacja sterowana składnią

Języki formalne i automaty Ćwiczenia 2

Translacja wprowadzenie

JAO - lematy o pompowaniu dla jezykow bezkontekstowy

Algorytmy zwiazane z gramatykami bezkontekstowymi

GRAMATYKI BEZKONTEKSTOWE

0.1 Lewostronna rekurencja

3.4. Przekształcenia gramatyk bezkontekstowych

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

Gramatyki rekursywne

JIP. Analiza składni, gramatyki

Opis wzorców polegający na na wykorzystaniu modelu definicji rekurencyjnych, nazywamy gramatyką bezkontekstową (ang. contex-free grammar).

Wprowadzenie do kompilatorów

Języki formalne i automaty Ćwiczenia 8

Języki programowania zasady ich tworzenia

Podstawy generatora YACC. Bartosz Bogacki.

KONSTRUKCJA KOMPILATORÓW

Semantyka i Weryfikacja Programów - Laboratorium 6

Języki formalne i automaty Ćwiczenia 4

kiedy znowu uzyska sterowanie, to podejmuje obliczenie od miejsca, w którym poprzednio przerwała, i z dotychczasowymi wartościami zmiennych,

Gramatyka TAG dla języka polskiego

Gramatyki wykorzystywane w analizie języka naturalnego

MATERIAŁY DO ZAJĘĆ I. Podstawowe pojęcia. Algorytm. Spis treści Przepis

Perl a XML. Narzędzia informatyczne w językoznawstwie. Generowanie danych XML - Przykład. Generowanie danych XML. Perl - Przetwarzanie XML

Przegląd metod error recovery (dla parsingu top-down, przykłady)

Parsery wykorzystywane w analizie języka naturalnego

Generatory analizatorów

JAO - Wprowadzenie do Gramatyk bezkontekstowych

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Analiza leksykalna i generator LEX

Rozbiór wstępujący gramatyki z pierwszeństwem. Rozbiór wstępujący gramatyki z pierwszeństwem

ZAAWANSOWANE JĘZYKI PROGRAMOWANIA

JĘZYKI FORMALNE I METODY KOMPILACJI

Generator YACC: gramatyki niejednoznaczne

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

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

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA Bieżący sylabus w semestrze zimowym roku 2016/17

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






















Zapis algorytmów: schematy blokowe i pseudokod 1

Gramatyki regularne i automaty skoczone

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Podstawy programowania

Generator YACC: gramatyki niejednoznaczne

POLITECHNIKA LUBELSKA. Walidacja Modeli Xtext

JĘZYKIFORMALNE IMETODYKOMPILACJI

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

ZYKI BEZKONTEKSTOWE (KLASA

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

11 Probabilistic Context Free Grammars

Wprowadzenie. Wojciech Complak

Języki i gramatyki formalne

Lingwistyka Matematyczna Języki formalne i gramatyki Analiza zdań

Transkrypt:

Uproszczony schemat działania kompilatora Wykład7,str.1 program źródłowy ciąg leksemów drzewo wywodu drzewo i tablice symboli analiza leksykalna analiza syntaktyczna analiza semantyczna KOMPILATOR generacja kodu dane do programu kod docelowy wyniki

Uproszczony schemat działania kompilatora Wykład7,str.1 ciąg leksemów drzewo wywodu analiza syntaktyczna KOMPILATOR

Różne metody analizy syntaktycznej Wykład7,str.2 Rozbiór słowa budowanie jego drzewa wywodu w danej gramatyce bezkontekstowej.

Różne metody analizy syntaktycznej Wykład7,str.2 Rozbiór słowa budowanie jego drzewa wywodu w danej gramatyce bezkontekstowej. Synonimy: rozbiór = analiza syntaktyczna = parsing.

Różne metody analizy syntaktycznej Wykład7,str.2 Rozbiór słowa budowanie jego drzewa wywodu w danej gramatyce bezkontekstowej. Synonimy: rozbiór = analiza syntaktyczna = parsing. Parser program(procedura, podprogram) dokonujący rozbioru.

Różne metody analizy syntaktycznej Wykład7,str.2 Rozbiór słowa budowanie jego drzewa wywodu w danej gramatyce bezkontekstowej. Synonimy: rozbiór = analiza syntaktyczna = parsing. Parser program(procedura, podprogram) dokonujący rozbioru. Budowy drzewa wywodu można dokonywać albo od strony korzenia(rozbiór zstępujący), albo od strony liści(rozbiór wstępujący).

Różne metody analizy syntaktycznej Wykład7,str.2 Rozbiór słowa budowanie jego drzewa wywodu w danej gramatyce bezkontekstowej. Synonimy: rozbiór = analiza syntaktyczna = parsing. Parser program(procedura, podprogram) dokonujący rozbioru. Budowy drzewa wywodu można dokonywać albo od strony korzenia(rozbiór zstępujący), albo od strony liści(rozbiór wstępujący). Jest wiele metod rozbioru danego słowa; różnią się zakresem stosowalności(do jakich rodzajów gramatyk bezkontekstowych się nadają)

Różne metody analizy syntaktycznej Wykład7,str.2 Rozbiór słowa budowanie jego drzewa wywodu w danej gramatyce bezkontekstowej. Synonimy: rozbiór = analiza syntaktyczna = parsing. Parser program(procedura, podprogram) dokonujący rozbioru. Budowy drzewa wywodu można dokonywać albo od strony korzenia(rozbiór zstępujący), albo od strony liści(rozbiór wstępujący). Jest wiele metod rozbioru danego słowa; różnią się zakresem stosowalności(do jakich rodzajów gramatyk bezkontekstowych się nadają), oraz efektywnością(jak szybko działają i ile potrzebują pamięci).

Różne metody analizy syntaktycznej Wykład7,str.2 Rozbiór słowa budowanie jego drzewa wywodu w danej gramatyce bezkontekstowej. Synonimy: rozbiór = analiza syntaktyczna = parsing. Parser program(procedura, podprogram) dokonujący rozbioru. Budowy drzewa wywodu można dokonywać albo od strony korzenia(rozbiór zstępujący), albo od strony liści(rozbiór wstępujący). Jest wiele metod rozbioru danego słowa; różnią się zakresem stosowalności(do jakich rodzajów gramatyk bezkontekstowych się nadają), oraz efektywnością(jak szybko działają i ile potrzebują pamięci). Programy do automatycznego tworzenia parserów potrafią na ogół dobrać optymalny(albo przynajmniej niezły) parser do danej gramatyki.

Rekursywny parser zstępujący Wykład7,str.3 na wejściu mamy ciąg terminali

Rekursywny parser zstępujący Wykład7,str.3 na wejściu mamy ciąg terminali; każdemunieterminalowi A gramatykiodpowiadafunkcjarekursywnaf A,której wywołanie powoduje

Rekursywny parser zstępujący Wykład7,str.3 na wejściu mamy ciąg terminali; każdemunieterminalowi A gramatykiodpowiadafunkcjarekursywnaf A,której wywołanie powoduje albo przeczytanie z wejścia najdłuższego ciągu w terminali, takiego że A w,orazskonstruowaniedrzewawywodusłowawznieterminalu A

Rekursywny parser zstępujący Wykład7,str.3 na wejściu mamy ciąg terminali; każdemunieterminalowi A gramatykiodpowiadafunkcjarekursywnaf A,której wywołanie powoduje albo przeczytanie z wejścia najdłuższego ciągu w terminali, takiego że A w,orazskonstruowaniedrzewawywodusłowawznieterminalu A, albo sygnalizację błędu

Rekursywny parser zstępujący Wykład7,str.3 na wejściu mamy ciąg terminali; każdemunieterminalowi A gramatykiodpowiadafunkcjarekursywnaf A,której wywołanie powoduje albo przeczytanie z wejścia najdłuższego ciągu w terminali, takiego że A w,orazskonstruowaniedrzewawywodusłowawznieterminalu A, albo sygnalizację błędu; funkcjaf A jestdefiniowanawedługprodukcjigramatycznychznieterminalu A

Rekursywny parser zstępujący Wykład7,str.3 na wejściu mamy ciąg terminali; każdemunieterminalowi A gramatykiodpowiadafunkcjarekursywnaf A,której wywołanie powoduje albo przeczytanie z wejścia najdłuższego ciągu w terminali, takiego że A w,orazskonstruowaniedrzewawywodusłowawznieterminalu A, albo sygnalizację błędu; funkcjaf A jestdefiniowanawedługprodukcjigramatycznychznieterminalu A każdemu terminalowi występującemu w produkcji odpowiada sprawdzenie, czy na wejściu pojawia się ten właśnie terminal, i przeczytanie go z wejścia

Rekursywny parser zstępujący Wykład7,str.3 na wejściu mamy ciąg terminali; każdemunieterminalowi A gramatykiodpowiadafunkcjarekursywnaf A,której wywołanie powoduje albo przeczytanie z wejścia najdłuższego ciągu w terminali, takiego że A w,orazskonstruowaniedrzewawywodusłowawznieterminalu A, albo sygnalizację błędu; funkcjaf A jestdefiniowanawedługprodukcjigramatycznychznieterminalu A każdemu terminalowi występującemu w produkcji odpowiada sprawdzenie, czy na wejściu pojawia się ten właśnie terminal, i przeczytanie go z wejścia, każdemu nieterminalowi B występującemu w produkcji odpowiada wywołaniefunkcjif B

Rekursywny parser zstępujący Wykład7,str.3 na wejściu mamy ciąg terminali; każdemunieterminalowi A gramatykiodpowiadafunkcjarekursywnaf A,której wywołanie powoduje albo przeczytanie z wejścia najdłuższego ciągu w terminali, takiego że A w,orazskonstruowaniedrzewawywodusłowawznieterminalu A, albo sygnalizację błędu; funkcjaf A jestdefiniowanawedługprodukcjigramatycznychznieterminalu A każdemu terminalowi występującemu w produkcji odpowiada sprawdzenie, czy na wejściu pojawia się ten właśnie terminal, i przeczytanie go z wejścia, każdemu nieterminalowi B występującemu w produkcji odpowiada wywołaniefunkcjif B, dojściu do końca produkcji odpowiada skonstruowanie drzewa z mniejszych drzew dostarczonych przez te wszystkie wywołania

Rekursywny parser zstępujący Wykład7,str.3 na wejściu mamy ciąg terminali; każdemunieterminalowi A gramatykiodpowiadafunkcjarekursywnaf A,której wywołanie powoduje albo przeczytanie z wejścia najdłuższego ciągu w terminali, takiego że A w,orazskonstruowaniedrzewawywodusłowawznieterminalu A, albo sygnalizację błędu; funkcjaf A jestdefiniowanawedługprodukcjigramatycznychznieterminalu A każdemu terminalowi występującemu w produkcji odpowiada sprawdzenie, czy na wejściu pojawia się ten właśnie terminal, i przeczytanie go z wejścia, każdemu nieterminalowi B występującemu w produkcji odpowiada wywołaniefunkcjif B, dojściu do końca produkcji odpowiada skonstruowanie drzewa z mniejszych drzew dostarczonych przez te wszystkie wywołania, niezgodności terminalu w produkcji i na wejściu oraz błędowi przy wywołaniu funkcjif B odpowiadapróbaprzejściadonastępnejprodukcjiztegonieterminalu przy tym nie można cofnąć już wczytanych terminali z wejścia.

Wykład7,str.4 Przekształcenie gramatyki dla parsera zstępującego Zmiana kolejności produkcji i wyłączenie przed nawias

Wykład7,str.4 Przekształcenie gramatyki dla parsera zstępującego Zmiana kolejności produkcji i wyłączenie przed nawias : S + W W ::= S S S - W S ::= C C * S C C / S C ::= L ( W ) L ::= 0 1 0 L 1 L W ::= S { + W S ::= C { * S C ::= ( W ) L ::= 0 { L 1 { L L λ } λ } - W / S λ } λ }

Wykład7,str.4 Przekształcenie gramatyki dla parsera zstępującego Zmiana kolejności produkcji i wyłączenie przed nawias : W ::= S S S + W S - W S ::= C C * S C C / S C ::= L ( W ) L ::= 0 1 0 L 1 L W ::= S { + W S ::= C { * S C ::= ( W ) L ::= 0 { L 1 { L L λ } λ } - W / S λ } λ }

Wykład7,str.4 Przekształcenie gramatyki dla parsera zstępującego Zmiana kolejności produkcji i wyłączenie przed nawias : W ::= S S S + W S - W S ::= C C * S C C / S C ::= L ( W ) L ::= 0 1 0 L 1 L W ::= S { + W S ::= C { * S C ::= ( W ) L ::= 0 { L 1 { L L λ } λ } - W / S λ } λ }

Wykład7,str.4 Przekształcenie gramatyki dla parsera zstępującego Zmiana kolejności produkcji i wyłączenie przed nawias : W ::= S S S + W S - W S ::= C C * S C C / S C ::= L ( W ) L ::= 0 1 0 L 1 L W ::= S { + W S ::= C { * S C ::= ( W ) L ::= 0 { L 1 { L L λ } λ } - W / S λ } λ }

Wykład7,str.4 Przekształcenie gramatyki dla parsera zstępującego Zmiana kolejności produkcji i wyłączenie przed nawias : W ::= S S S + W S - W S ::= C C * S C C / S C ::= L ( W ) L ::= 0 1 0 L 1 L W ::= S { + W S ::= C { * S C ::= ( W ) L ::= 0 { L 1 { L L λ } λ } - W / S λ } λ }

Programowanie parsera zstępującego W ::= S { + W - W λ } Wykład7,str.5

Programowanie parsera zstępującego W ::= S { + W - W λ } Wykład7,str.5 drzewof W () { t 1 =f S (); if(wejście== + ) { nastleks();t 2 =f W (); return(drzewozrobionezt 1,+,t 2 ) }else if(wejście== - ) { nastleks();t 2 =f W (); return(drzewozrobionezt 1,,t 2 ) } elsereturn(drzewozrobionezt 1 ) }

Programowanie parsera zstępującego W ::= S { + W - W λ } Wykład7,str.5 drzewof W () { t 1 =f S (); if(wejście== + ) { nastleks();t 2 =f W (); return(drzewozrobionezt 1,+,t 2 ) }else if(wejście== - ) { nastleks();t 2 =f W (); return(drzewozrobionezt 1,,t 2 ) } elsereturn(drzewozrobionezt 1 ) }

Programowanie parsera zstępującego W ::= S { + W - W λ } Wykład7,str.5 drzewof W () { t 1 =f S (); if(wejście== + ) { nastleks();t 2 =f W (); return(drzewozrobionezt 1,+,t 2 ) }else if(wejście== - ) { nastleks();t 2 =f W (); return(drzewozrobionezt 1,,t 2 ) } elsereturn(drzewozrobionezt 1 ) }

Programowanie parsera zstępującego W ::= S { + W - W λ } Wykład7,str.5 drzewof W () { t 1 =f S (); if(wejście== + ) { nastleks();t 2 =f W (); return(drzewozrobionezt 1,+,t 2 ) }else if(wejście== - ) { nastleks();t 2 =f W (); return(drzewozrobionezt 1,,t 2 ) } elsereturn(drzewozrobionezt 1 ) } Uwaga: To jeszcze nie jest dokładnie to, co trzeba. Patrz dalej.