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



Podobne dokumenty
Translacja wprowadzenie

Program We Kompilator Wy Źródłowy

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

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

Wprowadzenie. Teoria automatów i języków formalnych. Literatura (1)

Metody Kompilacji Wykład 1 Wstęp

Zadanie analizy leksykalnej

Analizator syntaktyczny

KONSTRUKCJA KOMPILATORÓW

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

Wprowadzenie: języki, symbole, alfabety, łańcuchy Języki formalne i automaty. Literatura

Przyczyny dwustopniowego tłumaczenia

Gramatyki atrybutywne

Analiza semantyczna. Gramatyka atrybutywna

Uproszczony schemat działania kompilatora

Uproszczony schemat działania kompilatora

Matematyczne Podstawy Informatyki

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

Generatory analizatorów

Matematyczne Podstawy Informatyki

Wprowadzenie do kompilatorów

Programowanie komputerów

10. Translacja sterowana składnią i YACC

TRANSLACJA I TRANSLATORY

Wprowadzenie do analizy składniowej. Bartosz Bogacki.

Semantyka i Weryfikacja Programów - Laboratorium 6

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

Efektywna analiza składniowa GBK

Podstawy Informatyki Języki programowania c.d.

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

Ryszard Myhan. Wykład 1: Języki programowania

Analiza leksykalna i generator LEX

Wykład 10. Translacja sterowana składnią

Metody Kompilacji Wykład 3

Podstawy Informatyki Gramatyki formalne

Matematyczne Podstawy Informatyki

Języki programowania zasady ich tworzenia

Paradygmaty i języki programowania. Analiza leksykalna Skaner, RE, DAS, NAS, ε- NAS

Gramatyki regularne i automaty skoczone

Wprowadzenie. Wojciech Complak

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński

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

Informatyka. Michał Rad

Podstawy generatora YACC. Bartosz Bogacki.

Gramatyka operatorowa

Sprzęt komputera - zespół układów wykonujących programy wprowadzone do pamięci komputera (ang. hardware) Oprogramowanie komputera - zespół programów

Języki formalne i automaty Ćwiczenia 2

Optymalizacja oprogramowania - wprowadzenie

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Podstawy programowania

Podstawy programowania.

Matematyczne podstawy informatyki Mathematical Foundations of Computational Sciences. Matematyka Poziom kwalifikacji: II stopnia

Generator YACC: gramatyki niejednoznaczne

Wstęp do Programowania Obiektowego. Wykład 13 Paradygmaty. Składnia i semantyka.

Java EE produkcja oprogramowania

AUTOMATYKA INFORMATYKA

Języki formalne i gramatyki

WYKŁAD. Jednostka prowadząca: Wydział Techniczny. Kierunek studiów: Elektronika i telekomunikacja. Nazwa przedmiotu: Język programowania C++

Metodologie programowania

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

Wykład 11. Konstrukcja drzew składniowych

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Inteligentne wydobywanie informacji z internetowych serwisów społecznościowych

Projektowanie oprogramowania cd. Projektowanie oprogramowania cd. 1/34

GRAMATYKI BEZKONTEKSTOWE

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

Obiektowa implementacja parsera klasy LL(1)

Translacja sterowana składnią w generatorze YACC

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

Metody Kompilacji Wykład 7 Analiza Syntaktyczna

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

Technologie informacyjne - wykład 12 -

JIP. Analiza składni, gramatyki

Hierarchia Chomsky ego Maszyna Turinga

Jaki język zrozumie automat?

Spis treści. Wprowadzenie 15

ForPascal Interpreter języka Pascal

2.2. Gramatyki, wyprowadzenia, hierarchia Chomsky'ego

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

Gramatyki, wyprowadzenia, hierarchia Chomsky ego. Gramatyka

Języki formalne i automaty Ćwiczenia 4

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

PRZEWODNIK PO PRZEDMIOCIE

Wybrane narzędzia do tworzenia analizatorów leksykalnych i składniowych w C/C++ Narzędzia, zastosowanie oraz próby rankingu.

Wstęp do Informatyki. Program, proces tworzenia programu Środowisko programistyczne Języki programowania

Elementy kognitywistyki II: Sztuczna inteligencja. WYKŁAD IX: Agent przetwarza język naturalny

Języki i gramatyki formalne

JAO - Wprowadzenie do Gramatyk bezkontekstowych

Tworzenie języków specyfikacji dla zagadnień numerycznych

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

PRZEWODNIK PO PRZEDMIOCIE

Metody Kompilacji Wykład 13

Podstawy Programowania

O (o)programowaniu. R. Robert Gajewski omklnx.il.pw.edu.pl/~rgajewski

Podstawy Kompilatorów

Generator skanerów Flex

Aproksymacja funkcji a regresja symboliczna

Opis efektów kształcenia dla modułu zajęć

Algorytmy i struktury danych

PARADYGMATY PROGRAMOWANIA Wykład 4

Transkrypt:

Plan wykładu (1) Paweł J. Matuszyk AGH Kraków 1 2 tor leksykalny tor syntaktyczny Generator pośredniego Generator wynikowego Hopcroft J. E., Ullman J. D., Wprowadzenie do teorii automatów, języków i obliczeń, PWN, Blikle A., Automaty i gramatyki, PWN, 1971. Kowalski St., Mostowski A. Wł., Teoria automatów i lingwistyka matematyczna, PWN, 1979. 1994. Blikle A., Wybrane zagadnienia lingwistyki matematycznej, w: Problemy przetwarzania informacji, tom 2, praca zbiorowa pod red. A. Mazurkiewicza, WNT 1974. Aho A.V., Ullman J.D., The Theory of Parsing, Translation and Compiling, Prentice-Hall, 1972. Foster J.M., Automatyczna analiza składniowa, 1976. Gries D., Konstrukcja translatorów dla maszyn cyfrowych, 1984. Hopgood F.R.A., Metody kompilacji, 1982. Waite W.M., Goos G., Konstrukcja kompilatorów, WNT, 1989. Aho A.V., Sethi R., Ullman J.D., Compiler: Principles, Techniques and Tools, Addison-Wesley, 1986. Translator program, który umożliwia wykonanie programów napisanych w języku różnym od języka komputera. Wyróżniamy dwa rodzaje translatorów: to programy, które tłumacza program źródłowy na równoważny program wynikowy. Interpretery które można nazwać dynamicznymi translatorami tłumacza na bieżaco i wykonuja program źródłowy.

Kompilator Podstawowe cechy Interpreter Podstawowe cechy Program źródłowy jest napisany w języku źródłowym, a program wynikowy należy do języka wynikowego. Wykonanie programu kompilatora następuje w czasie tłumaczenia. Program po przetłumaczeniu nie da się zmienić, jest statyczny. Kompilator jako dane wejściowe otrzymuje cały program źródłowy i przekształca go na postać wynikowa. Działanie interpretera polega na: Cechy: wyodrębnieniu niewielkich jednostek programu źródłowego, tłumaczeniu ich na pewna postać wynikowa oraz natychmiastowym ich wykonywaniu. Proces interpretacji jest cykliczny. W czasie interpretacji przechowywany jest program źródłowy. Zalety Konstrukcja kompilatora Program wynikowy wykonuje się szybciej. Do wykonania programu wynikowego nie jest potrzebny kompilator. Lepsza optymalizacja (optymalizacja dedykowa- na pod dana architekturę). Interpretery Łatwość zmian programu. Mniejsza zajętość pamięci zewnętrznej (tylko tekst źródłowy). Możliwość pracy konwersacyjnej (zatrzymanie wyk., zmiana wartości zmiennych, kontynuacja wyk.). Przenośność, wykorzystanie w zastosowaniach sieciowych. Program zrodlowy SKANER leksykalna PARSER skladniowa semantyczna KOMPILATOR GENERA- TOR 1 Generacja posredniego Tablice zmiennych, stalych, etykiet, itp. Synteza OPTYMALI- ZATOR Optymalizacja posredniego GENERA- TOR 2 Generacja wynikowego Program wynikowy

Etap analizy tor leksykalny Na czym polega analiza leksykalna? Skaner dostajac na wejściu ciag znaków przetwarza je i produkuje ciag tokenów. Rozdzielenie etapu analizy na dwie odrębne funkcje: analizę leksykalna oraz analizę syntaktyczna sprawia, że jedna i druga moga być wykonywane przy użyciu bardziej efektywnych algorytmów, gdyż algorytmy te istotnie się różnia, wykorzystujac inne pryncypia formalne i realizacyjne. Przykład we: koszt := (cena + VAT) * 0.99; wy: id1 := ( id2 + id3 ) * num4 Nazwa Typ Informacje koszt variable zmienna_pozycyjna cena variable zmienna_pozycyjna VAT variable zmienna_pozycyjna 0.99 constant zmienna_pozycyjna Tablica: Tablica symboli tor leksykalny Zadania skanera tor leksykalny Tokeny, leksemy, wzorce const double PI=3.1415; wyodrębnianie tokenów, ignorowanie komentarzy, ignorowanie białych znaków, korelowanie błędów zgłaszanych przez kompilator z numerami linii, tworzenie kopii zbioru wejściowego łacznie z komunikatami o błędach, preprocessing. leksemy: const double PI = 3.1415 tokeny: const double id relop number Wzorce: Tokeny: sa opisami sposobu wyodrębniania tokenów, pełnia role produkcji w gramatykach leksykalnych. sa symbolami nieterminalnymi w gramatykach leksykalnych, s a symbolami terminalnymi w gramatykach syntaktycznych.

tor syntaktyczny Zadania parsera Ma za zadanie dokonać rozbioru syntaktycznego tekstu źródłowego analizowanego programu. Pracuje na podstawie gramatyki syntaktycznej, która na ogół jest gramatyka bezkontekstowa. Od parsera oczekujemy odtworzenia wywodu i jakiegoś zanotowania tego wywodu najczęściej stosowanym sposobem notowania wyprowadzenia jest podanie ciagu numerów produkcji. Niekiedy równolegle z analiza syntaktyczna parser wykonuje pewne akcje semantyczne jak np. generowanie pośredniego w postaci ONP, tetrad (n-tek), itd. analiza semantyczna = kontrola statyczna Kontrola statyczna, a w szczególności także kontrola typów może być przeprowadzana (przynajmniej częściowo) równolegle z parsingiem i/lub generacja pośredniego albo niezależnie, jak na schemacie poniżej. Parser Static checker Intermediate code generator Zadania analizatora semantycznego Generator pośredniego Generacja pośredniego Kontrola typów (type checking) np. czy operatory nie sa zastosowane do nieodpowiednich operandów; Kontrola przebiegu sterowania (flow-of-control-checking) kompilator musi sprawdzić, czy sterowanie w programie jest przekazywane w odpowiednie miejsce (np. czy nie jest wykonywany skok spoza pętli do jej wnętrza); Kontrola unikalności (uniqueness checking) kompilator powinien sprawdzić, czy pewne obiekty sa definiowane w programie tylko jeden raz; Kontrola powtarzalności nazw (name-related checking) kompilator powinien sprawdzić, czy w pewnych konstrukcjach określona nazwa pojawia się więcej niż jeden raz. Kod pośredni jest z reguły niezależny sprzętowo. Przyczyny jego stosowania: Łatwość generowania kompilatorów tego samego języka dla różnych maszyn. Łatwość przeprowadzania optymalizacji na bazie pośredniego niezależnie od sprzętu. Języki pośredniego s a językami dla pewnej maszyny abstrakcyjnej: Odwrotna notacja polska (notacja postfiksowa) maszyna stosowa. Drzewa syntaktyczne lub grafy skierowane acykliczne. Kod trójadresowy.

Generator wynikowego Generacja wynikowego Problem generacji optymalnego zależnego sprzętowo jest matematycznie nierozwiazywalny badź też praktycznie niemożliwy do rozwiazania. Dlatego też w praktyce zadowalamy się technikami heurystycznymi dajacymi dobry kod, ale nie zawsze optymalny.