Wprowadzenie do kompilatorów



Podobne dokumenty
Gramatyki regularne i automaty skoczone

Metody Kompilacji Wykład 1 Wstęp

Optymalizacja oprogramowania - wprowadzenie

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

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

Proces tworzenia programu:

Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1

Temat: Programowanie zdarzeniowe. Zdarzenia: delegacje, wykorzystywanie zdarze. Elementy Windows Application (WPF Windows Presentation Foundation).

Kurs programowania. Wykład 12. Wojciech Macyna. 7 czerwca 2017

Zadanie analizy leksykalnej

Podstawy programowania III WYKŁAD 4

Programowanie C# mgr in. Dariusz Ku. p. 119A

Wykład 1 Inżynieria Oprogramowania

Podstawy Kompilatorów

L E X. Generator analizatorów leksykalnych

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

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

Programowanie obiektowe zastosowanie języka Java SE

10. Translacja sterowana składnią i YACC

KONSTRUKCJA KOMPILATORÓW

Generatory analizatorów

Program We Kompilator Wy Źródłowy

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

Matematyczne Podstawy Informatyki

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

Wprowadzanie i zmiany faktur z zakupu, wydruk rejestru zakupu

Metody Kompilacji Wykład 7 Analiza Syntaktyczna

Tutorial prowadzi przez kolejne etapy tworzenia projektu począwszy od zdefiniowania przypadków użycia, a skończywszy na konfiguracji i uruchomieniu.

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

Typy bazy danych Textract

Diagramy czynności Na podstawie UML 2.0 Tutorial

Gramatyki atrybutywne

Analiza semantyczna. Gramatyka atrybutywna

Języki formalne i gramatyki

Inżynieria Programowania - Projektowanie architektoniczne

Kierunek:Informatyka- - inż., rok I specjalność: Grafika komputerowa, Inżynieria oprogramowania, Technologie internetowe

Podstawy generatora YACC. Bartosz Bogacki.

Wprowadzenie do analizy składniowej. Bartosz Bogacki.

Matematyczne Podstawy Informatyki

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Analiza leksykalna i generator LEX

Analizator syntaktyczny

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 3. Karol Tarnowski A-1 p.

Obiektowa implementacja parsera klasy LL(1)

TECHNOLOGIE OBIEKTOWE WYKŁAD 2. Anna Mroczek

Diagram Przepływu Danych - podstawowe bloki składowe i reguły konstrukcji

Zofia Kruczkiewicz - Modelowanie i analiza systemów informatycznych 2

Szablony funkcji i klas (templates)

Języki programowania zasady ich tworzenia

Semantyka i Weryfikacja Programów - Laboratorium 6

INŻYNIERIA OPROGRAMOWANIA. laboratorium

Matematyczne Podstawy Informatyki

Programowanie komputerów

EC4P Pierwszy program w 6 krokach

Inynieria oprogramowania Lecture XXX. Java TM cz IV: IO. Bartosz Walter

Uproszczony schemat działania kompilatora

PRZEWODNIK PO PRZEDMIOCIE

Kierunek:Informatyka- - inż., rok I specjalność: Grafika komputerowa

.! $ Stos jest list z trzema operacjami: dodawanie elementów na wierzch stosu, zdejmowanie elementu z wierzchu stosu, sprawdzanie czy stos jest pusty.

Uproszczony schemat działania kompilatora

MiASI. Modelowanie analityczne. Piotr Fulma«ski. 18 stycznia Wydziaª Matematyki i Informatyki, Uniwersytet Šódzki, Polska

Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 1

Języki i paradygmaty programowania - 1

Podstawy Kompilatorów

LABORATORIUM INFORMATYKI 0

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

Autor: Bączkowski Karol Promotor: dr inż. Paweł FIGAT

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Programowanie Obiektowe

Wstęp do programowania

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

Proporcje podziału godzin na poszczególne bloki. Tematyka lekcji. Rok I. Liczba godzin. Blok

Podstawy i języki programowania

Języki i paradygmaty programowania doc. dr inż. Tadeusz Jeleniewski

Podstawowe elementy GUI cz. 2 i 3 - zadania

Programowanie obiektowe

Spis treúci. 1. Wprowadzenie... 13

PROGRAM NAUCZANIA DLA I I II KLASY GIMNAZJUM

Programowanie obiektowe

Inżynieria oprogramowania

Generator recept. Program pomagający tworzyć wypełnione wydruki recept lekarskich. Instrukcja obsługi użytkownika

Metodologie programowania

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

Sposoby przekazywania parametrów w metodach.

Przetwarzanie sygnaªów

Architektura Systemu. Architektura systemu umożliwia kontrolowanie iteracyjnego i przyrostowego procesu tworzenia systemu.

POZNA SUPERCOMPUTING AND NETWORKING. Podstawy optymalizacji kodu ródłowego

Zasady programowania Dokumentacja

Technologie obiektowe

3. Instalator rozpocznie proces instalacji

Ćwiczenie 1. Przygotowanie środowiska JAVA

Standardy programowania protokołów komunikacyjnych Laboratorium nr 5 komunikacja multicastowa IPv6

Grupy pytań na egzamin magisterski na kierunku Informatyka (dla studentów dziennych studiów II stopnia)

Wykład 10. Translacja sterowana składnią

Podstawy inżynierii oprogramowania

1. Wprowadzenie do C/C++

Podstawy programowania

Języki formalne i automaty Ćwiczenia 1

System midzybankowej informacji gospodarczej Dokumenty Zastrzeone MIG DZ ver Aplikacja WWW ver. 2.1 Instrukcja Obsługi

Transkrypt:

Wprowadzenie do kompilatorów Czy ja kiedykolwiek napisz jaki kompilator? Jakie zadania ma do wykonania kompilator? Czy jzyk formalny to rodzaj jzyka programowania? Co to jest UML?, Czy ja kiedykolwiek napisz jaki kompilator? PRAWDOPODOBNIE NIE! Ale Dua cz oprogramowania wykorzystuje wiele elementów teorii kompilacji, np.: gramatyki regularne uywane s do wyszukiwania tekstu; automaty skoczone s powszechnie wykorzystywane podczas projektowania oprogramowania; jzyki formalne mog by uyte do opisu danych wprowadzanych przez uytkownika. Kompilator jest dobrym przykładem duego systemu oprogramowania. Techniki stosowane do konstrukcji kompilatorów stosowane s te podczas konstrukcji innych systemów. W prowadzenie do kompilatorów 1

Jakie zadania ma do wykonania kompilator? Kod ródłowy? Kod wynikowy Komunikaty o błdach Kompilator przetwarza kod zapisany w jzyku ródłowym na kod zapisany w jzyku wynikowym zgłaszajc odpowiednie komunikaty. Dla uytkownika kompilator stanowi czarn skrzynk działajc w sposób automatyczny. Niniejszy wykład ma za zadanie pokaza, jak ta skrzynka wyglda od rodka (jak zbudowa tak skrzynk). Z kim komunikuje si kompilator? Kompilator przyjmuje od jakiej Aplikacji komunikaty wykonania kompilacji (). Aplikacja Okienka Kompilator wysyła do Okienek polecenia pokazania komunikatu (Komunikaty). Komunikaty Komunikaty Kompilator wysyła do SystemuPlików polecenia pobrania z pliku kodu ródłowego (Wejcie). Kompilator Wejcie Wyjcie Kompilator wysyła do SystemuPlików polecenia zapisania do pliku kodu wynikowego (Wyjcie). Wejcie SystemPlików Wyjcie W prowadzenie do kompilatorów 2

Jak si zachowuje kompilator? Kompilator dostaje od Aplikacji komunikat z daniem dokonania translacji. Kompilator wykonuje translacj współpracujc z SystememPlików i Okienkami. Aplikacja 1: transluj(nazwa_pliku) 2: kom_rozpoczcia() 3: otwórz(nazwa_pliku) 5: pobierz_znaki(): char 6: zamknij() Kompilator 4: kom_postpu() 10: kom_zakoczenia() 7: otwórz(nazwa_pliku) 8: zapisz_kod(warto) 9: zamknij() Okienka System Plików Z czego si składa kompilator? słuy do wstpnego przygotowania tekstu ródłowego. słuy do analizy kodu ródłowego. Generator słuy do generacji kodu wynikowego. Czego brakuje: obsługa błdów. Komunikaty Kompilator Generator PobieranieZnaków GeneracjaKodu Wejcie Wyjcie W prowadzenie do kompilatorów 3

Jak działa kompilator? (sterowanie) zarzdza kompilacj dokonujc analizy kodu ródłowego. Tekst ródłowy pobiera z a, który go wstpnie przygotowuje. Dane do generacji kodu przekazywane s Generatorowi, który na podstawie tych danych generuje kod. 1: transluj(nazwa_pliku) 2: pobierz_znak() 5: wstaw_wzeł(wzeł) Generator 3: pobierz_znak() 5:zapisz_kod(warto) :byte System Plików Jak działa kompilator? (przepływ danych) odczytuje znaki z rónych plików i przekształca w jeden cigły strumie znaków. odczytuje znaki ze strumienia znaków i sprawdza zgodno z jzykiem. w odpowiednich momentach podczas analizy tworzy wzły dla generatora. Generator otrzymuje wzły i wstawia je w odpowiednie struktury danych. Po zbudowaniu odpowiednich struktur, generator tworzy cig wartoci i wstawia je do plików. :byte Generator W prowadzenie do kompilatorów 4

Jakie struktury danych wystpuj w kompilatorze? cig znaków cig leksemów (symboli leksykalnych) i tablica symboli drzewo wzłów Tablica symboli + wstaw_symbol() + podaj_symbol() 0..* Symbol - typ: int - id: int - nazwa: String Wzeł +lewy 1 - atrubut: 1 Leksem - typ: int - warto: +prawy 1 Kompilator:: Kompilator:: :Tablica symboli Kompilator::Generator Jak wyglda przykładowa translacja? drugi.c x:=i+1; pierwszy.c i:=1; #include<drugi.c> b:=a(x); i typ= kon_instr : = 1 ; typ=liczba warto=1,0 typ=podst x : = i typ=ident warto=23 + typ=ident warto=23 W prowadzenie do kompilatorów 5

Czy jzyk formalny to taki rodzaj jzyka programowania? OCZYWICIE, NIE! Jzyk formalny (gramatyka formalna) to sposób zapisu struktury programu (składni jzyka ródłowego) uywany m.in. podczas konstrukcji analizatorów. Gramatyki regularne Gramatyki bezkontekstowe leksykalny Składniowy Jak projektowa kompilatory? Diagramy z poprzednich slajdów pokazuj struktur kompilatora w formie współpracujcych ze sob komponentów. Kady komponent moe stanowi klas w rozumieniu obiektowym. Kompilator jest jednym z przykładów aplikacji, które mona zbudowa (zanalizowa i zaprojektowa) w sposób obiektowy. Projektowanie kompilatora powinno odbywa si w sposób graficzny. Graficznym jzykiem do analizy i projektowania systemów jest UML. UML jest w tej chwili standardem modelowania obiektowego. W prowadzenie do kompilatorów 6

Jak wyglda jzyk UML? Podstawowym elementem jest klasa. gra :Aplikacja : :SystemPlików :Komunikaty Komponenty to te klasy. transluj() transluj() kom_rozpoczcia() Komponenty i klasy mog posiada interfejsy. kom_zakoczenia() Obiekty klas wystpuj na diagramach pokazujcych dynamik. Leksem a :SystemPlików - typ: int - warto: b Kompilator:: Co dalej? Jak zaprojektowa kompilator? Diagramy klas podstawowe składniki programu kompilatora Diagramy sekwencji opis dynamiki działania kompilatora Jak działa preprocesor? Jak działa analizator? Gramatyki regularne opis struktury pojedynczych symboli leksykalny komponent łczcy znaki w symbole Gramatyki bezkontekstowe opis struktury jzyka składniowy komponent sprawdzajcy poprawno kodu y LL analiza zstpujca y LR analiza wstpujca Jak generowa kod? W prowadzenie do kompilatorów 7