Ćwiczenia nr 11. Translatory. Wprowadzenie teoretyczne

Podobne dokumenty
Języki formalne i gramatyki

Podstawy Kompilatorów

Podstawy Kompilatorów

Podstawy generatora YACC. Bartosz Bogacki.

Podstawy Kompilatorów

Podstawy Kompilatorów

Metody Kompilacji Wykład 13

Generatory analizatorów

Zestaw 1-1 Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.cpp)!!!

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

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

4. Funkcje. Przykłady

L E X. Generator analizatorów leksykalnych

I znowu można jak w C, za pomocą starych struktur i metod:

Analiza leksykalna i generator LEX

Języki programowania zasady ich tworzenia

Wstęp do Programowania, laboratorium 02

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Funkcje są prawdopodobnie najważniejszą częścią każdego poważnego programu (w każdym języku programowania).

1 Powtórzenie wiadomości

Laboratorium z użyciem analizatora leksykalnego FLEX

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

Lekcja 6: Pascal. Procedura i funkcja

Programowanie - wykład 4

Jerzy Nawrocki, Wprowadzenie do informatyki

2 Przygotował: mgr inż. Maciej Lasota

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

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

KONSTRUKCJA KOMPILATORÓW

Wstęp do programowania


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

Podstawy Kompilatorów

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

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

Skanowanie OCR w aplikacji Kancelaria Komornika. Instrukcja dla użytkownika

Laboratorium 6: Ciągi znaków. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Generator analizatorów leksykalnych - Lex. Bartosz Bogacki.

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

Języki formalne i automaty Ćwiczenia 6

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

Programowanie w Baltie klasa VII

Podstawowe typy zmiennych

Algorytmy od problemu do wyniku

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

Programowanie w języku Python. Grażyna Koba

Pliki wykład 2. Dorota Pylak

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Polcode Code Contest PHP-10.09

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

Pliki. Informacje ogólne. Obsługa plików w języku C

Języki i metodyka programowania. Wprowadzenie do języka C

Język C część 1. Sformułuj problem Zanalizuj go znajdź metodę rozwiązania (pomocny może byd algorytm) Napisz program Uruchom i przetestuj czy działa

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

10. Translacja sterowana składnią i YACC

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

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

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

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

BHP JĘZYK C - INSTRUKCJE ITERACYJNE

Metody Kompilacji Wykład 7 Analiza Syntaktyczna

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Jerzy Nawrocki, Wprowadzenie do informatyki

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

Nazwa implementacji: Nauka języka Python pętla for. Autor: Piotr Fiorek

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

EGZAMIN MATURALNY Z INFORMATYKI POZIOM PODSTAWOWY CZĘŚĆ II 13 MAJA 2019 WYBRANE: Czas pracy: 120 minut. Liczba punktów do uzyskania: 30

GRUPA ĆWICZENIOWA (ZAKREŚL ODPOWIEDNIĄ): MG8 MG13 MB13 MD13 BT13

Zadanie 4.3. (0 5) Błąd bezwzględny przybliżonej wartości liczby pi, wyznaczonej z n punktów, definiujemy następująco:

System operacyjny Linux

Zadanie analizy leksykalnej

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

Edytor tekstu MS Word 2010 PL. Edytor tekstu MS Word 2010 PL umożliwia wykonywanie działań matematycznych.

1 Wielokrotne powtarzanie tych samych operacji

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Języki programowania obiektowego Nieobiektowe elementy języka C++

Warto też w tym miejscu powiedzieć, że w C zero jest rozpoznawane jako fałsz, a wszystkie pozostałe wartości jako prawda.

Matematyczne Podstawy Informatyki

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

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Podstawy Kompilatorów

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

2. Zmienne i stałe. Przykłady Napisz program, który wypisze na ekran wynik dzielenia 281 i 117 w postaci liczby mieszanej (tj. 2 47/117).

Instrukcja warunkowa i złoŝona.

Generator YACC: gramatyki niejednoznaczne

Pzetestuj działanie pętli while i do...while na poniższym przykładzie:

EGZAMIN MATURALNY Z INFORMATYKI POZIOM PODSTAWOWY CZĘŚĆ II 11 MAJA 2018 WYBRANE: Czas pracy: 120 minut. Liczba punktów do uzyskania: 30

1 Podstawy c++ w pigułce.

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Jerzy Nawrocki, Wprowadzenie do informatyki

Podstawy Programowania

Podstawy programowania

Programowanie strukturalne i obiektowe

Laboratorium kryptograficzne dla licealistów 2

29. Poprawność składniowa i strukturalna dokumentu XML

Efektywna analiza składniowa GBK

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

Generator skanerów Flex

Języki formalne i automaty Ćwiczenia 7

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Transkrypt:

J.Nawrocki, M. Antczak, A. Hoffa, S. Wąsik Plik źródłowy: 08cw11-tr.doc; Data: 2009-01-15 09:47:00 Ćwiczenia nr 11 Translatory Wprowadzenie teoretyczne Wiele dokumentów wprowadzających do języków Lex oraz Yacc można znaleźć za pomocą wyszukiwarki Google. Przykładowo dość zwięzłe wprowadzenie w języku angielskim znajduje się na stronie http://ds9a.nl/lex-yacc/cvs/lex-yacc-howto.html. Obszerny opis generatora Lex w języku polskim znajduje się na stronie http://www.cs.put.poznan.pl/wcomplak/lexman/lexman.htm. Poniżej znajduje się przykładowy program w Lexie i Yaccu, które mogą służyć jako ściąga wymaganego formatu pliku. Ich dokładny opis znajduje się w materiale do poprzednich ćwiczeń. Plik scan.l: %% [0-7] {return yytext[0];} // gdy na wejściu znajduje się // cyfra [0-7] przekaż ją do // dalszego etapu analizy " " {return ' ';} // gdy na wejściu znajduje się // znak przekaż go do dalszego // etapu analizy. {YY_FATAL("ERR!");} // jeżeli na wejściu pojawi się // dowolny znak (. ), który nie // został obsłużony przez żadną z // powyższych reguł bazujących na // wzorcach to przerwij analizę // leksykalną z błędem // sygnalizujących błędnie // przygotowaną zawartość pliku // wejściowego Plik scan.y: %{ #include <stdio.h> // pliki nagłówkowe zawierające #include <dos.h> // funkcje, które będą używane #include <stdlib.h> // w dalszych sekcjach kodu #include <process.h> // źródłowego %} %start E // symbol startowy %% // rozpoczyna się sekcja gramatyki E : S {puts("syntax OK\n");} // potwierdź na wyjściu popr. skł. S error {yyerror();} // jeżeli są jakieś śmieci to źle ; S : '0' S '0' // kolejne reguły, które definiują '1' S '1' // poprawną składnię języka '2' S '2' // zdefiniowanego w treści zadania '3' S '3' '4' S '4' '5' S '5' '6' S '6' '7' S '7' ' '

; %% // impl. pokrywanych funkcji yacca void yyerror(char* msg) // kod funkcji, który zostanie { // wywołany w momencie, gdy printf("syntax error!\n"); // wyrażenia w pliku wejściowym exit(1); // nie będą się zgadzać składniowo } // z językiem z treści zadania Zadania Zad. 1. Napisz w LEX-ie program, który pominie w tekście wejściowym wszystkie identyfikatory języka Pascal nie zawierające się w zbiorze begin end procedure. Identyfikator to ciąg dużych i małych liter, cyfr oraz znaków podkreślenia nie zaczynający się od cyfry. procedurs: begin+ eno. : begin+. Zad. 2(*). Napisz w LEX-ie program, który pominie w tekście wejściowym wszystkie słowa zawierające samogłoski. Ala mm kota. mm. Zad. 3(*). Napisz w LEX-ie program który zastąpi wszystkie znaki nie będące literami kropką. Ala ma kota 1111 Osy lubia miod 2222 3333 Ala.ma.kota... Osy.lubia.miod...... Zad. 4. Napisz w LEX-ie program sumujący wartości w danym wierszu. 5 6 7 3 3 4 2 5 6 7 3 Suma = 23 3 4 Suma = 7 2 Suma = 2

Zad. 5(*). W pliku wejściowym znajdują się liczby całkowite ze znakiem oraz bez znaku. Należy podać ilość liczb zapisanych w tym pliku, a każdą liczbę dodatnią poprzedzić znakiem +. Program powinien być napisany w LEX-ie. -31 4 54 6-4 -665 Plik wyjściowy -31 +4 +54 +6-4 -665 Plik sklada sie z 6 liczb Zad. 6. Napisz w LEX-ie program który sprawdza czy ciąg znajdujący się w pliku wejściowym jest postaci a n b n. Wykorzystaj makro BEGIN i dwa stany. aaabbb aabbb aaabbb T T aabbb F Zad. 7(*). Napisz w LEX-ie program który sprawdza czy ciąg znajdujący się w pliku wejściowym zawiera na zmianę 0 i 1. Wykorzystaj makro BEGIN i dwa stany. 010101 10101 1100 010101 T T 10101 T 1100 F Zad. 8. Napisać w YACC-u program, który sprawdzi, czy plik wejściowy zawiera napis w postaci 1+2*1+ i jeżeli tak, to wypisze "Syntax OK!!!", a w przeciwnym wypadku "Syntax Error. 111221 121 11 1 21 12 12121

Zad. 9(*). Napisać w YACC-u program, który sprawdzi, czy plik wejściowy zawiera napis w postaci 1*2+3+1* i jeżeli tak, to wypisze "Syntax OK!!!", a w przeciwnym wypadku "Syntax Error. 1231 22333 12333311 121 131 1321 12131 Zad. 10. Mając dany przedstawiony poniżej parser napisany w LEX-ie napisać w YACC-u program, który sprawdzi, czy w pliku wejściowy znajduje się ciąg cyfr, w którym na zmianę występuje cyfra parzysta i nieparzysta, przy czym pierwsza powinna być cyfra parzysta. %{ #include "y.tab.h" %} %% [02468] {yylval=atoi(yytext);return pp;} [13579] {yylval=atoi(yytext);return nn;} \n ;. {YY_FATAL("Unexpected character!!!");} 21074 6 012 1234 22 11 1 Zad. 11. Mając dany parser z zadania 10 napisać w YACC-u program, który mając dany plik złożony z ciągu cyfr wypisze sumę wszystkich cyfr nieparzystych. 017891 Suma: 18 Zad. 12(*). Mając dany parser z zadania 10 napisać w YACC-u program, który mając dany plik złożony z ciągu cyfr wypisze czy w pliku znajduje się więcej cyfr parzystych, czy nieparzystych.

017891 Wiecej nieparzystych Zad. 13. Mając dany parser z zadania 10 napisać w YACC-u program, który mając dany plik złożony z ciągu cyfr wypisze ten ciąg dodając nawiasy. Nawias powinien być dodany przed i za każdym podciągiem złożonym z cyfr nieparzystych. Możesz założyć, że zawsze pierwszy będzie podciąg złożony z cyfr parzystych, a ostatni podciąg złożony z cyfr nieparzystych. 01789134609 0(17)8(913)460(9) Zad. 14(*). Mając dany parser z zadania 10 napisać w YACC-u program, który mając dany plik złożony z ciągu cyfr wypisze ten ciąg dodając nawiasy. Nawias powinien być dodany przed i za każdym podciągiem złożonym z cyfr nieparzystych. Możesz założyć, że zawsze pierwszy będzie podciąg złożony z cyfr nieparzystych, a ostatni podciąg złożony z cyfr parzystych. 17891346090 (17)8(913)460(9)0