Podstawy Kompilatorów

Podobne dokumenty
Podstawy Kompilatorów

L E X. Generator analizatorów leksykalnych

Generator analizatorów leksykalnych - Lex. Bartosz Bogacki.

Ćwiczenia nr 11. Translatory. Wprowadzenie teoretyczne

Wstęp do programowania INP003203L rok akademicki 2016/17 semestr zimowy. Laboratorium 1. Karol Tarnowski A-1 p.

Podstawy Kompilatorów

Podstawy generatora YACC. Bartosz Bogacki.

Podstawy Kompilatorów

KONSTRUKCJA KOMPILATORÓW

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

Analiza leksykalna i generator LEX

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

Języki formalne i gramatyki

Matematyczne Podstawy Informatyki

Wstęp do programowania. Wykład 1

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 1. Karol Tarnowski A-1 p.

Flex - generator analizatorów leksykalnych

Zadanie analizy leksykalnej

Podstawy Kompilatorów

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Generator skanerów Flex

Utworzenie pliku. Dowiesz się:

Układy VLSI Bramki 1.0

1 Podstawy c++ w pigułce.

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

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

Programowanie w języku Python. Grażyna Koba

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

Zajęcia 6 pliki tekstowe

1 Podstawy c++ w pigułce.

Arkusz zawiera informacje prawnie chronione do momentu rozpoczęcia egzaminu.

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

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

JĘZYK SHELL JEST PEŁNYM JĘZYKIEM PROGRAMOWANIA

Generatory analizatorów

Programy pomocnicze: diff, make, systemy rcs i cvs, debugger. Zarządzanie wersjami.

Warsztaty dla nauczycieli

Instytut Fizyki Politechniki Łódzkiej Laboratorium Metod Analizy Danych Doświadczalnych Ćwiczenie 3 Generator liczb losowych o rozkładzie Rayleigha.

System operacyjny Linux

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Laboratorium 1. I. Zainstaluj program Eclipse (wersja C/C++ w odpowiednim systemie operacyjnym

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Here comes the sun. Wyk lad niesystematyczny. Marcin Makowski. 24 października Zak lad Chemii Teoretycznej UJ

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

Języki programowania zasady ich tworzenia

Laboratorium z użyciem analizatora leksykalnego FLEX

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

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

Języki formalne i automaty Ćwiczenia 6

Metody Kompilacji Wykład 1 Wstęp

Wstęp do systemu Linux

Zajęcia P2AM. Analizator składniowy (Flex + Bison, Linux)

Programowanie obiektowe

Wstęp do Programowania, laboratorium 02

XML i nowoczesne technologie zarządzania treścią 2007/08

Wprowadzenie do kompilatorów

Przedstawię teraz tzw. podstawowe symbole wyrażenia regularne (BRE, Basic Regular Expression)

Arkusz zawiera informacje prawnie chronione do momentu rozpoczęcia egzaminu.

ForPascal Interpreter języka Pascal

Języki formalne i techniki translacji

Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:

edistro.pl Spis treści

Programy użytkowe (utilities)

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

Wprowadzenie do języka Java

Język C i C++. Podstawy. Zagadnienia do opanowania. Przykład 1. (modyfikuj kod, aby zrealizować punkty 5., 7.)

SED - Stream EDitor. edytor strumieniowy. Bogumił Konopka W-11/I-21 Politechnika Wrocławska

Podstawy systemu L A TEX część 2

Programowanie obiektowe zastosowanie języka Java SE

Podstawy Informatyki Wprowadzenie do języka C dr inż. Jarosław Bułat

EGZAMIN MATURALNY Z INFORMATYKI

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

INFORMATYKA Studia Niestacjonarne Elektrotechnika

CitiDirect Ewolucja Bankowości

LeftHand Sp. z o. o.

Program wykonujący operację na plikach powinien zachować schemat działania zapewniający poprawną pracę:

Języki programowania deklaratywnego

Zadanie 2: Arytmetyka symboli

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Monika Wrzosek (IM UG) Programowanie obiektowe 21 / 25

Polcode Code Contest PHP-10.09

Programowanie komputerów

AKADEMIA MORSKA W SZCZECINIE WI-ET / IIT / ZTT. Instrukcja do zajęc laboratoryjnych nr 1 AUTOMATYZACJA I ROBOTYZACJA PROCESÓW PRODUKCYJNYCH

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

Powtórka algorytmów. Wprowadzenie do języka Java.

Ilość cyfr liczby naturalnej

Programowanie I C / C++ laboratorium 01 Organizacja zajęć

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Język C zajęcia nr 7. Uwagi dotyczące stylu programowania

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH

Praca w środowisku Visual Studio 2008, Visual C

Komunikacja człowiek-komputer

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 7. Karol Tarnowski A-1 p.

Kurs walut. Specyfikacja projektu. Marek Zając

Napisy w PHP. Drukowanie napisów instrukcją echo

Transkrypt:

Podstawy Kompilatorów Laboratorium 3 Uwaga: Do wykonania poniższych zadań związanych z implementacją niezbędny jest program LEX oraz kompilator. Dla środowiska Linux mogą to być: Darmowa wersja generatora analizatorów leksykalnych - FLEX, dostępna na stronie: http://www.gnu.org/software/flex Kompilator GCC, do pobrania na stronie: http://gcc.gnu.org/ Dla środowiska Windows zalecane jest środowisko cygwin zawierające w swoich pakietach zarówno program FLEX, jak i kompilator GCC. Środowisko można pobrać za darmo ze strony: http://www.cygwin.com/ Wprowadzenie Program LEX służy do pisania analizatorów leksykalnych. Generuje on z pliku przygotowanego przez użytkownika i zawierającego reguły przetwarzania - kod źródłowy analizatora w języku C. Wygenerowany plik analizatora należy skompilować a następnie uruchomić przesyłając jako strumień danych wejściowych plik z danymi do analizy. Przykładowa sekwencja poleceń prowadzących do wygenerowania analizatora może wyglądać następująco: flex -oscan.c scan.l gcc scan.c -lfl -o scan.exe Dla analizatora o nazwie scan.exe plik z danymi wejściowymi dane.txt będzie przesłany na wejście następująco: scan.exe < dane.txt Oto szkielet pliku ze specyfikacją dla generatora analizatorów FLEX: a {puts("znaleziono litere a");} Zadania do wykonania

Zad. 1: Proszę napisać wyrażenia regularne w konwencji programu LEX, do których będą pasowały następujące napisy: ciąg znaków john doe pojedyncza spacja ciąg znaków john lub ciąg znaków doe dowolny pojedynczy znak różny od symbolu \n napis utworzony z jednego lub więcej dowolnych znaków różnych od \n napis utworzony z zera lub więcej dowolnych znaków różnych od \n napis utworzony z zera lub jednego z dowolnych znaków różnych od \n napis utworzony z jednego lub więcej znaków z klasy składającej się ze znaków od a do z napis utworzony z zera lub więcej znaków z klasy składającej się ze wszystkich znaków oprócz liter A, B oraz C Zad. 2: Jakie dane wejściowe zostaną dopasowane do poniższych wyrażeń regularnych? a) \++\** b) \n c) [a-za-z_][a-za-z0-9_]* Zad. 3: Proszę napisać za pomocą generatora LEX program usuwania wszystkich początkowych spacji w każdym wierszu. Na przykład, jeśli plik wejściowy ma postać: 12345 abc ; 345 abc ; :-) :-( ;-) :-) :-( to na wyjściu powinniśmy otrzymać: 12345 abc ; 345 abc ; :-) :-( ;-) :-) :-(

Zad. 4: Plik wejściowy ma postać ciągu wierszy. Jeśli w danym wierszu występuje tylko jedna liczba i ewentualnie spacje przed i po liczbie, to należy sprawdzić czy jest to liczba podzielna przez 5 i jeśli tak, to na końcu wiersza dopisać "(+)", a jeśli nie to "(-)". Jeśli wiersz ma inną konstrukcję, to należy go przepisać bez zmian. Na przykład, jeśli plik wejściowy będzie miał postać (w drugim wierszu po liczbie 12 występują jeszcze trzy spacje): 12 15 20 a= 20 to na wyjściu powinniśmy otrzymać: 12 (-) 15(+) 20(+) a= 20 Uwaga! Program powinien działać poprawnie również dla wejścia: 5555555555555555555555555555555555555555555 1111111111111111111111111111111111 Dla którego na wyjściu powinniśmy otrzymać: 5555555555555555555555555555555555555555555(+) 1111111111111111111111111111111111(-) Zad. 5: Identyfikator to niepusty ciąg znaków zaczynający się od litery lub znaku "_". Dalej mogą następować litery, cyfry i znaki "_". Napisać w LEXie program prostego analizatora leksykalnego dla podzbioru języka Pascal rozpoznający identyfikatory i słowa kluczowe begin i end. Należy przyjąć, że duże i małe litery nie są rozróżniane. W przypadku rozpoznania identyfikatora należy wydrukować na wyjściu ID, a w przypadku słowa kluczowego KWD. Na przykład dla pliku wejściowego: begin abra ka := dabra EnD powinniśmy otrzymać: KWD ID ID := ID KWD

Odpowiedzi do zadań Zad. 1: john doe john doe..+.*.? [a-z]+ [^ABC]* Zad. 2: a) +, ++, +++, +*, ++*, +++*, +**, ++**, ++***,... b) \n (symbol końca linii) c) Napis będący identyfikatorem języka C, czyli np.: funkcja, id, _nazwa, zmienna_1, i, main,... Zad. 3: ^" "+ Zad. 4: ^[ \t]*[0-9]*[1-46-9][ \t]*$ printf ("%s(-)", yytext); ^[ \t]*[0-9]*[05][ \t]*$ printf ("%s(+)", yytext);

Zad. 5: [a-za-z_][a-za-z0-9_]* [Bb][Ee][Gg][Ii][Nn] [Ee][Nn][Dd] printf ("ID"); printf ("KWD");