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

Wielkość: px
Rozpocząć pokaz od strony:

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

Transkrypt

1 Plan wykładu Wojciech Complak charakterystyka generatora LLgen składnia specyfikacji analizatora składniowego dołączanie analizatora leksykalnego rozszerzenia składni gramatyk bezkontekstowych środowisko generatora przykładowa gramatyka i jej implementacja w generatorze LLgen mechanizmy statycznego i dynamicznego rozstrzygania konfliktów 2.02 Generator LLGen (2/34) - charakterystyka -składnia specyfikacji LLgen jest generatorem parserów, dystrybuowanym w ramach pakietu ACK (The Amsterdam Compiler Kit) jak i jako samodzielny produkt (obecnie rozwijany i dystrybuowany w oparciu o licencję BSD przez SourceForge.net z jego pomocą zaimplementowano translatory dla wielu języków programowania (m. in. Basic, C, Pascal, Modula-2, occam) LLgen generuje parsery działające metodą zejść rekurencyjnych bez nawrotów w specyfikacji analizatora można korzystać z rozszerzonych gramatyk LL(1) oraz gramatyk niejednoznacznych (dostępne są mechanizmy statycznego i dynamicznego rozstrzygania konfliktów) na podstawie specyfikacji generowana jest implementacja analizatora składniowego w języku C specyfikację parsera należy przygotować w pliku tekstowym specyfikacja zawiera produkcje, dyrektywy LLgena oraz kod i deklaracje w języku C każda produkcja składa się z nieterminala, znaku :, prawej strony produkcji i jest zakończona znakiem po prawej stronie produkcji mogą znajdować się symbole terminalne, nieterminalne i akcje semantyczne alternatywne prawe strony produkcji rozdziela się znakiem białe spacje są ignorowane, ale nie mogą występować w obrębie nazw komentarze można umieszczać wszędzie tam, gdzie dozwolona jest nazwa komentarze mają postać taką jak w języku ANSI C (/* */) i nie mogą być zagnieżdżane Generator LLGen (3/34) Generator LLGen (4/34) -składnia specyfikacji -składnia specyfikacji nazwy symboli terminalnych i nieterminalnych mogą być dowolnej długości nazwy symboli mają składnię taką jak identyfikatory języka C: mogą składać się z liter, znaku podkreślenia ('_') i cyfr dziesiętnych (nie mogą rozpoczynać się od cyfry) wielkość liter jest rozróżniana nazwy symboli nie mogą kolidować ze słowami kluczowymi języka C nazwy symboli mogą być dowolnej długości, ale: w samym LLgenie znaczących jest 50 pierwszych znaków nazwy należy uwzględnić ograniczenia liczby znaczących znaków nakładane przez docelowy kompilator języka C i konsolidator nazwy wszystkich symboli wykorzystywanych i generowanych przez LLgena zaczynają się od liter LL Generator LLGen (5/34) terminale, które nie są literałami (są nazwane) muszą być wcześniej zadeklarowane za pomocą słowa kluczowego %token, np.: %token num każda deklaracja %token musi być zakończona średnikiem w deklaracji można wymienić wiele nazw rozdzielonych przecinkami, np.: %token NUM, LITERAL terminale, które są literałami muszą być ujęte w apostrofy rozpoznawane są następujące literały specjalne: '\n' nowa linia '\r' powrót karetki '\'' apostrof '\\' odwrotny ukośnik '\t' tabulator '\b' wycofanie znaku '\xxx' liczba oktalna Generator LLGen (6/34)

2 -składnia specyfikacji - analizator leksykalny każda napotkana nazwa, która nie została wcześniej zadeklarowana jako token jest uważana za nieterminal LLgen pozwala generować analizatory z alternatywnymi nieterminalami startowymi aksjomat musi być wskazany za pomocą słowa kluczowego %start, np.: %start parse, S określa, że aksjomatem gramatyki jest nieterminal S, a jego implementacja ma znaleźć się w funkcji o nazwie parse akcje semantyczne można wstawiać w dowolnym miejscu prawej strony produkcji akcje to pojedyncza instrukcja albo instrukcje języka C ujęte w nawiasy klamrowe każdy nieterminal jest implementowany jako funkcja języka C, zmienne lokalne funkcji można zadeklarować po lewej stronie produkcji za symbolem nieterminalnym w nawiasach klamrowych, np.: S int zm : '(' num suma = 0 R Generator LLGen (7/34) domyślnie LLgen korzysta z zewnętrznego analizatora leksykalnego generowanego przez LEXa (wywoływana jest funkcja yylex()) w celu skorzystania z innego analizatora niż generowany przez LEXa należy: umieścić implementację w jednym z dwu miejsc: o bezpośrednio w specyfikacji gramatyki (w bloku ) o w zewnętrznym pliku wskazać (po słowie kluczowym %lexical) nazwę funkcji, która ma być wywoływana przez LLgena do skanowania wejścia, np.: %lexical my_yylex Generator LLGen (8/34) - analizator leksykalny - analizator leksykalny w trakcie generacji parsera LLgen tworzy plik interfejsu Lpars.h, który zawiera definicje (#define) przypisujące stałe liczbowe nazwom zadeklarowanych tokenów jeżeli zostały zadeklarowane jakieś tokeny plik Lpars.h należy włączyć dyrektywą #include "Lpars.h" do analizatora leksykalnego szkielet skanera: schemat współpracy analizatora leksykalnego i składniowego a 1 a i a n $ % int yywrap(void) int yylex(void) #include "Lpars.h" % /* reguły */ int yywrap(void) return 1 skaner parser token zwracany przez yylex() atrybut ustawiany przez skaner w zmiennej LLlval Generator LLGen (9/34) Generator LLGen (10/34) : generacja parsera : opcja v, funkcja main() na wejście generatora LLgen podajemy specyfikację parsera (plik gram.g) na wyjściu generatora LLgen otrzymujemy: implementację parsera w języku C w plikach: gram.c (implementacja nieterminali, funkcje main() i LLmessage()) Lpars.c (tablica sterująca i szkielet parsera, funkcja parse()) definicję interfejsu parser/skaner: plik Lpars.h specyfikacja analizatora składniowego (gram.g) LLgen gram.g gram.c Lpars.c Lpars.h analizator leksykalny (domyślnie funkcję yylex()) można: napisać bezpośrednio w języku C utworzyć za pomocą generatora analizatorów leksykalnych (LEX) Generator LLGen (11/34) na etapie uruchamiania i testowania parsera może być użyteczna opcja -v, powodująca wygenerowanie pliku LL.output zawierającego informacje o nierozwiązanych konfliktach w gramatyce opcji -v można używać do trzech razy w jednym wywołaniu, każde kolejne użycie podnosi poziom szczegółowości komunikatów, trzykrotne daje kompletny opis gramatyki użytkownik musi także dostarczyć implementację funkcji main() jeśli symbol startowy został zadeklarowany jako: %start parse, S to w najprostszym przypadku ciało funkcji main wywołuje funkcję parse: int main() parse() return 0 Generator LLGen (12/34)

3 Kompilacja kompletnego analizatora: LEX + LLgen Rozszerzenia składni gramatyk bezkontekstowych scan.l lex lex.yy.c gram.g lex.yy.c gram.c Lpars.c Lpars.h LLgen cc gram.c Lpars.c Lpars.h a.out Generator LLGen (13/34) w specyfikacji analizatora można korzystać z rozszerzeń składni gramatyk bezkontekstowych, do których należą: domknięcie zwrotne * z opcjonalnym ograniczeniem liczby powtórzeń *n język a*b S : 'a'* 'b' domknięcie dodatnie + z opcjonalnym ograniczeniem liczby powtórzeń +n S : 'a'+ 'b' język a+b operator opcjonalności? (równoważne *1) możliwość grupowania symboli [ ] (i kodu wewnątrz grupy) S : 'a' R 'b' R S : [ 'a' 'b' ] R Generator LLGen (14/34) przykład: napisać akceptor dla języka bezkontekstowego a n b n dla n>0 1. z wykorzystaniem gramatyki LL(1) 2. z wykorzystaniem rozszerzeń LLgena w akceptorze zostaną wykorzystane dwie globalne ( ) zmienne typu całkowitego int l_a i l_b do zliczania liczby wystąpień poszczególnych liter w aksjomacie gramatyki (S) po przetworzeniu ciągu liter a (nieterminal A) i ciągu liter b (nieterminal B) porównane zostaną wartości zmiennych i wydrukowany odpowiedni komunikat int l_a, l_b %start parse, S S : l_a = l_b = 0 A B if(l_a == l_b)puts("ok") else puts("error") powtarzanie liter a w ciągu możemy opisać za pomocą lewostronnej rekurencji: A : 'a' l_a = 1 A 'a' l_a++ B : 'b' l_b = 1 B 'b' l_b++ taka gramatyka nie jest jednak LL(1)! Generator LLGen (15/34) Generator LLGen (16/34) jeśli opiszemy powtarzanie liter a za pomocą prawostronnej rekurencji: A : 'a' l_a = 1 'a' A l_a++ B : 'b' l_b = 1 'b' B l_b++ mamy z kolei problem z konfliktem alternatyw trzeba przeprowadzić lewostronną faktoryzację przeprowadzenie lewostronnej faktoryzacji wymaga wprowadzenia dodatkowych nieterminali i odpowiedniej modyfikacji akcji A : 'a' RA l_a=1 RA : 'a' RA l_a++ B : 'b' RB l_b=1 RB : 'b' RB l_b++ Generator LLGen (17/34) Generator LLGen (18/34)

4 : obsługa błędów dzięki wykorzystaniu rozszerzeń LLgena (grupowanie i operator domknięcia dodatniego) możemy uniknąć modyfikowania gramatyki (ewentualnie usunąć nieterminale A i B): S : l_a = l_b = 0 A B if(l_a==l_b)puts("ok") else puts("error") A : [ 'a' l_a++ ] + B : [ 'b' l_b++ ] + S : l_a = l_b = 0 [ 'a' l_a++ ] + [ 'b' l_b++ ] + if(l_a==l_b)puts("ok") else puts("error") do obsługi błędów składniowych w LLgenie przewidziana jest funkcja LLmessage, której implementację dostarcza użytkownik funkcja LLmessage jest automatycznie wywoływana przez parser wygenerowany przez LLgena w przypadku wystąpienia błędu składniowego implementacja funkcji LLmessage może podjąć różne działania: wyświetlić komunikat o błędzie (analizator pracujący w trybie wsadowym) albo zachętę do ponownego wprowadzenia danych (tryb interaktywny) kontynuować albo przerwać analizę danych wejściowych w przypadku kontynuacji podjąć próbę podniesienia z błędu (naprawienia stanu) Generator LLGen (19/34) Generator LLGen (20/34) : obsługa błędów przy implementacji funkcji LLmessage może być przydatna zmienna LLsymb (typu int) przechowująca ostatnio wczytany (podglądany) token funkcja LLmessage ma jeden parametr typu całkowitego tk zawierający informację o typie błędu i nie zwraca żadnej wartości: void LLmessage(int tk) tk > 0 : oczekiwany był token tk a napotkano token LLsymb (aby podnieść się z błędu należy wstawić token tk przed bieżącym symbolem znajdującym się w LLsymb analizator leksykalny musi pozwalać na wycofanie jednej jednostki leksykalnej!) 0 : nieoczekiwany token (LLsymb) został napotkany i usunięty, -1 : parser nie napotkał oczekiwanego końca pliku (napotkany token jest w LLsymb), reszta wejścia zostanie pominięta Generator LLGen (21/34) przykład: na wejściu znajduje się ciąg nieujemnych liczb całkowitych ujęty w nawiasy okrągłe, np. (1,2,3) ciąg zawiera co najmniej jedną liczbę, jeśli jest ich więcej są rozdzielone przecinkami. Napisać analizator składniowy, który sprawdzi poprawność wprowadzonych danych. ( 1 ( (, (1 ) 3 LLmessage: unexpected token '(' deleted in line 3 LLmessage: expected token <num> not found, unexpected token ',' encountered in line 2 LLmessage: expected EOF not encountered, unexpected token <num> found in line 3, skipping extra input Generator LLGen (22/34) analizator leksykalny implementujemy w LEXie % #include <stdlib.h> int yywrap(void) int yylex(void) #include "Lpars.h" % \( return '(' \) return ')' \, return ',' [0-9]+ return num [ \t\n]. printf("unexpected character %c in line %d\n", yytext[0], yylineno) exit(exit_failure) int yywrap(void) return 1 Generator LLGen (23/34) analizator składniowy definicje, gramatyka #include <stdlib.h> extern int yylineno %token num %start parse, S S : '(' num R R : ')' ',' num R Generator LLGen (24/34)

5 analizator składniowy definicje, gramatyka z wykorzystaniem rozszerzeń LLgena #include <stdlib.h> extern int yylineno %token num %start parse, S S : '(' num [ ',' num ]* ')' analizator składniowy funkcja print_token() void print_token(int t) switch(t) case num : printf("<num>") break case EOFILE : printf("<eof>") break default : if(isprint(t)) printf("'%c'",t) else printf("[%d]",t) Generator LLGen (25/34) Generator LLGen (26/34) Rozwiązywanie konfliktów analizator składniowy funkcja LLmessage() void LLmessage(int tk) printf("llmessage: ") switch(tk) case -1 : printf("expected EOF not encountered, unexpected token ") print_token(llsymb) printf(" found in line %d, skipping extra input\n", yylineno) exit(exit_failure) case 0 : printf("unexpected token ") print_token(llsymb) printf(" deleted in line %d\n", yylineno) exit(exit_failure) default : printf("expected token ") print_token(tk) printf(" not found, unexpected token ") print_token(llsymb) printf(" encountered in line %d\n", yylineno) exit(exit_failure) Generator LLGen (27/34) generując parser działający metodą rekurencyjnych zejść bez nawrotów możemy mieć do czynienia z dwoma typami konfliktów: konfliktem alternatyw nie wiadomo, którą z prawych stron produkcji wybrać konfliktem powtórzeń aktualnie rozwijany nieterminal zawiera domknięcie i nie wiadomo czy wejście jest jego dalszym ciągiem czy też rozpoczyna inną produkcję do rozwiązywania konfliktu alternatyw służą odpowiednie słowa kluczowe: do dynamicznego rozstrzygania: %if(warunek) do statycznego rozstrzygania: %prefer (równoważne %if(1)) %avoid (równoważne %if(0)) Generator LLGen (28/34) Rozwiązywanie konfliktów przykład użycia %if Rozwiązywanie konfliktów przykład użycia %prefer przykład: badanie parzystości liczby binarnej zapisanej począwszy od najstarszej cyfry (odpowiedź będzie znana po wczytaniu ostatniej cyfry) analizator leksykalny ma następującą postać: [01] return yytext[0] int parity %start parse, S S : '0' parity = 0 R '1' parity = 1 R R : %if(parity == 0) puts("even") puts("odd") S Generator LLGen (29/34) przykładem użycia mechanizmu statycznego rozwiązywania konfliktu alternatyw za pomocą słowa kluczowego %prefer jest instrukcja warunkowa z opcjonalną częścią else problem tzw. wiszącego else występuje w tych językach (np.: C, C++, Pascal), w których: instrukcja warunkowa ma opcjonalną część else a jednocześnie nie ma słowa (słów) kluczowego kończącego instrukcję warunkową w produkcji opisującej składnię instrukcji warunkowej wskazujemy, że część else ma być powiązana z bezpośrednio poprzedzającą ją częścią ifthen: stmnt : IF exp THEN stmnt [ %prefer ELSE stmnt ] gdzie stmnt to instrukcja, a IF, THEN i ELSE to słowa kluczowe języka źródłowego Generator LLGen (30/34)

6 Rozwiązywanie konfliktów powtórzeń Rozwiązywanie konfliktów powtórzeń do rozwiązywania konfliktu powtórzeń służy słowo kluczowe %while: %while(warunek) wejście będzie traktowane jako należące do rozwinięcia bieżącego symbolu dopóki warunek będzie prawdziwy. zapis warunku często wymagania obliczenia zbioru First LLgen pozwala zmniejszyć pracochłonność obliczania warunku dzięki użyciu makra języka C generowanego na podstawie słowa kluczowego %first, np. zapis: %first fmac, nonterm generuje jednoargumentowe makro fmac(nonterm) testujące czy token podany jako argument należy do zbioru First(nonterm) Generator LLGen (31/34) jako przykład użycia słowa kluczowego %while do rozstrzygnięcia konfliktu powtórzeń rozważmy następujący język: %start parse, S S : N * 'x' "gram.g", line 8: Repetition conflict N : 'x' 'y' 'z' problem: analizator widząc znak x nie wie czy rozpoczyna on produkcję N x y czy kończy S N* x xyx$?? Generator LLGen (32/34) Rozwiązywanie konfliktów Dalsza lektura rozwiązanie konfliktu powtórzeń wymaga: 1. modyfikacji gramatyki (pojawia się jednak konflikt alternatyw obie alternatywy mogą być napisami pustymi) 2. rozbudowania skanera o podgląd: jednego symbolu z wejścia pozwoli rozwiązać konflikt alternatyw dwóch symboli z wejścia pozwoli rozwiązać konflikt powtórzeń 3. wykorzystania podglądów w celu rozwiązania konfliktów w gramatyce %start parse, S S : XY 'x' XY : %if(lookahead1() == 'z') 'z' * [ %while(lookahead2() == 'y') 'x' 'y' ] * Generator LLGen (33/34) gramatyki LL: Aho A. V., Sethi R., Ullman J. D., Compilers: Principles, Techniques, and Tools, Addison-Wesley, 1986 Bauer F. L., Eickel J., Compiler Construction: An Advanced Course, Springer-Verlag, 1976 generator LLgen: Grune D., Jacobs C. J. H., A Programmer-friendly LL(1) Parser Generator, Software - Practice and Experience, vol. 18, no. 1, pp , 1/1988 Jacobs C. J. H., LLgen, an extended LL(1) parser generator, tack.sourceforge.net/olddocs/llgen.pdf Grune D., Bal H., Jacobs C., Langendoen K., Modern Compiler Design, John Wiley & Sons, 2000 Generator LLGen (34/34)

Podstawy kompilatorów. Generator LLgen. Wojciech Complak.

Podstawy kompilatorów. Generator LLgen. Wojciech Complak. Generator LLgen Wojciech Complak Wojciech.Complak@cs.put.poznan.pl 1 Plan wykładu charakterystyka generatora LLgen składnia specyfikacji analizatora składniowego dołączanie analizatora leksykalnego rozszerzenia

Bardziej szczegółowo

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

Translacja sterowana składnią w metodzie zstępującej Translacja sterowana składnią w metodzie zstępującej Wojciech Complak Wojciech.Complak@cs.put.poznan.pl 1 Plan wykładu translacja sterowana składnią definicje sterowane składnią i schematy translacji atrybuty

Bardziej szczegółowo

Podstawy Kompilatorów

Podstawy Kompilatorów 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

Bardziej szczegółowo

Analiza leksykalna i generator LEX

Analiza leksykalna i generator LEX Analiza leksykalna i generator LEX Wojciech Complak Wojciech.Complak@cs.put.poznan.pl wprowadzenie generator LEX wyrażenia regularne i niejednoznaczności retrakcja definicje regularne atrybuty lewy kontekst

Bardziej szczegółowo

Generator YACC: gramatyki niejednoznaczne

Generator YACC: gramatyki niejednoznaczne Plan wykładu Generator YACC: gramatyki niejednoznaczne Wojciech Complak Wojciech.Complak@cs.put.poznan.pl gramatyki jednoznaczne i niejednoznaczne zalety gramatyk niejednoznacznych opisywanie łączności

Bardziej szczegółowo

Podstawy Kompilatorów

Podstawy Kompilatorów Podstawy Kompilatorów Laboratorium 10 Translacja sterowana składnią w generatorze YACC. Zadanie 1: Proszę napisać program, który dla danej liczby całkowitej j oraz niepustego ciągu liczb naturalnych c

Bardziej szczegółowo

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

Analiza leksykalna 1. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki Analiza leksykalna 1 Teoria kompilacji Dr inż. Janusz Majewski Katedra Informatyki Zadanie analizy leksykalnej Kod źródłowy (ciąg znaków) Analizator leksykalny SKANER Ciąg symboli leksykalnych (tokenów)

Bardziej szczegółowo

Podstawy Kompilatorów

Podstawy Kompilatorów Podstawy Kompilatorów Laboratorium 1 Celem laboratorium jest zapoznanie się ze środowiskiem i sprawdzenie poprawności działania narzędzi. Nazwy programów i rezultaty będą takie same w systemie operacyjnym

Bardziej szczegółowo

Metody Kompilacji Wykład 1 Wstęp

Metody Kompilacji Wykład 1 Wstęp Metody Kompilacji Wykład 1 Wstęp Literatura: Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman: Compilers: Princiles, Techniques, and Tools. Addison-Wesley 1986, ISBN 0-201-10088-6 Literatura: Alfred V. Aho,

Bardziej szczegółowo

L E X. Generator analizatorów leksykalnych

L E X. Generator analizatorów leksykalnych L E X Generator analizatorów leksykalnych GENERATOR L E X Zadaniem generatora LEX jest wygenerowanie kodu źródłowego analizatora leksykalnego (domyślnie) w języku C; Kod źródłowy generowany jest przez

Bardziej szczegółowo

Podstawy generatora YACC. Bartosz Bogacki.

Podstawy generatora YACC. Bartosz Bogacki. Podstawy generatora YACC Bartosz Bogacki Bartosz.Bogacki@cs.put.poznan.pl Witam Państwa. Wykład, który za chwilę Państwo wysłuchają dotyczy generatora analizatorów składniowych YACC. Zapraszam serdecznie

Bardziej szczegółowo

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

Metody Kompilacji Wykład 8 Analiza Syntaktyczna cd. Włodzimierz Bielecki WI ZUT Metody Kompilacji Wykład 8 Analiza Syntaktyczna cd Analiza Syntaktyczna Wstęp Parser dostaje na wejściu ciąg tokenów od analizatora leksykalnego i sprawdza: czy ciąg ten może być generowany przez gramatykę.

Bardziej szczegółowo

Zadanie analizy leksykalnej

Zadanie analizy leksykalnej Analiza leksykalna 1 Teoria kompilacji Dr inŝ. Janusz Majewski Katedra Informatyki Zadanie analizy leksykalnej Przykład: We: COST := ( PRICE + TAX ) * 0.98 Wy: id 1 := ( id 2 + id 3 ) * num 4 Tablica symboli:

Bardziej szczegółowo

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

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

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

Parsery LL(1) Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki Parsery LL() Teoria kompilacji Dr inż. Janusz Majewski Katedra Informatyki Zadanie analizy generacyjnej (zstępującej, top-down) symbol początkowy już terminale wyprowadzenie lewostronne pierwszy od lewej

Bardziej szczegółowo

Metody Kompilacji Wykład 13

Metody Kompilacji Wykład 13 Metody Kompilacji Wykład 13 Prosty Translator Translator dla prostych wyrażeń Schemat translacji sterowanej składnią często służy za specyfikację translatora. Schemat na następnym slajdzie zostanie użyty

Bardziej szczegółowo

Metody Kompilacji Wykład 7 Analiza Syntaktyczna

Metody Kompilacji Wykład 7 Analiza Syntaktyczna Metody Kompilacji Wykład 7 Analiza Syntaktyczna Parsowanie Parsowanie jest to proces określenia jak ciąg terminali może być generowany przez gramatykę. Włodzimierz Bielecki WI ZUT 2/57 Parsowanie Dla każdej

Bardziej szczegółowo

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

Analiza leksykalna 1. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki Analiza leksykalna 1 Języki formalne i automaty Dr inż. Janusz Majewski Katedra Informatyki Zadanie analizy leksykalnej Kod źródłowy (ciąg znaków) Analizator leksykalny SKANER Ciąg symboli leksykalnych

Bardziej szczegółowo

Podstawy Kompilatorów

Podstawy Kompilatorów 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

Bardziej szczegółowo

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

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Wykład 5. Jan Pustelnik

Wykład 5. Jan Pustelnik Wykład 5 Jan Pustelnik Konstruowanie parsera Istnieje kilka podstawowych metod konstrukcji parsera bez nawracania Ze względów wydajnościowych parser bez nawracania jest jedynym sensownym rozwiązaniem (prawo

Bardziej szczegółowo

Generatory analizatorów

Generatory analizatorów Generatory analizatorów Generator analizatora leksykalnego flex ( http://www.gnu.org/software/flex/ ) Generator analizatora składniowego bison ( http://www.gnu.org/software/bison/ ) Idea ogólna Opis atomów

Bardziej szczegółowo

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

Tablice (jedno i wielowymiarowe), łańcuchy znaków Tablice (jedno i wielowymiarowe), łańcuchy znaków wer. 8 z drobnymi modyfikacjami! Wojciech Myszka Katedra Mechaniki i Inżynierii Materiałowej 2017-04-07 09:35:32 +0200 Zmienne Przypomnienie/podsumowanie

Bardziej szczegółowo

Semantyka i Weryfikacja Programów - Laboratorium 6

Semantyka i Weryfikacja Programów - Laboratorium 6 Semantyka i Weryfikacja Programów - Laboratorium 6 Analizator leksykalny i składniowy - kalkulator programowalny Cel. Przedstawienie zasad budowy i działania narzędzi do tworzenia kompilatorów języków

Bardziej szczegółowo

KONSTRUKCJA KOMPILATORÓW

KONSTRUKCJA KOMPILATORÓW KONSTRUKCJA KOMPILATORÓW WYKŁAD Robert Plebaniak PLATFORMA PROGRAMOWA LINUX (może nie zawierać LLgen, wówczas instalacja ze strony http://tack.sourceforge.net); WINDOWS (używa się wtedy programu Cygwin,

Bardziej szczegółowo

Ćwiczenia nr 11. Translatory. Wprowadzenie teoretyczne

Ćwiczenia nr 11. Translatory. Wprowadzenie teoretyczne 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

Bardziej szczegółowo

Translacja sterowana składnią w generatorze YACC

Translacja sterowana składnią w generatorze YACC Translacja sterowana składnią w generatorze YACC Wojciech Complak Wojciech.Complak@cs.put.poznan.pl 1 Plan wykładu zasady implementacji translacji sterowanej składnią w generatorze YACC korzystanie z atrybutów

Bardziej szczegółowo

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

Analiza metodą zstępującą. Bartosz Bogacki. Analiza metodą zstępującą Bartosz Bogacki Bartosz.Bogacki@cs.put.poznan.pl Witam Państwa. Wykład, który za chwilę Państwo wysłuchają dotyczy analizy metodą zstępującą. Zapraszam serdecznie do wysłuchania.

Bardziej szczegółowo

Program We Kompilator Wy Źródłowy

Program We Kompilator Wy Źródłowy 1. Aho A.V., Ullman J.D. - The Theory of Parsing, Translation and Compiling.1972. 2. Foster J.M. - Automatyczna analiza składniowa. 1976 3. Gries D. - Konstrukcja translatorów dla maszyn cyfrowych, 1984

Bardziej szczegółowo

Wprowadzenie do analizy składniowej. Bartosz Bogacki.

Wprowadzenie do analizy składniowej. Bartosz Bogacki. Wprowadzenie do analizy składniowej Bartosz Bogacki Bartosz.Bogacki@cs.put.poznan.pl Witam Państwa. Wykład, który za chwilę Państwo wysłuchają dotyczy wprowadzenia do analizy składniowej. Zapraszam serdecznie

Bardziej szczegółowo

Generator YACC: gramatyki niejednoznaczne

Generator YACC: gramatyki niejednoznaczne Generator YACC: gramatyki niejednoznaczne Wojciech Complak Wojciech.Complak@cs.put.poznan.pl 1 Plan wykładu gramatyki jednoznaczne i niejednoznaczne zalety gramatyk niejednoznacznych opisywanie łączności

Bardziej szczegółowo

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1 Pętle Pętla jest konstrukcją sterującą stosowaną w celu wielokrotnego wykonania tego samego zestawu instrukcji jednokrotne

Bardziej szczegółowo

10. Translacja sterowana składnią i YACC

10. Translacja sterowana składnią i YACC 10. Translacja sterowana składnią i YACC 10.1 Charakterystyka problemu translacja sterowana składnią jest metodą generacji przetworników tekstu języków, których składnię opisano za pomocą gramatyki (bezkontekstowej)

Bardziej szczegółowo

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h> Szablon programu: /* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include /* opcjonalne: deklaracja typów o rozmiarze jednego i dwóch

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Bison - generator analizatorów składniowych

Bison - generator analizatorów składniowych Bison - generator analizatorów składniowych Spis treści: 1. Wprowadzenie 2. Specyfikacja Deklaracje Reguły Procedury pomocnicze 3. Prosty przykład 4. Uruchamianie 5. Rozstrzyganie niejednoznaczności Konflikty

Bardziej szczegółowo

Matematyczne Podstawy Informatyki

Matematyczne Podstawy Informatyki Matematyczne Podstawy Informatyki dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Rok akademicki 2013/2014 Stany równoważne Stany p i q są równoważne,

Bardziej szczegółowo

Wstęp do programowania. Wykład 1

Wstęp do programowania. Wykład 1 Wstęp do programowania Wykład 1 1 / 49 Literatura Larry Ullman, Andreas Signer. Programowanie w języku C++. Walter Savitch, Kenrick Mock. Absolute C++. Jerzy Grębosz. Symfonia C++. Standard. Stephen Prata.

Bardziej szczegółowo

Programowanie strukturalne i obiektowe

Programowanie strukturalne i obiektowe Programowanie strukturalne i obiektowe Język C część I Opracował: Grzegorz Flesik Literatura: A. Majczak, Programowanie strukturalne i obiektowe, Helion, Gliwice 2010 P. Domka, M. Łokińska, Programowanie

Bardziej szczegółowo

Podstawy programowania skrót z wykładów:

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

0.1 Lewostronna rekurencja

0.1 Lewostronna rekurencja 0.1 Lewostronna rekurencja Sprawdź czy poniższa gramatyka E jest zgodna z LL(1), tzn. czy umożliwia przeprowadzenie analizy bez powrotu z wyprzedzeniem o jeden symbol. Wyjaśnienie pojęcia LL(1): Pierwsze

Bardziej szczegółowo

Efektywna analiza składniowa GBK

Efektywna analiza składniowa GBK TEORETYCZNE PODSTAWY INFORMATYKI Efektywna analiza składniowa GBK Rozbiór zdań i struktur zdaniowych jest w wielu przypadkach procesem bardzo skomplikowanym. Jego złożoność zależy od rodzaju reguł produkcji

Bardziej szczegółowo

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6 PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6 TEMAT: Programowanie w języku C/C++: instrukcje iteracyjne for, while, do while Ogólna postać instrukcji for for (wyr1; wyr2; wyr3) Instrukcja for twory pętlę działającą

Bardziej szczegółowo

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje. Podstawowe elementy proceduralne w C++ Program i wyjście Zmienne i arytmetyka Wskaźniki i tablice Testy i pętle Funkcje Pierwszy program // Niezbędne zaklęcia przygotowawcze ;-) #include using

Bardziej szczegółowo

Wykład 10. Translacja sterowana składnią

Wykład 10. Translacja sterowana składnią Wykład 10 Translacja sterowana składnią Translacja sterowana składnią Z konstrukcjami języków programowania wiąże się pewną informację przez dołączenie atrybutów do symboli gramatyki reprezentujących te

Bardziej szczegółowo

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

Plan wykładu. Kompilatory. Literatura. Translatory. Literatura Translatory. Paweł J. Matuszyk Plan wykładu (1) Paweł J. Matuszyk AGH Kraków 1 2 tor leksykalny tor syntaktyczny Generator pośredniego Generator wynikowego Hopcroft J. E., Ullman J. D., Wprowadzenie do teorii automatów, języków i obliczeń,

Bardziej szczegółowo

Podstawy Kompilatorów

Podstawy Kompilatorów 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ć:

Bardziej szczegółowo

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać MatLab część III 1 Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać komentarze poprzedzone znakiem % Skrypty

Bardziej szczegółowo

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

Wybrane narzędzia do tworzenia analizatorów leksykalnych i składniowych w C/C++ by Kapitol Team Wybrane narzędzia do tworzenia analizatorów leksykalnych i składniowych w C/C++ by Kapitol Team Flex a generatory skanerów C++ 2 sposoby wymuszenia stworzenia skanera w C++ flex -+ flexfile.l użycie %option

Bardziej szczegółowo

System operacyjny Linux

System operacyjny Linux Paweł Rajba pawel.rajba@continet.pl http://kursy24.eu/ Zawartość modułu 6 Język bash Pierwszy skrypt Rozwinięcia parametryczne Bloki instrukcji Dwa przydatne polecenia Tablice Sprawdzanie warunków Instrukcje

Bardziej szczegółowo

Wprowadzenie do programowania w języku C

Wprowadzenie do programowania w języku C Wprowadzenie do programowania w języku C Część druga Instrukcje sterujące przebiegiem programu Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót

Bardziej szczegółowo

Wprowadzenie. Wojciech Complak

Wprowadzenie. Wojciech Complak Wprowadzenie Wojciech Complak Wojciech.Complak@cs.put.poznan.pl Przedmiot Podstawy kompilatorów, wykład 1, Wprowadzenie, prezentuje Wojciech Complak. Witam Państwa na pierwszym wykładzie z przedmiotu Podstawy

Bardziej szczegółowo

Zmienne, stałe i operatory

Zmienne, stałe i operatory Zmienne, stałe i operatory Przemysław Gawroński D-10, p. 234 Wykład 2 4 marca 2019 (Wykład 2) Zmienne, stałe i operatory 4 marca 2019 1 / 21 Outline 1 Zmienne 2 Stałe 3 Operatory (Wykład 2) Zmienne, stałe

Bardziej szczegółowo

Podstawy programowania - 1

Podstawy programowania - 1 Podstawy programowania - 1 doc. dr inż. Tadeusz Jeleniewski Wykład: sobota B, godz. 10.30 12.55 sala 12 Laboratorium: sobota B, godz. 13.00 15.25 sala 2 sobota B, godz. 15.30-17.55 sala 2 e-mail: tadeusz.jeleniewski@pwr.wroc.pl

Bardziej szczegółowo

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

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p. Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy Laboratorium 2 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Komentarze Funkcja printf() Zmienne Łańcuchy

Bardziej szczegółowo

Języki formalne i gramatyki

Języki formalne i gramatyki J.Nawrocki, M. Antczak, A. Hoffa, S. Wąsik Plik źródłowy: 08cw10-jfig.doc; Data: 2008-10-22 13:29:00 Ćwiczenie nr 10 Języki formalne i gramatyki Wprowadzenie 1. Napisz analizator leksykalny (LEX) i analizator

Bardziej szczegółowo

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!

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! Programowanie I O czym będziemy mówili Podstawy programowania w językach proceduralnym ANSI C obiektowym Java Uwaga! podobieństwa w podstawowej strukturze składniowej (zmienne, operatory, instrukcje sterujące...)

Bardziej szczegółowo

Języki programowania zasady ich tworzenia

Języki programowania zasady ich tworzenia Strona 1 z 18 Języki programowania zasady ich tworzenia Definicja 5 Językami formalnymi nazywamy każdy system, w którym stosując dobrze określone reguły należące do ustalonego zbioru, możemy uzyskać wszystkie

Bardziej szczegółowo

Wstęp do Programowania, laboratorium 02

Wstęp do Programowania, laboratorium 02 Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite

Bardziej szczegółowo

Programowanie w języku Python. Grażyna Koba

Programowanie w języku Python. Grażyna Koba Programowanie w języku Python Grażyna Koba Kilka definicji Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i

Bardziej szczegółowo

Wstęp do informatyki- wykład 11 Funkcje

Wstęp do informatyki- wykład 11 Funkcje 1 Wstęp do informatyki- wykład 11 Funkcje Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com Jerzy Grębosz, Opus magnum

Bardziej szczegółowo

Podstawy Kompilatorów

Podstawy Kompilatorów Podstawy Kompilatorów Laboratorium 12 Analiza zależności kontekstowych. Zadanie 1: Proszę napisać analizator zgodności typów dla podzbioru standardowych wyrażeń języka Pascal. Dla uproszczenia należy założyć,

Bardziej szczegółowo

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre) Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie

Bardziej szczegółowo

Wstęp do informatyki- wykład 9 Funkcje

Wstęp do informatyki- wykład 9 Funkcje 1 Wstęp do informatyki- wykład 9 Funkcje Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com Jerzy Grębosz, Opus magnum

Bardziej szczegółowo

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors. Wykład 3 ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors. Waldi Ravens J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 75 / 146 deklaracje zmiennych instrukcja podstawienia

Bardziej szczegółowo

Matematyczne Podstawy Informatyki

Matematyczne Podstawy Informatyki Matematyczne Podstawy Informatyki dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Rok akademicki 2013/2014 Gramatyki bezkontekstowe I Gramatyką bezkontekstową

Bardziej szczegółowo

Podstawy programowania (1)

Podstawy programowania (1) Podstawy programowania (1) doc. dr inż. Tadeusz Jeleniewski Konsultacje pokój 19 Poniedziałki, godz. 9:45 11:20 e-mail: tadeusz.jeleniewski@neostrada.pl Podstawy programowania (1) - wykład 1. Wprowadzenie

Bardziej szczegółowo

Mikrokontroler ATmega32. Język symboliczny

Mikrokontroler ATmega32. Język symboliczny Mikrokontroler ATmega32 Język symboliczny 1 Język symboliczny (asembler) jest językiem niskiego poziomu - pozwala pisać programy złożone z instrukcji procesora. Kody instrukcji są reprezentowane nazwami

Bardziej szczegółowo

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD programowania Wykład: 5 Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD programowania w C++ Instrukcje sterujące 2 dr Artur Bartoszewski

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania wykład 2 Piotr Cybula Wydział Matematyki i Informatyki UŁ 2012/2013 http://www.math.uni.lodz.pl/~cybula Język programowania Każdy język ma swoją składnię: słowa kluczowe instrukcje

Bardziej szczegółowo

Język C - podstawowe informacje

Język C - podstawowe informacje Język C - podstawowe informacje Michał Rad AGH Laboratorium Maszyn Elektrycznych 2014-12-05 Outline Program w języku C Funkcje Składnia Instrukcje sterujace Na koniec... Po kolei napisać program (zwykły

Bardziej szczegółowo

JIP. Analiza składni, gramatyki

JIP. Analiza składni, gramatyki JIP Analiza składni, gramatyki Książka o różnych językach i paradygmatach 2 Polecam jako obowiązkową lekturę do przeczytania dla wszystkich prawdziwych programistów! Podsumowanie wykładu 2 3 Analiza leksykalna

Bardziej szczegółowo

KURS C/C++ WYKŁAD 1. Pierwszy program

KURS C/C++ WYKŁAD 1. Pierwszy program KURS C/C++ WYKŁAD 1 Pierwszy program Tworzenie programu odbywa sie w dwóch etapach: 1. opracowanie kodu źródłowego 2. generowanie kodu wynikowego Pierwszy etap polega na zapisaniu algorytmu za pomocą instrukcji

Bardziej szczegółowo

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

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main. Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo

Bardziej szczegółowo

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

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1 Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem

Bardziej szczegółowo

Gramatyki atrybutywne

Gramatyki atrybutywne Gramatyki atrybutywne, część 1 (gramatyki S-atrybutywne Teoria kompilacji Dr inŝ. Janusz Majewski Katedra Informatyki Gramatyki atrybutywne Do przeprowadzenia poprawnego tłumaczenia, oprócz informacji

Bardziej szczegółowo

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania 1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja nie ma parametru i zwraca wartość na zewnątrz. nie ma parametru i nie zwraca wartości na zewnątrz. ma parametr o nazwie void i zwraca

Bardziej szczegółowo

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

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada Spis treści 1 Wprowadzenie 1 2 Dane i kod 2 3 Wyrażenia 2 3.1 Operacje arytmetyczne i logiczne.................. 2 3.2 Podstawowe

Bardziej szczegółowo

Programowanie Proceduralne

Programowanie Proceduralne Programowanie Proceduralne Makefile Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 14 Co to jest Makefile Makefile jest plikiem reguł dla programu make. Wykorzystywany jest

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Przemysław Gawroński D-10, p. 234 Wykład 1 8 października 2018 (Wykład 1) Wstęp do programowania 8 października 2018 1 / 12 Outline 1 Literatura 2 Programowanie? 3 Hello World (Wykład

Bardziej szczegółowo

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

Języki skryptowe w programie Plans

Języki skryptowe w programie Plans Języki skryptowe w programie Plans Warsztaty uŝytkowników programu PLANS Kościelisko 2010 Zalety skryptów Automatyzacja powtarzających się czynności Rozszerzenie moŝliwości programu Budowa własnych algorytmów

Bardziej szczegółowo

Język ludzki kod maszynowy

Język ludzki kod maszynowy Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza

Bardziej szczegółowo

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona

Bardziej szczegółowo

Metody kompilacji Wykłady 4-5

Metody kompilacji Wykłady 4-5 Metody kompilacji Wykłady 4-5 Analiza Leksykalna Wstęp Analizator leksykalny odczytuje znaki z wejścia, rozpoznaje leksemy i produkuje tokeny. Wraz z symbolem terminalnym, który jest używany przez parser,

Bardziej szczegółowo

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO Rozdział 1. Wybór i instalacja kompilatora języka Pascal 1.1. Współczesne wersje kompilatorów Pascala 1.2. Jak zainstalować

Bardziej szczegółowo

Podstawy programowania w C++

Podstawy programowania w C++ Podstawy programowania w C++ Liczby w jaki sposób komputery je widzą? Opracował: Andrzej Nowak Bibliografia: CPA: PROGRAMMING ESSENTIALS IN C++ https://www.netacad.com Czy wiesz, jak komputery wykonują

Bardziej szczegółowo

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis i cz. 2 Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 i cz. 2 2 i cz. 2 3 Funkcje i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje instrukcje } i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje

Bardziej szczegółowo

Cw.12 JAVAScript w dokumentach HTML

Cw.12 JAVAScript w dokumentach HTML Cw.12 JAVAScript w dokumentach HTML Wstawienie skryptu do dokumentu HTML JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.skrypty Java- Script mogą być zagnieżdżane

Bardziej szczegółowo

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana Wykład Materiały bazują częściowo na slajdach Marata Dukhana Języki programowania Kompilowane np. C, C++, Pascal Interpretowane np. JavaScript, PHP, Python, VBA Pośrednie np. Java, C# Znane kompilatory

Bardziej szczegółowo

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych 1. Wstawianie skryptu na stroną: Laboratorium 1 Do umieszczenia skryptów na stronie służy znacznik: //dla HTML5 ...instrukcje skryptu //dla HTML4 ...instrukcje

Bardziej szczegółowo

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA Python wprowadzenie Warszawa, 24 marca 2017 Python to język: nowoczesny łatwy w użyciu silny można pisać aplikacje Obiektowy klejący może być zintegrowany z innymi językami np. C, C++, Java działający

Bardziej szczegółowo

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

Zajęcia P2AM. Analizator składniowy (Flex + Bison, Linux) Zajęcia P2AM. Analizator składniowy (Flex + Bon, Lux) 1. Cel ćwiczeń Celem ćwiczeń jest stworzenie analizatora składniowego dla języka będącego podzbiorem języka wysokiego poziomu (Ada lub Modula2). Przy

Bardziej szczegółowo

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

Temat 1: Podstawowe pojęcia: program, kompilacja, kod Temat 1: Podstawowe pojęcia: program, kompilacja, kod wynikowy. Przykłady najprostszych programów. Definiowanie zmiennych. Typy proste. Operatory: arytmetyczne, przypisania, inkrementacji, dekrementacji,

Bardziej szczegółowo

JAO - Wprowadzenie do Gramatyk bezkontekstowych

JAO - Wprowadzenie do Gramatyk bezkontekstowych JAO - Wprowadzenie do Gramatyk bezkontekstowych Definicja gramatyki bezkontekstowej Podstawowymi narzędziami abstrakcyjnymi do opisu języków formalnych są gramatyki i automaty. Gramatyka bezkontekstowa

Bardziej szczegółowo

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

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik Wykład VII Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Kompilacja Kompilator C program do tłumaczenia kodu źródłowego na język maszynowy. Preprocesor

Bardziej szczegółowo

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

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, Lista 3 Zestaw I Zadanie 1. Zaprojektować i zaimplementować funkcje: utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, zapisz

Bardziej szczegółowo

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

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak Katedra Elektrotechniki Teoretycznej i Informatyki wykład 12 - sem.iii M. Czyżak Język C - preprocesor Preprocesor C i C++ (cpp) jest programem, który przetwarza tekst programu przed przekazaniem go kompilatorowi.

Bardziej szczegółowo