Podstawy Kompilatorów

Podobne dokumenty
Podstawy Kompilatorów

Podstawy Kompilatorów

Podstawy Kompilatorów

Podstawy Kompilatorów

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

Podstawy Kompilatorów

Ćwiczenia nr 11. Translatory. Wprowadzenie teoretyczne

Języki formalne i gramatyki

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

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

Podstawy kompilatorów. Generator LLgen. Wojciech Complak.

Analiza leksykalna i generator LEX

Wstęp do programowania. Wykład 1

Utworzenie pliku. Dowiesz się:

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

Laboratorium 10: Maszyna stanów

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

Podstawy generatora YACC. Bartosz Bogacki.

1 Podstawy c++ w pigułce.

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

1 Podstawy c++ w pigułce.

Wstęp do Programowania, laboratorium 02

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

Podstawy programowania - 1

L E X. Generator analizatorów leksykalnych

KONSTRUKCJA KOMPILATORÓW

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

1. Wprowadzanie danych z klawiatury funkcja scanf

Podstawy programowania (1)

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

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

Zadanie 1. Napisz, skompiluj i uruchom program, który wyświetla komunikat: "Mam na imie...".

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

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

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

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

10. Translacja sterowana składnią i YACC

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

3. Instrukcje warunkowe

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

while (test) instrukcja; int i=0; while (i<10) i++; dopóki test prawdziwy wykonuj instrukcję Wykonano: 35% / \ fałsz test prawda instrukcja

Programowanie w językach wysokiego poziomu

Podstawy programowania. Wykład 3 Konstrukcje sterujące. Krzysztof Banaś Podstawy programowania 1

Podstawy Programowania C 02

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

Laboratorium z użyciem analizatora leksykalnego FLEX

Proste typy zmiennych języka C++ *) Zapis 3.4 e-38 jest równoważny zapisowi 3,

Podstawowe typy zmiennych

Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski

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

Wprowadzenie do języka Java

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

Tablice, funkcje - wprowadzenie

Liczby pseudolosowe. #include <stdio.h> #include <stdlib.h> int main() { printf("%d\n", RAND_MAX); return 0; }

4. Funkcje. Przykłady

Programowanie strukturalne i obiektowe

Matematyczne Podstawy Informatyki

2 Przygotował: mgr inż. Maciej Lasota

Ćwiczenia podstawowe, zestaw 5, część 1

Pytanie 1. Pytanie 2. Pytanie 3 WOJEWÓDZKI KONKURS INFORMATYCZNY. Treść pytania

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

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

Język C zajęcia nr 5

Autor: mgr inż. Sławomir Samolej. Zagadnienie 1. (instrukcja wyboru: switch)

Pytania sprawdzające wiedzę z programowania C++

Wstęp do programowania

Programowanie Proceduralne

W większości języków programowania(nie we wszystkich) wymaga się, żeby użyte w programie zmienne były wcześniej zadeklarowane:

Łańcuchy znaków. Agnieszka Nowak - Brzezińska

Struktura pliku projektu Console Application

#include <iostream> using namespace std; void ela(int); int main( ); { Funkcja 3. return 0; }

Generator analizatorów leksykalnych - Lex. Bartosz Bogacki.

Metody Kompilacji Wykład 13

Pliki wykład 2. Dorota Pylak

Pomorski Czarodziej 2016 Zadania. Kategoria C

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

1 Powtórzenie wiadomości

Deklaracje. W większości języków programowania(nie we wszystkich) wymaga się, żeby użyte w programie zmienne były wcześniej zadeklarowane:

Jerzy Nawrocki, Wprowadzenie do informatyki

Wstęp. Opis programu :

Zmienne, stałe i operatory

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

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

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

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

Bison - generator analizatorów składniowych

Laboratorium Podstaw Informatyki Strona 1. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 2. Funkcje, operatory i wyrażenia.

automatem skończonym niedeterministycznym (ang. nondeterministic finite automaton) M N nazywamy system:

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

Zadanie nr 3: Sprawdzanie testu z arytmetyki

Pobieranie argumentów wiersza polecenia

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

Wykład 1. Proponowany termin kolokwium zaliczeniowego ostatni wykład w semestrze letnim

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

Jerzy Nawrocki, Wprowadzenie do informatyki

Praktyka Programowania

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

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

3 Przygotował: mgr inż. Maciej Lasota

Transkrypt:

Podstawy Kompilatorów Laboratorium 6 Generator LLgen. Zadanie 1: Proszę napisać akceptor dla języka a n b m (n, m > 0). Przykłady: aaabb powinniśmy otrzymać wynik: OK aaabba powinniśmy otrzymać komunikat o błędzie. Analizator leksykalny ma następującą postać: % int yywrap(void) int yylex(void) #include "Lpars.h" % a return 'a' b return 'b' int yywrap(void) return 1 funkcja LLmessage ma następującą postać:

Zadanie 2: Proszę napisać akceptor dla języka a n b n (a, b 0). Przykłady: aabb powinniśmy otrzymać wynik: OK aaabb powinniśmy otrzymać wynik (w nawiasach liczba liter a i b napotkanych na wejściu): Error (3,2) aaabba powinniśmy otrzymać komunikat o błędzie. Analizator leksykalny ma następującą postać: % int yywrap(void) int yylex(void) #include "Lpars.h" % a return 'a' b return 'b' int yywrap(void) return 1 funkcja LLmessage ma następującą postać:

Zadanie 3: Proszę napisać akceptor dla języka 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. Przykłady: 123 321 powinniśmy otrzymać wynik: OK 123 323 powinniśmy otrzymać komunikat o błędzie. 123 3211 powinniśmy otrzymać komunikat o błędzie. Analizator leksykalny ma następującą postać: % int yywrap(void) int yylex(void) #include "Lpars.h" % [0-7] return yytext[0] " " return ' ' int yywrap(void) return 1 funkcja LLmessage ma następującą postać:

Zadanie 4: Poprawny plik wejściowy zbudowany jest ze znaków * (gwiazdka), które tworzą w pliku kształt odwróconego trójkąta prostokątnego (wnętrze trójkąta też jest wypełnione znakami *). Oznacza to, że ostatnia linia w takim pliku zawiera dokładnie jeden znak *, przedostatnia linia zawiera dwa znaki *, trzecia linia od końca trzy znaki *, itd. aż do pierwszej linii w tym pliku. Reasumując, każda linia w tym pliku (za wyjątkiem ostatniej) ma zawsze o jeden znak * mniej niż linia, która występuje bezpośrednio po niej. Poprawnie zbudowany plik wejściowy może więc wyglądać następująco: ***** **** *** ** * Minimalny rozpatrywany trójkąt prostokątny składa się z dokładnie 1 linii i ma następującą postać: * Proszę napisać akceptor, który będzie rozpoznawał, czy plik wejściowy zbudowany jest zgodnie z powyższymi założeniami. Uwaga: każda linia pliku zakończona jest znakiem końca wiersza. Analizator leksykalny ma następującą postać: % int yywrap(void) int yylex(void) #include "y.tab.h" % \* return('*') \n return('\n') int yywrap(void) return 1 funkcja LLmessage ma następującą postać:

Odpowiedzi do zadań Zadanie 1: #include <stdlib.h> %start parse, spec spec : 'a'+ 'b'+ puts("ok") int main() printf("\n") parse() printf("\n") return 0

Zadanie 2: #include <stdlib.h> int l_a = 0, l_b = 0 %start parse, spec spec : LA LB if(l_a!= l_b)printf("\nerror (%d,%d)\n",l_a,l_b) else printf("\nok\n") LA : 'a' l_a++ LA LB : 'b' l_b++ LB int main() printf("\n") parse() printf("\n") return 0

Zadanie 3: #include <stdlib.h> %start parse, spec spec : ciag ciag : '0' ciag '0' '1' ciag '1' '2' ciag '2' '3' ciag '3' '4' ciag '4' '5' ciag '5' '6' ciag '6' '7' ciag '8' ' ' int main() printf("\n") parse() puts("ok") printf("\n") return 0

Zadanie 4: #include <stdlib.h> int l_g = 0, o_l_g = 1 %start parse, spec spec : T T : L o_l_g = l_g - 1 RT RT : L if(o_l_g!= l_g)printf("error") o_l_g-- RT L : '\n' l_g = 0 '*' L l_g++ int main() printf("\n") parse() printf("\n") return 0