Podstawy Kompilatorów

Podobne dokumenty
Podstawy Kompilatorów

Podstawy Kompilatorów

Podstawy generatora YACC. Bartosz Bogacki.

Ćwiczenia nr 11. Translatory. Wprowadzenie teoretyczne

Podstawy Kompilatorów

Języki formalne i gramatyki

Podstawy Kompilatorów

L E X. Generator analizatorów leksykalnych

Generator analizatorów leksykalnych - Lex. Bartosz Bogacki.

KONSTRUKCJA KOMPILATORÓW

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

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

Utworzenie pliku. Dowiesz się:

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

Analiza leksykalna i generator LEX

Podstawy Kompilatorów

10. Translacja sterowana składnią i YACC

Generatory analizatorów

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

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

Generator skanerów Flex

Wstęp do Programowania, laboratorium 02

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

IBM SPSS Statistics - Essentials for R: Instrukcje instalacji dla Linux

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI

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

Bison - generator analizatorów składniowych

Wstęp do programowania. Wykład 1

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

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

Flex - generator analizatorów leksykalnych

Wstęp do programowania

Programowanie proceduralne w języku C++ Podstawy

PARADYGMATY I JĘZYKI PROGRAMOWANIA. lex/flex i yacc/bison w- 4 (2014)

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

Map Reduce Wprowadzenie do Apache Hadoop

EGZAMIN MATURALNY Z INFORMATYKI

EGZAMIN MATURALNY Z INFORMATYKI MAJ 2010 POZIOM ROZSZERZONY CZĘŚĆ I WYBRANE: Czas pracy: 90 minut. Liczba punktów do uzyskania: 20 WPISUJE ZDAJĄCY

Monika Wrzosek (IM UG) Programowanie obiektowe 21 / 25

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

Metody Kompilacji Wykład 1 Wstęp

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

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

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

EGZAMIN MATURALNY Z INFORMATYKI

Podstawy programowania - 1

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

1 Podstawy c++ w pigułce.

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!

Python jest interpreterem poleceń. Mamy dwie możliwości wydawania owych poleceń:

ZYKI BEZKONTEKSTOWE (KLASA

Python wstęp. Michał Bereta

SIP Studia Podyplomowe Ćwiczenie laboratoryjne Instrukcja

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

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Tworzenie nowego projektu w asemblerze dla mikroprocesora z rodziny 8051

EGZAMIN MATURALNY Z INFORMATYKI 19 MAJA 2015 POZIOM PODSTAWOWY. Godzina rozpoczęcia: 9:00 CZĘŚĆ I WYBRANE: Czas pracy: 75 minut

3. Instrukcje warunkowe

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Translacja sterowana składnią w generatorze YACC

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Podstawy i języki programowania

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

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

LeftHand Sp. z o. o.

Wprowadzenie do analizy leksykalnej. Bartosz Bogacki.

Kod (file_code.bin) Dane wyjściowe (file_data_out.bin) Wirtualny procesor. Dane wejściowe (file_data_in.bin)

Wprowadzenie do języka Java

Podstawy kompilatorów. Generator LLgen. Wojciech Complak.

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

1 Podstawy c++ w pigułce.

Laboratorium z użyciem analizatora leksykalnego FLEX

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

Sposoby wykrywania i usuwania błędów. Tomasz Borzyszkowski

Wprowadzenie do kompilatorów

Instalacja środowiska MPI w systemie operacyjnym Linux

Laboratorium. Szyfrowanie algorytmami Vernam a oraz Vigenere a z wykorzystaniem systemu zaimplementowanego w układzie

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?

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

EGZAMIN MATURALNY Z INFORMATYKI 19 MAJA 2015 POZIOM PODSTAWOWY. Godzina rozpoczęcia: 9:00 CZĘŚĆ I WYBRANE: Czas pracy: 75 minut

Problemy techniczne. Jak udostępnić dane na potrzeby wykonania usługi wdrożeniowej? Zabezpieczanie plików hasłem

Dokumentacja smsapi wersja 1.4

IBM SPSS Statistics - Essentials for R: Instrukcje instalacji dla Windows

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 8. Karol Tarnowski A-1 p.

Aktualizacji umów niewygasających - instrukcja

EGZAMIN MATURALNY Z INFORMATYKI 13 MAJA 2019 POZIOM PODSTAWOWY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I WYBRANE: Czas pracy: 75 minut

Programowanie mikrokontrolerów AVR

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Podstawy programowania

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

3 Przygotował: mgr inż. Maciej Lasota

EGZAMIN MATURALNY Z INFORMATYKI CZERWIEC 2011 POZIOM PODSTAWOWY CZĘŚĆ I WYBRANE: Czas pracy: 75 minut. Liczba punktów do uzyskania: 20 WPISUJE ZDAJĄCY

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

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

Wprowadzenie do środowiska Qt Creator

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

Generator YACC: gramatyki niejednoznaczne

Podstawy programowania (1)

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

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

Transkrypt:

Podstawy Kompilatorów Laboratorium 9 Uwaga: Do wykonania poniższych zadań związanych z implementacją niezbędny jest program LEX, program YACC oraz kompilator języka C. Dla środowiska Linux mogą to być: Darmowa wersja generatora analizatorów leksykalnych - FLEX, dostępna na stronie: http://www.gnu.org/software/flex Darmowa wersja generatora analizatorów składniowych BISON, dostępna na stronie: http://www.gnu.org/software/bison/ 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 YACC jest generatorem analizatorów składniowych. Na podstawie specyfikacji dostarczonej przez użytkownika można za jego pomocą wygenerować plik źródłowy w języku C zawierający kod analizatora składniowego. Kod taki należy skompilować do postaci binarnej a następnie uruchomić przekazując dane wejściowe jako strumień wejściowy. Przykładowo dla specyfikacji gram.y możemy wygenerować plik gram.c a następnie skompilować go do gram.exe. Przykładowa sekwencja poleceń prowadzących do wygenerowania analizatora może wyglądać następująco: bison gram.y -d -o gram.c gcc gram.c -o parser.exe Dla analizatora o nazwie parser.exe plik z danymi wejściowymi dane.txt będzie przesłany na wejście następująco: parser.exe < dane.txt Jeżeli dodatkowo jako generator analizatora leksykalnego użyty zostanie program LEX to odpowiednia sekwencja wyglądać będzie następująco: bison gram.y -d -o gram.c flex -oscan.c scan.l gcc scan.c gram.c O3 lfl -o parser.exe parser.exe < dane.txt

Oto szkielety plików ze specyfikacją dla współpracujących ze sobą generatora analizatorów leksykalnych FLEX oraz generatora analizatorów składniowych BISON: scan.l: % #include "gram.h" % gram.y: % % prf ("ERROR!\n") exit(-1) yyparse ()

Zadania do wykonania Przyjmijmy dla uproszczenia, że analizator leksykalny (plik scan.l) we wszystkich zadaniach ma następującą postać: % #include "gram.h" %. return yytext[0] Zad. 1: Proszę napisać specyfikację dla programu YACC będącą akceptorem języka a n b n, gdzie n > 0. Jeśli na wejściu pojawi się napis należący do tego języka, program powinien wypisać OK.. W przeciwnym razie powinien wypisać ERROR! Zad. 2: Proszę napisać specyfikację dla programu YACC będącą akceptorem języka a n b m c n, gdzie n > 0, m >= 0. Jeśli na wejściu pojawi się napis należący do tego języka, program powinien wypisać OK.. W przeciwnym razie powinien wypisać ERROR! Zad. 3: Proszę napisać specyfikację dla programu YACC będącą akceptorem języka a n b n c m d m, gdzie n > 0, m >= 0. Jeśli na wejściu pojawi się napis należący do tego języka, program powinien wypisać OK.. W przeciwnym razie powinien wypisać ERROR! Zad. 4: Napisać analizator sprawdzający czy dane wejściowe mają postać: c 1 c 2 gdzie c 1 jest łańcuchem cyfr oktalnych a c 2 jest lustrzanym odbiciem c 1. Oba łańcuchy mogą być puste - a więc plik składający się tylko ze znaku " " jest również poprawny. Także dane wejściowe: 123 321 są poprawne, ale 1234 3321 są błędne. Jeżeli dane wejściowe są poprawne analizator powinien dać odpowiedź "OK", a w przeciwnym przypadku "ERROR!".

Odpowiedzi do zadań Zad. 1: % % X: S puts("ok") S error yyerror() S: 'a' S 'b' 'a' 'b' prf ("ERROR!\n") exit(-1) yyparse ()

Zad. 2: % % X: S puts("ok") S error yyerror() S: 'a' S 'b' 'a' C 'b' C: C 'c' prf ("ERROR!\n") exit(-1) yyparse ()

Zad. 3: % % X: AB CD puts("ok") AB CD error yyerror() AB: 'a' AB 'b' 'a' 'b' CD: 'c' CD 'd' prf ("ERROR!\n") exit(-1) yyparse ()

Zad 4.: % % X: S puts("ok") S error yyerror() S : '0' S '0' '1' S '1' '2' S '2' '3' S '3' '4' S '4' '5' S '5' '6' S '6' '7' S '7' ' ' prf ("ERROR!\n") exit(-1) yyparse ()