Metody Kompilacji Wykład 3

Podobne dokumenty
Gramatyki atrybutywne

Metody Kompilacji Wykład 7 Analiza Syntaktyczna

Metody Kompilacji Wykład 13

Analiza semantyczna. Gramatyka atrybutywna

10. Translacja sterowana składnią i YACC

Metody Kompilacji Wykład 1 Wstęp

Wykład 10. Translacja sterowana składnią

Matematyczne Podstawy Informatyki

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

Wprowadzenie do analizy składniowej. Bartosz Bogacki.

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Uproszczony schemat działania kompilatora

Przyczyny dwustopniowego tłumaczenia

Odwrotna Notacja Polska

7a. Teoria drzew - kodowanie i dekodowanie

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel

Języki programowania zasady ich tworzenia

Generatory analizatorów

Wykład 11. Konstrukcja drzew składniowych

Uproszczony schemat działania kompilatora

Wstęp do programowania

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

Wstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel

Matematyka dyskretna - 7.Drzewa

PROLOG WSTĘP DO INFORMATYKI. Akademia Górniczo-Hutnicza. Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej.

Składnia rachunku predykatów pierwszego rzędu

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

JAO - Wprowadzenie do Gramatyk bezkontekstowych

Układy VLSI Bramki 1.0

Struktury danych: stos, kolejka, lista, drzewo

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

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

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

Programowanie komputerów

Zadanie analizy leksykalnej

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

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Języki formalne i automaty Ćwiczenia 4

Gramatyka operatorowa

11 Probabilistic Context Free Grammars

Wykład 5. Jan Pustelnik

Języki formalne i automaty Ćwiczenia 3

Grafy (3): drzewa. Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków. UTP Bydgoszcz

Języki formalne i automaty Ćwiczenia 2

Programowanie w Logice Struktury danych (Lista 2)

ALGORYTMY I STRUKTURY DANYCH

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

Programowanie obiektowe

Języki formalne i automaty Ćwiczenia 9

Nierówność Krafta-McMillana, Kodowanie Huffmana

Ogólne wiadomości o grafach

Wykład 14. Środowisko przetwarzania

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Wysokość drzewa Głębokość węzła

Pracownia Informatyczna Instytut Technologii Mechanicznej Wydział Inżynierii Mechanicznej i Mechatroniki. Podstawy Informatyki i algorytmizacji

2.2. Gramatyki, wyprowadzenia, hierarchia Chomsky'ego

STRUKTURY DANYCH I ZŁOŻONOŚĆ OBLICZENIOWA STRUKTURY DANYCH I ZŁOŻONOŚĆ OBLICZENIOWA. Część 3. Drzewa Przeszukiwanie drzew

Wykład 6. Drzewa poszukiwań binarnych (BST)

Pierwsze kroki. Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura

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

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

Algorytmy i Struktury Danych

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

Wykład 2. Drzewa zbalansowane AVL i 2-3-4

Algorytmy zachłanne. dr inż. Urszula Gałązka

GRAMATYKI BEZKONTEKSTOWE

JAO - lematy o pompowaniu dla jezykow bezkontekstowy

0.1 Lewostronna rekurencja

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

Wykład 2. Drzewa poszukiwań binarnych (BST)

TRANSLACJA I TRANSLATORY

Programowanie obiektowe

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303

Semantyka i Weryfikacja Programów - Laboratorium 6

Kompresja bezstratna. Entropia. Kod Huffmana

Matematyczna wieża Babel. 4. Ograniczone maszyny Turinga o językach kontekstowych materiały do ćwiczeń

Poprawność semantyczna

Translacja sterowana składnią w generatorze YACC

Metodologie programowania

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada

Programowanie w języku Python. Grażyna Koba

JIP. Analiza składni, gramatyki

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

Technologie informacyjne - wykład 12 -

Języki formalne i automaty Ćwiczenia 5

Programowanie genetyczne, gra SNAKE

Metoda Tablic Semantycznych

Typy danych. 2. Dane liczbowe 2.1. Liczby całkowite ze znakiem i bez znaku: 32768, -165, ; 2.2. Liczby rzeczywiste stało i zmienno pozycyjne:

Programowanie w języku C++ Grażyna Koba

Paradygmaty dowodzenia

Przypomnij sobie krótki wstęp do teorii grafów przedstawiony na początku semestru.

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Teoretyczne podstawy informatyki

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Indukowane Reguły Decyzyjne I. Wykład 3

UNIWERSYTET GDAŃSKI MATERIAŁY DYDAKTYCZNE DO PRZEDMIOTU MATEMATYKA DYSKRETNA. pod redakcją: Hanna Furmańczyk Karol Horodecki Paweł Żyliński

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

Gramatyki, wyprowadzenia, hierarchia Chomsky ego. Gramatyka

Drzewa poszukiwań binarnych

Transkrypt:

Metody Kompilacji Wykład 3

odbywa się poprzez dołączenie zasad(reguł) lub fragmentów kodu do produkcji w gramatyce. Włodzimierz Bielecki WI ZUT 2

Na przykład, dla produkcji expr -> expr 1 + term możemy przetwarzać expr wykorzystując strukturę produkcji zgodnie z poniższym pseudokodem: przetwarzaj expr 1 ; przetwarzaj term; przetwarzaj +; Włodzimierz Bielecki WI ZUT 3

Atrybut jest to pewna wartość powiązana z konstrukcją języka programowania. Przykładami atrybutów są typy danych wyrażeń, liczba instrukcji wygenerowanego kodu lub lokalizacja pierwszej instrukcji generowanego kodu. Włodzimierz Bielecki WI ZUT 4

Schemat translacji sterowany składnią jest to gramatyka, gdzie do każdej produkcji jest przypisany fragment kodu -- akcja semantyczna. Fragmenty kodu są wykonywane podczas gdy produkcja jest wykorzystywana przez parser. Włodzimierz Bielecki WI ZUT 5

Notacja postfiksowa Notacja postfiksowa może być zdefiniowana w następujący sposób: 1. Jeżeli E oznacza zmienną lub stałą, to notacja postfiksowa dla E jest samo E. Włodzimierz Bielecki WI ZUT 6

Notacja postfiksowa 2. Jeżeli E jest wyrażeniem postaci E 1 op E 2, gdzie op jest operatorem binarnym, to notacją postfiksową dla E jest E 1 E 2 op, gdzie E 1 E 2 są notacjami postfiksowymi dla E 1 i E 2, odpowiednio. Włodzimierz Bielecki WI ZUT 7

Notacja postfiksowa 3. Jeżeli E jest wyrażeniem o postaci (E 1 ), to notacja postfiksowa dla E jest taka sama jak notacja postfiksowa dla E 1. Włodzimierz Bielecki WI ZUT 8

Notacja postfiksowa Przykład: Notacją postfiksową dla wyrażenia (9-5)+2 jest 95-2+. Oznacza to, że przekład dla 9, 5 i 2 jest reprezentowany przez te same stałe zgodnie z regułą (1). Tłumaczeniem 9-5 zgodnie z reguła (2) jest 95-. Tłumaczeniem dla (9-5) zgodnie z regułą (3) jest 9-5. Włodzimierz Bielecki WI ZUT 9

Notacja postfiksowa Nawiasy nie są potrzebne w notacji postfiksowej, ponieważ pozycja i liczba argumentów operatorów w sposób jednoznaczny określają kolejność wykonywania operatorów. Włodzimierz Bielecki WI ZUT 10

Atrybuty syntezowane Atrybuty kojarzymy z nieterminalami i terminalami. Żeby obliczyć atrybuty nieterminali, dodajemy reguły do produkcji. Reguły te opisują w jaki sposób obliczane są atrybuty w węzłach drzewa parsowania. Włodzimierz Bielecki WI ZUT 11

Definicja sterowana składnią Definicja sterowana składnią określa się przez: 1. Zbiór atrybutów dla każdego symbolu gramatycznego. 2. Zbiór reguł semantycznych do obliczania wartości atrybutów związanych z symbolami występującymi w produkcji. Włodzimierz Bielecki WI ZUT 12

Atrybuty syntezowane Atrybuty mogą być obliczone w następujący sposób. Dla danego ciągu wejściowego x tworzymy drzewo parsowania. Następnie stosujemy reguły semantyczne w każdym węźle drzewa parsowania w następujący sposób. Włodzimierz Bielecki WI ZUT 13

Atrybuty syntezowane Załóżmy, że węzeł N w drzewie parsowania jest oznaczony symbolem X. Wtedy zapisujemy wartość atrybutu a w tym węźle jako X.a. Drzewo parsowania, pokazujące wartości atrybutów w każdym węźle, nazywamy drzewem parsowania z przypisami. Włodzimierz Bielecki WI ZUT 14

Atrybuty syntezowane Wartość atrybutu syntezowanego dla węzła N w drzewie parsowania oblicza się w oparciu o atrybuty jego dzieci i atrybutu własnego. Włodzimierz Bielecki WI ZUT 15

Przykład obliczenia atrybutów Definicja sterowana składnią do tłumaczenia postaci infiksowej na postfiksową. Produkcja expr expr 1 + term expr expr 1 - term expr term term 0 term 1 term 9 Reguły semantyczne expr.t := expr 1.t term.t + expr.t := expr 1.t term.t - expr.t := term.t term.t := 0 term.t := 1 term.t := 9 Znak oznacza operator konkatenacji Włodzimierz Bielecki WI ZUT 16

Atrybuty syntezowane Wartości atrybutów w węzłach drzewa parsowania dla ciągu: 9-5+2 expr.t = 95-2+ expr.t = 95- term.t = 2 expr.t = 9 term.t = 5 term.t = 9 9-5 + 2 Gramatyka: expr -> expr + term I expr - term I term term->0,1,2,,9 Włodzimierz Bielecki WI ZUT 17

Atrybuty syntezowane Wartości atrybutów w węzłach drzewa parsowania dla ciągu: 9-5+2, krok1 term.t = 9 9-5 + 2 Gramatyka: expr -> expr + term I expr - term I term term->0,1,2,,9 Włodzimierz Bielecki WI ZUT 18

Atrybuty syntezowane Wartości atrybutów w węzłach drzewa parsowania dla ciągu: 9-5+2, krok2 expr.t = 9 term.t = 9 9-5 + 2 Gramatyka: expr -> expr + term I expr - term I term term->0,1,2,,9 Włodzimierz Bielecki WI ZUT 19

Atrybuty syntezowane Wartości atrybutów w węzłach drzewa parsowania dla ciągu: 9-5+2, krok 3 expr.t = 9 term.t = 5 term.t = 9 9-5 + 2 Gramatyka: expr -> expr + term I expr - term I term term->0,1,2,,9 Włodzimierz Bielecki WI ZUT 20

Atrybuty syntezowane Wartości atrybutów w węzłach drzewa parsowania dla ciągu: 9-5+2, krok 4 expr.t = 95- expr.t = 9 term.t = 5 term.t = 9 9-5 + 2 Gramatyka: expr -> expr + term I expr - term I term term->0,1,2,,9 Włodzimierz Bielecki WI ZUT 21

Atrybuty syntezowane Wartości atrybutów w węzłach drzewa parsowania dla ciągu: 9-5+2, krok 5 expr.t = 95- term.t = 2 expr.t = 9 term.t = 5 term.t = 9 9-5 + 2 Gramatyka: expr -> expr + term I expr - term I term term->0,1,2,,9 Włodzimierz Bielecki WI ZUT 22

Atrybuty syntezowane Wartości atrybutów w węzłach drzewa parsowania dla ciągu: 9-5+2, krok 6 expr.t = 95-2+ expr.t = 95- term.t = 2 expr.t = 9 term.t = 5 term.t = 9 9-5 + 2 Gramatyka: expr -> expr + term I expr - term I term term->0,1,2,,9 Włodzimierz Bielecki WI ZUT 23

Przechodzenie drzewa w głąb Przechodzenie przez drzewo jest używane do obliczania atrybutów oraz wykonania fragmentów kodu(akcji) w schemacie translacji. Przechodzenie drzewa zaczyna się od jego korzenia i dalej odwiedza sie każdy węzeł drzewa w pewnej kolejności. Włodzimierz Bielecki WI ZUT 24

Przechodzenie drzewa w głąb Przechodzenie drzewa w głąb ( depth-first traversal) zaczyna się od korzenia i polega na odwiedzaniu dzieci każdego węzła w dowolnej kolejności, niekoniecznie od lewej do prawej. Włodzimierz Bielecki WI ZUT 25

Przechodzenie drzewa w głąb Ono się nazywa "w głąb", ponieważ odwiedza nieodwiedzone dziecko węzła, gdy tylko może, więc odwiedza węzły jak najdalej od korzenia i tak szybko, jak jest to możliwe. Włodzimierz Bielecki WI ZUT 26

Przechodzenie drzewa w głąb Przykład przechodzenia drzewa w głąb: 1 1 Włodzimierz Bielecki WI ZUT 27

Przechodzenie drzewa w głąb Przykład przechodzenia drzewa w głąb: 1 1 Włodzimierz Bielecki WI ZUT 28

Przechodzenie drzewa w głąb Przykład przechodzenia drzewa w głąb: 1 1 Włodzimierz Bielecki WI ZUT 29

Przechodzenie drzewa w głąb Przykład przechodzenia drzewa w głąb: 1 1 Włodzimierz Bielecki WI ZUT 30

Przechodzenie drzewa w głąb Przykład przechodzenia drzewa w głąb: 1 1 Włodzimierz Bielecki WI ZUT 31

Przechodzenie drzewa w głąb Definicja sterowana składnią nie narzuca żadnej konkretnej kolejności do obliczenia atrybutów w drzewie parsowania; każda kolejność, która oblicza atrybut a po wszystkich innych atrybutach, od których a zależy, jest akceptowalna. Włodzimierz Bielecki WI ZUT 32

Przechodzenie drzewa w głąb procedure visit(node N) { } for (each child C of N, from left to right) visit (C) ; zastosuj reguły semantyczne w węzle N; Jest rekurencyjna i zapewnia, że w pierwszej kolejności wartości semantyczne będą obliczone dla liści drzewa Włodzimierz Bielecki WI ZUT 33

Przechodzenie drzewa w głąb przykład expr.t = 95-2+ 6 expr.t = 95- term.t = 2 4 5 expr.t = 9 term.t = 5 2 3 term.t = 9 1 9-5 + 2 Włodzimierz Bielecki WI ZUT 34

Schemat translacji Schemat translacji sterowany składnią jest to notacja dla określenia translacji, która powstaje po dołączeniu fragmentów kodu do produkcji w gramatyce. Włodzimierz Bielecki WI ZUT 35

Schemat translacji Fragmenty kodu, dodane do produkcji, nazywamy akcjami semantycznymi. Włodzimierz Bielecki WI ZUT 36

Schemat translacji Pozycja, gdzie akcja ma zostać wykonana jest pokazana przez umieszczenie jej w klamrach w prawej stronie produkcji: rest + term { print( + ) } rest Akcja semantyczna Dodatkowy węzeł reprezentuje akcję semantyczną, jest połączony linią przerywaną z węzłem, odpowiadającym głowie (lewej stronie) rest + term { print( + ) } Włodzimierz Bielecki WI ZUT rest 37

Schemat translacji Akcje do translacji na notację postfiksową: expr -> expr1 + term expr -> expr1- term expr -> term term -> 0 term -> 1... term -> 9 {print('+')} {print('-')} {print ('0')} {print (' 1')} {print ('9')} Akcje semantyczne Włodzimierz Bielecki WI ZUT 38

Schemat translacji Implementacja schematu translacji musi zapewnić, że akcje semantyczne zostaną wykonane w kolejności, w jakiej pojawiają się one w trakcie przechodzenia post-order. Włodzimierz Bielecki WI ZUT 39

Przechodzenie drzewa Postorder Postfiksowe Wsteczne Drzewa: poszukiwanie postorder Numery przy wierzchołkach oznaczają kolejność ich odwiedzania Zanim odwiedzimy dany wierzchołek, odwiedzimy wszystkich jego potomków. Poruszamy się od najniższej generacji w górę. Włodzimierz Bielecki WI ZUT 40

Schemat translacji Implementacja nie musi w rzeczywistości skonstruować drzewa parsowania o ile zapewnia ona, że akcje semantyczne są wykonywane jak gdyby skonstruowaliśmy drzewo syntaktyczne i następnie akcje są wykonywane zgodnie z przechodzeniem postorder. Włodzimierz Bielecki WI ZUT 41

Schemat translacji expr { print( + ) } expr expr - + { print( - ) } term term 2 { print( 2 ) } { print( 5 ) } term 5 { print( 9 ) } 9 Translacja 9-5+2 do postaci 95-2+ Włodzimierz Bielecki WI ZUT 42

Prosty kalkulator Definicja sterowana składnią: L ::= E \n E ::= E 1 + T E ::= T T ::= T 1 * F T ::= F F ::= ( E ) F ::= digit Produkcje L.val = E.val E.val = E 1.val + T.val E.val = T.val T.val = T 1.val * F.val T.val = F.val F.val = E.val F.val = digit.lexval Akcje semantyczne Włodzimierz Bielecki WI ZUT

Obliczenie: 9+3*5\n L ::= E \n E ::= E 1 + T E ::= T T ::= T 1 * F T ::= F F ::= ( E ) F ::= digit L.val = E.val E.val = E 1.val + T.val E.val = T.val T.val = T 1.val * F.val T.val = F.val F.val = E.val F.val = digit.lexval + E.val=9 L.val=24 E.val=24 T.val=15 \n Uwaga: Produkcja F ::= ( E ) nie została wykorzystana do tworzenia drzewa parsowania T.val=9 F.val=9 digit.lexval=9 T.val=3 * F.val=5 Włodzimierz 44 Bielecki WI ZUT

Obliczenie: 9+3*5\n L ::= E \n E ::= E 1 + T E ::= T T ::= T 1 * F T ::= F F ::= ( E ) F ::= digit L.val = E.val E.val = E 1.val + T.val E.val = T.val T.val = T 1.val * F.val T.val = F.val F.val = E.val F.val = digit.lexval + E.val=9 L.val=24 E.val=24 T.val=15 \n Uwaga: Produkcja F ::= ( E ) nie została wykorzystana do tworzenia drzewa parsowania T.val=9 F.val=9 digit.lexval=9 T.val=3 * F.val=5 Włodzimierz 45 Bielecki WI ZUT

Obliczenie: 9+3*5\n L ::= E \n E ::= E 1 + T E ::= T T ::= T 1 * F T ::= F F ::= ( E ) F ::= digit L.val = E.val E.val = E 1.val + T.val E.val = T.val T.val = T 1.val * F.val T.val = F.val F.val = E.val F.val = digit.lexval + E.val=9 L.val=24 E.val=24 T.val=15 \n Uwaga: Produkcja F ::= ( E ) nie została wykorzystana do tworzenia drzewa parsowania T.val=9 F.val=9 digit.lexval=9 T.val=3 * F.val=5 Włodzimierz 46 Bielecki WI ZUT

Obliczenie: 9+3*5\n L ::= E \n E ::= E 1 + T E ::= T T ::= T 1 * F T ::= F F ::= ( E ) F ::= digit L.val = E.val E.val = E 1.val + T.val E.val = T.val T.val = T 1.val * F.val T.val = F.val F.val = E.val F.val = digit.lexval + E.val=9 L.val=24 E.val=24 T.val=15 \n T.val=9 T.val=3 * F.val=5 F.val=9 Włodzimierz Bielecki WI ZUT 47

Obliczenie: 9+3*5\n L ::= E \n E ::= E 1 + T E ::= T T ::= T 1 * F T ::= F F ::= ( E ) F ::= digit L.val = E.val E.val = E 1.val + T.val E.val = T.val T.val = T 1.val * F.val T.val = F.val F.val = E.val F.val = digit.lexval + E.val=9 L.val=24 E.val=24 T.val=15 \n T.val=9 T.val=3 * F.val=5 F.val=9 Włodzimierz Bielecki WI ZUT 48

Obliczenie: 9+3*5\n L ::= E \n E ::= E 1 + T E ::= T T ::= T 1 * F T ::= F F ::= ( E ) F ::= digit L.val = E.val E.val = E 1.val + T.val E.val = T.val T.val = T 1.val * F.val T.val = F.val F.val = E.val F.val = digit.lexval + E.val=9 L.val=24 E.val=24 T.val=15 \n T.val=9 T.val=3 * F.val=5 F.val=9 digit.lexval=9 Włodzimierz 49 Bielecki WI ZUT

Dziękuję za uwagę Włodzimierz Bielecki WI ZUT 50