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

Save this PDF as:
 WORD  PNG  TXT  JPG

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

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

Transkrypt

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

2 Wprowadzenie Dana jest forma zdaniowa α (T N) Czy α L(G)? Analiza składniowa (2) Po wprowadzeniu podstawowych pojęć z zakresu analizy składniowej takich jak: -Gramatyka, -Zdanie, -Forma zdaniowa, -Wyprowadzenie, -Drzewo wyprowadzenia nadszedł czas aby przyjrzeć się sposobom realizacji rozbioru składniowego. Załóżmy, że dana jest forma zdaniowa alfa oraz gramatyka G. Pytanie brzmi, czy forma ta należy do języka generowanego przez gramatykę G? 2

3 Metoda zstępująca Poszukiwanie lewostronnego wyprowadzenia dla ciągu wejściowego Budowa drzewa wyprowadzenia dla wejścia zaczynając od korzenia i tworząc wierzchołki zgodnie z porządkiem preorder * S α Analiza składniowa (3) Rozpoczniemy od metody zstępującej, która jest de facto poszukiwaniem lewostronnego wyprowadzenia dla zdania będącego ciągiem wejściowym. Metodę tę można również omawiać jako budowę drzewa wyprowadzenia dla wejścia. Rozpoczynając od korzenia, wierzchołki tworzy się zgodnie z porządkiem preorder. To co odróżnia tę metodę od metody wstępującej, która omawiana będzie na następnym wykładzie to fakt, iż przetwarzanie rozpoczynamy od symbolu startowego a następnie stosujemy wyprowadzenie tak długo aż osiągniemy zdanie wejściowe, lub odpowiedź, iż nie da się wygenerować takiego zdania. 3

4 Metoda zstępująca 1. E ( E ) 2. E + α = (((+))) Analiza składniowa (4) Przyjrzyjmy się przykładowi. Dana jest gramatyka generująca język, do którego należą zdania: +, (+), ((+)), (((+))), itd., czyli albo pojedynczy plus, albo plus ujęty w nawiasy. Liczba nawiasów otwierających musi być równa liczbie nawiasów zamykających. Pytanie brzmi, czy zdanie: (((+))) należy do języka generowanego przez tą gramatykę? Oczywiście już na pierwszy rzut oka jesteśmy w stanie odpowiedzieć, że tak, ale przyjrzyjmy się mechanizmowi postępowania zanim przejdziemy do trudniejszych przypadków. 4

5 Metoda zstępująca 1. E ( E ) 2. E + E E ( E ) α = (((+))) Analiza składniowa (5) Przetwarzanie rozpoczynamy od symbolu startowego (czyli E). Wykorzystując pierwszą produkcję stosujemy lewostronne bezpośrednie wyprowadzenie. 5

6 Metoda zstępująca 1. E ( E ) 2. E + E E ( E ) (E) E ( E ) ls α = (((+))) Analiza składniowa (6) Ponieważ ciąg wejściowy różni się od formy zdaniowej, którą uzyskaliśmy, kontynuujemy procedurę. Ponownie stosujemy lewostronne bezpośrednie wyprowadzenie i ponownie wykorzystujemy pierwszą produkcję. 6

7 Metoda zstępująca E E ( E ) (E) E ( E ) ls ((E)) E ( E ) ls 1. E ( E ) 2. E + α = (((+))) Analiza składniowa (7) Ciąg wejściowy nadal różni się od uzyskanej formy zdaniowej. Ponownie stosujemy lewostronne bezpośrednie wyprowadzenie i ponownie wykorzystujemy pierwszą produkcję. 7

8 Metoda zstępująca E E ( E ) (E) E ( E ) ls ((E)) E ( E ) ls (((E))) E + ls 1. E ( E ) 2. E + α = (((+))) Analiza składniowa (8) Ciąg wejściowy nadal różni się od uzyskanego wyprowadzenia. Widzimy natomiast, że wyprowadzenie zawiera już 3 nawiasy otwierające i 3 nawiasy zamykające. W bezpośrednim wyprowadzeniu wykorzystujemy więc drugą produkcję zastępując nieterminal E plusem. 8

9 Metoda zstępująca E E ( E ) (E) E ( E ) ls ((E)) E ( E ) ls (((E))) E + ls (((+))) ls 1. E ( E ) 2. E + α = (((+))) Analiza składniowa (9) W ten oto sposób uzyskaliśmy ciąg wejściowy. Analiza zakończyła się sukcesem. 9

10 Metoda zstępująca 1. zdanie podmiot orzeczenie 2. podmiot przymiotnik rzeczownik 3. orzeczenie czasownik dopełnienie 4. dopełnienie rzeczownik 5. przymiotnik małe 6. czasownik wypiło 7. rzeczownik dziecko 8. rzeczownik mleko α = małe dziecko wypiło mleko Analiza składniowa (10) Kolejny przykład rozważymy wykorzystując do tego celu dobrze znaną z poprzedniego wykładu gramatykę. Sprawdzimy czy zdanie: małe dziecko wypiło mleko należy do języka generowanego przez tą gramatykę. Tym razem spojrzymy na metodę zstępującą jak na drzewo wyprowadzenia, które budujemy rozpoczynając od korzenia. 10

11 Metoda zstępująca 1. zdanie podmiot orzeczenie 2. podmiot przymiotnik rzeczownik 3. orzeczenie czasownik dopełnienie 4. dopełnienie rzeczownik 5. przymiotnik małe 6. czasownik wypiło 7. rzeczownik dziecko 8. rzeczownik mleko zdanie α = małe dziecko wypiło mleko Analiza składniowa (11) Budowę drzewa rozpoczynamy od korzenia, czyli od symbolu startowego. Symbolem startowym w rozważanej gramatyce jest symbol zdanie. 11

12 Metoda zstępująca 1. zdanie podmiot orzeczenie 2. podmiot przymiotnik rzeczownik 3. orzeczenie czasownik dopełnienie 4. dopełnienie rzeczownik 5. przymiotnik małe 6. czasownik wypiło 7. rzeczownik dziecko 8. rzeczownik mleko zdanie podmiot orzeczenie α = małe dziecko wypiło mleko Analiza składniowa (12) Zgodnie z pierwszą produkcją możemy dokonać wyprowadzenia dwóch symboli: podmiot oraz orzeczenie. 12

13 Metoda zstępująca 1. zdanie podmiot orzeczenie 2. podmiot przymiotnik rzeczownik 3. orzeczenie czasownik dopełnienie 4. dopełnienie rzeczownik 5. przymiotnik małe 6. czasownik wypiło 7. rzeczownik dziecko 8. rzeczownik mleko zdanie podmiot orzeczenie przymiotnik rzeczownik α = małe dziecko wypiło mleko Analiza składniowa (13) Pamiętając, że budujemy drzewo tworząc wierzchołki zgodnie z porządkiem preorder, przechodzimy do bezpośredniego wyprowadzenia dla symbolu podmiot. Wykorzystując drugą produkcję tworzymy dwa nowe węzły drzewa przymiotnik oraz rzeczownik. 13

14 Metoda zstępująca 1. zdanie podmiot orzeczenie 2. podmiot przymiotnik rzeczownik 3. orzeczenie czasownik dopełnienie 4. dopełnienie rzeczownik 5. przymiotnik małe 6. czasownik wypiło 7. rzeczownik dziecko 8. rzeczownik mleko zdanie podmiot orzeczenie przymiotnik rzeczownik Małe α = małe dziecko wypiło mleko Analiza składniowa (14) Dokonujemy wyprowadzenia symbolu małe z symbolu przymiotnik zgodnie z produkcją piątą. 14

15 Metoda zstępująca 1. zdanie podmiot orzeczenie 2. podmiot przymiotnik rzeczownik 3. orzeczenie czasownik dopełnienie 4. dopełnienie rzeczownik 5. przymiotnik małe 6. czasownik wypiło 7. rzeczownik dziecko 8. rzeczownik mleko zdanie podmiot orzeczenie przymiotnik rzeczownik Małe α = małe dziecko wypiło mleko dziecko Analiza składniowa (15) Dokonujemy wyprowadzenia symbolu dziecko z symbolu rzeczownik zgodnie z produkcją siódmą. 15

16 Metoda zstępująca 1. zdanie podmiot orzeczenie 2. podmiot przymiotnik rzeczownik 3. orzeczenie czasownik dopełnienie 4. dopełnienie rzeczownik 5. przymiotnik małe 6. czasownik wypiło 7. rzeczownik dziecko 8. rzeczownik mleko zdanie podmiot orzeczenie przymiotnik rzeczownik czasownik dopełnienie Małe dziecko α = małe dziecko wypiło mleko Analiza składniowa (16) Dokonujemy wyprowadzenia symboli czasownik oraz dopełnienie z symbolu orzeczenie zgodnie z produkcją trzecią. 16

17 Metoda zstępująca 1. zdanie podmiot orzeczenie 2. podmiot przymiotnik rzeczownik 3. orzeczenie czasownik dopełnienie 4. dopełnienie rzeczownik 5. przymiotnik małe 6. czasownik wypiło 7. rzeczownik dziecko 8. rzeczownik mleko zdanie podmiot orzeczenie przymiotnik rzeczownik czasownik dopełnienie α = małe dziecko wypiło mleko Małe dziecko wypiło Analiza składniowa (17) Dokonujemy wyprowadzenia symbolu wypiło z symbolu czasownik zgodnie z produkcją szóstą. 17

18 Metoda zstępująca 1. zdanie podmiot orzeczenie 2. podmiot przymiotnik rzeczownik 3. orzeczenie czasownik dopełnienie 4. dopełnienie rzeczownik 5. przymiotnik małe 6. czasownik wypiło 7. rzeczownik dziecko 8. rzeczownik mleko zdanie podmiot orzeczenie przymiotnik rzeczownik czasownik dopełnienie rzeczownik α = małe dziecko wypiło mleko Małe dziecko wypiło Analiza składniowa (18) Dokonujemy wyprowadzenia symbolu rzeczownik z symbolu dopełnienie zgodnie z produkcją czwartą. 18

19 Metoda zstępująca 1. zdanie podmiot orzeczenie 2. podmiot przymiotnik rzeczownik 3. orzeczenie czasownik dopełnienie 4. dopełnienie rzeczownik 5. przymiotnik małe 6. czasownik wypiło 7. rzeczownik dziecko 8. rzeczownik mleko zdanie podmiot orzeczenie przymiotnik rzeczownik czasownik dopełnienie rzeczownik α = małe dziecko wypiło mleko Małe dziecko wypiło mleko Analiza składniowa (19) Wyprowadzając symbol mleko z symbolu rzeczownik tworzymy ostatni liść w drzewie wyprowadzenia. Liście drzewa czytane w porządku preorder tworzą zdanie wejściowe. 19

20 Metoda zstępująca (nawroty) 1. S a A d 2. S a B 3. A b 4. A c 5. B c c d 6. B d d c α = accd Analiza składniowa (20) Ostatni rozpatrywany przykład będzie nieco bardziej skomplikowany. Na slajdzie przedstawiona została gramatyka oraz zdanie stanowiące ciąg wejściowy. Pytanie brzmi czy zdanie to należy do języka generowanego przez tą gramatykę? Sprawdźmy! 20

21 Metoda zstępująca (nawroty) 1. S a A d 2. S a B 3. A b 4. A c 5. B c c d 6. B d d c S α = accd Analiza składniowa (21) Rozpoczynamy budowę drzewa wyprowadzenia od symbolu startowego gramatyki. W rozpatrywanej gramatyce jest to symbol S. 21

22 Metoda zstępująca (nawroty) 1. S a A d 2. S a B 3. A b 4. A c 5. B c c d 6. B d d c a S A d α = accd Analiza składniowa (22) Kolejne węzły drzewa tworzymy stosując bezpośrednie wyprowadzenie. Wykorzystujemy produkcję pierwszą. Pierwszy symbol z wejścia jest identyczny, więc przechodzimy do rozwinięcia węzła, w którym znajduje się nieterminal A. 22

23 Metoda zstępująca (nawroty) 1. S a A d 2. S a B 3. A b 4. A c 5. B c c d 6. B d d c a S A b d α = accd Analiza składniowa (23) Wykorzystując produkcję, dla A tworzymy nowy liść w drzewie wyprowadzenia, którym jest terminal b. Ponieważ znaleźliśmy się w sytuacji, w której liście drzewa nie są równe ciągowi wejściowemu, więc musimy dokonać nawrotu i spróbować dokonać innego wyprowadzenia. 23

24 Metoda zstępująca (nawroty) 1. S a A d 2. S a B 3. A b 4. A c 5. B c c d 6. B d d c a S A c d α = accd Analiza składniowa (24) Usuwamy liść zawierający terminal b. W jego miejsce próbujemy wstawić inne rozwinięcie nietermianala A. Tym razem skorzystamy z produkcji czwartej. W wyniku bezpośredniego wyprowadzenia powstaje liść z terminalem c. Liście drzewa to acd. Ciąg wejściowy to accd. Ponieważ ciągi te są różne, musimy dokonać kolejnego nawrotu i spróbować innych wyprowadzeń. 24

25 Metoda zstępująca (nawroty) 1. S a A d 2. S a B 3. A b 4. A c 5. B c c d 6. B d d c S a B α = accd Analiza składniowa (25) Cofamy się więc aż do symbolu startowego (S) i wykorzystujemy drugą produkcję do utworzenia dwóch węzłów. 25

26 Metoda zstępująca (nawroty) 1. S a A d 2. S a B 3. A b 4. A c 5. B c c d 6. B d d c S a B c c d α = accd Analiza składniowa (26) Po rozwinięciu nieterminala B uzyskujemy oczekiwany rezultat. Liście drzewa: accd są identyczne z ciągiem wejściowym. 26

27 Proste gramatyki LL(1) Prostą gramatyką LL(1) jest gramatyka bezkontekstowa, która: nie zawiera ε-produkcji (pustych produkcji) A N, prawe strony produkcji rozpoczynają się od różnych symboli terminalnych Analiza składniowa (27) Wprowadzimy teraz definicję prostej gramatyki LL(1). Proste gramatyki LL(1) to klasa gramatyk, które mogą być automatycznie przetwarzane poprzez analizatory bazujące na metodzie zstępującej. Prostą gramatyką LL(1) jest gramatyka bezkontekstowa, która: -nie zawiera pustych produkcji -dla każdego nieterminala A prawe strony produkcji A rozpoczynają się od różnych symboli terminalnych 27

28 Metoda zejść rekurencyjnych Osobna funkcja dla każdego nieterminala Na podstawie symbolu znajdującego się na wejściu podejmowana jest decyzja o wyborze produkcji. Dla nieterminala następuje wywołanie funkcji związanej z tym nieterminalem Dla terminala następuje sprawdzenie jego zgodności z symbolami, których funkcja oczekuje na wejściu Analiza składniowa (28) Przejdźmy teraz do omówienia popularnej implementacji metody zstępującej, którą jest metoda zejść rekurencyjnych. Do prezentacji metody wykorzystamy język C. Oto podstawowe zasady zgodnie, z którymi piszemy analizator: -Dla każdego nieterminala tworzymy osobną funkcję, -Decyzję o wyborze produkcji analizator podejmuje na podstawie symbolu znajdującego się na wejściu -Dla nieterminala następuje wywołanie funkcji związanej z tym nieterminalem -Dla terminala następuje sprawdzenie jego zgodności z symbolami, których funkcja oczekuje na wejściu. 28

29 Metoda zejść rekurencyjnych char biezacy; void wczytaj(char); void sygnalizuj_blad(); char nastepny_symbol(); void wczytaj(char symbol) { if (biezacy == symbol) { biezacy = nastepny_symbol(); else { sygnalizuj_blad(); void sygnalizuj_blad() { puts("syntax Error!"); exit(-1); char nastepny_symbol() { return getchar(); Analiza składniowa (29) Zacznijmy od zdefiniowania kilku funkcji pomocniczych, które będziemy wykorzystywali w dalszej części wykładu. Na początek funkcja wczytaj. Funkcja ta jest odpowiedzialna za sprawdzenie czy na wejściu znajduje się oczekiwany symbol leksykalny. Jeśli tak, to wczytywany jest następny symbol z wejścia. W przeciwnym razie wywoływana jest funkcja sygnalizuj błąd, która wypisuje informację o błędzie i kończy pracę analizatora. W celu pobrania kolejnego symbolu leksykalnego wywoływana jest funkcja następny_symbol. W tym miejscu powinien być wpięty analizator leksykalny, który po odpowiednim przetworzeniu strumienia danych wejściowych zwróci gotowe symbole do analizatora składniowego. W rozważanym analizatorze zastosowano uproszczony mechanizm polegający na bezpośrednim przekazywaniu znaków znajdujących się w strumieniu danych wejściowych do analizatora składniowego. 29

30 Metoda zejść rekurencyjnych E ( E ) E + void E() { if (biezacy == '(') { wczytaj('('); E(); wczytaj(')'); else if (biezacy == '+') { wczytaj('+'); else { sygnalizuj_blad(); Analiza składniowa (30) Przygotujmy analizator składniowy dla prostej gramatyki, którą przedstawiliśmy na początku wykładu. Przypomnijmy, że gramatyka ta ma za zadanie zweryfikować czy dane wejściowe zawierają symbol plus ujęty w zero lub więcej nawiasów okrągłych. 30

31 Metoda zejść rekurencyjnych E ( E ) E + void E() { if (biezacy == '(') { wczytaj('('); E(); wczytaj(')'); else if (biezacy == '+') { wczytaj('+'); else { sygnalizuj_blad(); Analiza składniowa (31) Przyjrzyjmy się na slajdzie w jaki sposób skonstruowana jest funkcja dla nieterminala E. Pierwsza produkcja tworzy nam pierwszy blok warunkowy w ciele funkcji. Jeśli bieżący symbol jest nawiasem otwierającym, to wykonują się: -Wywołanie funkcji wczytaj() dla nawiasu otwierającego, -Rekurencyjne wywołanie funkcji E(), -oraz wywołanie funkcji wczytaj() dla nawiasu zamykającego. W przeciwnym razie sprawdzane jest czy bieżący symbol jest plusem. Jeśli tak, to wywoływana jest funkcja wczytaj() dla plusa. Jeśli bieżący symbol nie jest ani nawiasem otwierającym ani plusem, to wywoływana jest funkcja informująca o błędzie i kończone jest działanie analizatora. 31

32 Metoda zejść rekurencyjnych E ( E ) E + char biezacy; int main() { biezacy = nastepny_symbol(); E(); puts("dane OK"); return 0; Analiza składniowa (32) Oto pozostały fragment kodu służący do uruchomienia całości analizatora. Przed wywołaniem funkcji, która jest implementacją symbolu startowego należy zainicjalizować zmienną bieżący odpowiednią wartością. Jeśli przetwarzanie zakończy się pomyślnie to wypisany zostaje komunikat o sukcesie. Proszę zwrócić uwagę, że komunikat ten zostanie wypisany również w momencie gdy na wejściu pozostaną jeszcze nie odczytane symbole. Przykładowo jeśli strumień wejściowy składałby się z następujących znaków: (+)+, to analizator poinformuje nas o sukcesie. Aby zapobiec takiej sytuacji, warto rozszerzyć analizator o sprawdzenie czy na wejściu nie pozostały zbędne symbole. 32

33 Metoda zejść rekurencyjnych E ( E ) E + char biezacy; int main() { biezacy = nastepny_symbol(); E(); if (biezacy!= EOF) { sygnalizuj_blad(); else { puts("dane OK"); return 0; Analiza składniowa (33) Oto poprawiona funkcja main(), która zawiera już takie sprawdzenie. 33

34 Metoda zejść rekurencyjnych A B a B b B B c void B() { if (biezacy == 'b') { wczytaj('b'); B(); else if (biezacy == 'c'){ wczytaj('c'); else { sygnalizuj_blad(); Analiza składniowa (34) Rozważmy teraz kolejną gramatykę oraz przykładową implementację w języku C. Zacznijmy od nieterminala B. Implementacja jest analogiczna do tej z poprzedniego przykładu. Najpierw sprawdzamy bieżący symbol a następnie na jego podstawie decydujemy którą produkcję wybrać. Jeśli w produkcji jest terminal, to odczytujemy go z wejścia. Jeśli jest nieterminal, to wywołujemy funkcję związaną z tym nieterminalem. 34

35 Metoda zejść rekurencyjnych A B a B b B B c void A() { if (biezacy ==???... Analiza składniowa (35) Zastanówmy się teraz nad implementacją funkcji odpowiadającej nieterminalowi A. W pierwszym kroku powinniśmy sprawdzić czy symbol bieżący jest odpowiednim terminalem. Niestety produkcja rozpoczyna się od nieterminala... 35

36 Zbiór FIRST Zbiór FIRST(X), gdzie X jest dowolną sekwencją symboli tworzy się zgodnie z poniższymi regułami: Jeśli X T, to FIRST(X)={X Jeśli X ε to ε FIRST(X) Jeśli X N i X Y 1 Y 2...Y n, to w FIRST(X) jeśli istnieje takie i, że w FIRST(Y i ) a ε jest we wszystkich FIRST(Y 1 )...FIRST(Y i-1 ) Jeśli ε FIRST(Y i ) dla wszystkich i, to ε FIRST(X) Analiza składniowa (36) Aby poradzić sobie z tym problemem wprowadzimy definicję zbioru FIRST. Nieformalnie można powiedzieć, że zbiór FIRST jest zbiorem zawierającym terminale, które mogą rozpoczynać daną sekwencję. Przyjrzyjmy się teraz formalnej definicji. Zbiór FIRST(X), gdzie X jest dowolną sekwencją symboli tworzy się zgodnie z poniższymi regułami: -Jeśli X jest terminalem, to X należy do zbioru FIRST(X) -Jeśli X jest symbolem pustym to epsilon należy do zbioru FIRST(X) -Jeśli X jest nieterminalem i X->Y 1 Y 2...Y n, to w należy do FIRST(X) jeśli istnieje takie i, że w należy do FIRST(Y i ) a epsilon jest we wszystkich zbiorach FIRST(Y 1 )...FIRST(Y i-1 ) -Jeśli epsilon należy do FIRST(Y i ) dla wszystkich i, to epsilon należy do FIRST(X) 36

37 Zbiór FIRST 1. zdanie podmiot orzeczenie 2. podmiot przymiotnik rzeczownik 3. orzeczenie czasownik dopełnienie 4. dopełnienie rzeczownik 5. przymiotnik małe 6. czasownik wypiło 7. rzeczownik dziecko 8. rzeczownik mleko FIRST(mleko)={mleko FIRST(zdanie)= FIRST(podmiot orzeczenie)= FIRST(przymiotnik rzeczownik orzeczenie)= FIRST(małe rzeczownik orzeczenie)= {małe Analiza składniowa (37) Przyjrzyjmy się jak wygląda obliczanie zbioru FIRST w praktyce. Zaczniemy od obliczenia zbioru FIRST(mleko) dla gramatyki przedstawionej na slajdzie. Ponieważ symbol mleko jest terminalem, więc zbiór FIRST(mleko) jest jednoelementowy i zawiera symbol mleko. Obliczmy teraz zbiór FIRST(zdanie). Tu sytuacja jest bardziej skomplikowana, gdyż zdanie jest nieterminalem. Zgodnie z zasadami podanymi na poprzednim slajdzie. Obliczamy więc zbiór FIRST rozważając prawą stronę produkcji nieterminala zdanie. W wyniku naszych obliczeń otrzymujemy jednoelementowy zbiór zawierający symbol małe. 37

38 Zbiór FIRST E ( E ) E ε FIRST(E) = FIRST (( E )) FIRST(ε) = { (, ε Analiza składniowa (38) Na slajdzie przedstawiono wyliczenie zbioru FIRST(E) dla gramatyki znajdującej się w ramce. Ponieważ istnieją dwie produkcje dla symbolu nieterminalnego E, więc rozpatrujemy je osobno. Z pierwszej produkcji do zbioru FIRST trafi (. Z drugiej produkcji natomiast do zbioru FIRST(E) trafi symbol epsilon. Zbiór FIRST(E) składa się więc z dwóch symboli: ( oraz epsilon. 38

39 Zbiór FIRST E E + T E T T T * F T F F ( E ) F id FIRST(T) = FIRST(T * F) FIRST(F) = FIRST(( E )) FIRST(id) = { (, id Analiza składniowa (39) Oto kolejny przykład wyliczenia zbioru FIRST. Na slajdzie przedstawiono zbiór FIRST(T) dla gramatyki znajdującej się w ramce. W gramatyce istnieją dwie produkcje dla nieterminala T, więc obie musimy rozważyć tworząc zbiór FIRST. Pierwsza produkcja jest lewostronnie rekurencyjna, dlatego musimy najpierw rozważyć drugą produkcję, aby zobaczyć czy do zbioru FIRST(T) nie trafi przypadkiem epsilon. Jeśli tak by się stało, to musielibyśmy wrócić do pierwszej produkcji i rozważać kolejne znaki w sekwencji. Po przeanalizowaniu drugiej produkcji widzimy jednak, że do zbioru FIRST(T) trafi ( oraz id. Ostatecznie zbiór FIRST(T) zawiera symbol nawiasu otwierającego oraz symbol id. 39

40 Metoda zejść rekurencyjnych Osobna funkcja dla każdego nieterminala Na podstawie symbolu znajdującego się na wejściu podejmowana jest decyzja o wyborze produkcji. Produkcja X α jest wybierana jeśli symbol na wejściu należy do FIRST(α) Dla nieterminala następuje wywołanie funkcji związanej z tym nieterminalem Dla terminala następuje sprawdzenie jego zgodności z symbolami, których funkcja oczekuje na wejściu Analiza składniowa (40) A oto uaktualniony opis zasad zgodnie, z którymi piszemy analizator w oparciu o metodę zejść rekurencyjnych. -Dla każdego nieterminala tworzymy osobną funkcję, -Decyzję o wyborze produkcji analizator podejmuje na podstawie symbolu znajdującego się na wejściu. Aby wybrać konkretną produkcję, symbol na wejściu musi należeć do zbioru FIRST od prawej strony tej produkcji. -Dla nieterminala następuje wywołanie funkcji związanej z tym nieterminalem -Dla terminala następuje sprawdzenie jego zgodności z symbolami, których funkcja oczekuje na wejściu. 40

41 Metoda zejść rekurencyjnych A B a B b B B c FIRST(B a) = { b, c Teraz OK void A() { if ((biezacy == 'b') (biezacy == 'c')) { B(); wczytaj('a'); else { sygnalizuj_blad(); Analiza składniowa (41) Wróćmy teraz do pozostawionej implementacji. Po obliczeniu zbioru FIRST(B a) uzyskujemy brakującą informację i możemy kontynuować pisanie funkcji dla nieterminala A. W pierwszym bloku warunkowym sprawdzamy czy symbol bieżący jest jednym z elementów należących do zbioru FIRST(B a). Jeśli tak, to wykonujemy prawą stronę produkcji, czyli wywołanie funkcji związanej z nieterminalem B oraz funkcji wczytaj dla terminala a. 41

42 ε-produkcje A B a B b B B ε FIRST(B a) = { b, a void A() { if ((biezacy == 'b') (biezacy == 'a')) { B(); wczytaj('a'); else { sygnalizuj_blad(); Analiza składniowa (42) Zmieńmy teraz trochę gramatykę wprowadzając do niej pustą produkcję i spójrzmy jaki wpływ będzie miała taka zmiana na implementację. Ostatnia produkcja jest produkcją pustą. Zacznijmy od funkcji związanej z nieterminalem A. Ponieważ zmiana powoduje zmianę zbioru FIRST(B a), więc wprowadzamy niewielką korektę do kodu. 42

43 ε-produkcje A B a B b B B ε void B() { if (biezacy == 'b') { wczytaj('b'); B(); else { /* epsilon */ Analiza składniowa (43) Przyjrzyjmy się teraz implementacji funkcji dla nieterminala B. Pierwsza część związana z produkcją B -> b B pozostaje bez zmian. Druga część jest teraz odpowiedzialna za wygenerowanie symbolu pustego. Będzie ona wykonana dla każdego symbolu różnego od b. Łatwo dostrzec, że pomimo, iż gramatyka nie jest już gramatyką LL(1) to przy założeniu, że epsilon produkcja wybrana zostanie tylko w przypadku gdy żadna inna produkcja nie będzie pasowała, można przygotować implementację za pomocą metody zejść rekurencyjnych. 43

44 Lewostronna rekurencja A a B a B ε B B b FIRST(B b) = { ε, b??? void B() { if (biezacy == 'b') { B(); wczytaj('b'); else { /* epsilon */ Analiza składniowa (44) Zajmijmy się teraz ograniczeniami metody zejść rekurencyjnych. Na początek przyjrzyjmy się gramatyce. Stosując znany już wzorzec wyliczamy zbiór FIRST dla pierwszej i trzeciej produkcji, czyli dla FIRST(a B a) oraz FIRST(B b). Implementujemy funkcję dla nieterminala B. Przykładowa implementacja wygenerowana na bazie gramatyki znajduje się na slajdzie. Proszę zwrócić uwagę, że już dla ciągu symboli leksykalnych: aba nasz analizator nie będzie działał poprawnie. Po wczytaniu symbolu a przejdziemy do rozważanej funkcji B(). Tu nasz program zapętli się wykonując w nieskończoność (a w zasadzie do momentu przepełnienia stosu) rekurencyjne wywołanie funkcji B(). Przyczyną takiego zachowania jest wykorzystanie w gramatyce lewostronnej rekurencji. 44

45 Lewostronna rekurencja Gramatyka lewostronnie rekursywna * A A α A N; α (N T) Analiza składniowa (45) Przypomnijmy sobie czym jest lewostronna rekurencja. Gramatykę nazywamy rekurencyjną jeśli w wyprowadzeniu dla danego symbolu nieterminalnego występuje ten sam symbol. Jeśli symbol ten występuje na skrajnie lewej pozycji, to mamy do czynienia z lewostronną rekurencją. 45

46 Eliminacja lewostronnej rekurencji Jeśli produkcje zawierają konstrukcje lewostronnie rekurencyjne, należy przepisać gramatykę dokonując eliminacji lewostronnej rekurencji. A Aα A β A βa A αa A ε Analiza składniowa (46) W metodzie zejść rekurencyjnych jeśli produkcje zawierają konstrukcje lewostronnie rekurencyjne, należy przepisać gramatykę dokonując eliminacji lewostronnej rekurencji. Na slajdzie przedstawiono szablon zgodnie z którym można wyeliminować bezpośrednią lewostronną rekurencję. 46

47 Eliminacja lewostronnej rekurencji A a B a B ε B B b A a B a B B B b B B ε A Aα A β A βa A αa A ε Analiza składniowa (47) Przyjrzyjmy się naszej gramatyce. Na niebieskim tle pokazano gramatykę zawierającą lewostronną rekurencję. Na białym tle znajduje się gramatyka z wyeliminowaną lewostronną rekurencją poprzez zastosowanie przedstawionego szablonu. Oto zastosowane podstawienia: A = B Alfa = b Beta = epsilon Oczywiście epsilon to symbol pusty i nie ma sensu pisanie w produkcji drugiej epsilon B. Dlatego też powstała produkcja zawierająca po prawej stronie jedynie symbol B. 47

48 Eliminacja lewostronnej rekurencji A a B a B ε B B b A a B a B B B b B B ε A a B a B b B B ε A Aα A β A βa A αa A ε Analiza składniowa (48) Produkcję B -> B możemy wyeliminować z naszej gramatyki, gdyż nie niesie ona żadnej istotnej informacji. Ostatecznie otrzymujemy uproszczoną gramatykę. 48

49 Eliminacja lewostronnej rekurencji A a B a B b B B ε Teraz OK void B() { if (biezacy == 'b') { wczytaj('b'); B(); else { /* epsilon */ Analiza składniowa (49) Wróćmy do implementacji. Po zmodyfikowaniu gramatyki nie ma problemu ze stworzeniem poprawnego kodu. Ostateczną wersję gramatyki oraz implementację funkcji dla symbolu nieterminalnego B przedstawiono na slajdzie. 49

50 Nierozróżnialność produkcji A a B a B b B b B??? void B() { if (biezacy == 'b') { wczytaj('b'); else if (biezacy == 'b') { wczytaj('b'); B(); else { sygnalizuj_blad(); Analiza składniowa (50) A oto kolejny problem, który może pojawić się podczas implementacji analizatora składniowego w oparciu o metodę zejść rekurencyjnych. Na slajdzie przedstawiono kolejną gramatykę oraz implementację symbolu nieterminalnego B. Problem, który tu się pojawił, to nierozróżnialność produkcji. Należy pamiętać, że analizator, który tworzymy należy do rodziny analizatorów przewidujących. Wybiera on odpowiednią ścieżkę (czyli produkcję) podejmując decyzję w oparciu o symbol znajdujący się na wejściu. Nie jest wykonywane nawracanie. Aby móc spełnić te wymagania każda z produkcji danego symbolu nieterminalnego musi rozpoczynać się od innego symbolu terminalnego. W rozważanej gramatyce tak nie jest, gdyż FIRST(b) = FIRST(b B) = {b. Powoduje to, że wygenerowany kod nie jest poprawny. 50

51 Lewostronna faktoryzacja Jeśli nie można rozróżnić dwóch produkcji, gdyż rozpoczynają się od tego samego terminala, należy przepisać gramatykę dokonując lewostronnej faktoryzacji. A α A A α β 1 A β A α β 1 2 A β 2 Analiza składniowa (51) W metodzie zejść rekurencyjnych jeśli produkcje tego samego nieterminala rozpoczynają się od tego samego terminala, to należy przepisać gramatykę dokonując lewostronnej faktoryzacji. Na slajdzie przedstawiono szablon zgodnie z którym można tego dokonać. 51

52 Lewostronna faktoryzacja A a B a B b B b B A a B a B b B2 B2 ε B2 B A α A A α β 1 A β A α β 1 2 A β 2 Analiza składniowa (52) Przyjrzyjmy się naszej gramatyce. Na niebieskim tle pokazano gramatykę zawierającą 2 produkcję nieterminala B, które rozpoczynają się od symbolu b. Na białym tle znajduje się gramatyka po zastosowaniu lewostronnej faktoryzacji zgodnie z przedstawionym szablonem. Oto zastosowane podstawienia: A = B Alfa = b Beta1 = epsilon Beta2 = B 52

53 Lewostronna faktoryzacja A a B a B b B2 B2 ε B2 B Teraz OK void B() { if (biezacy == 'b') { wczytaj('b'); B2(); else { sygnalizuj_blad(); void B2() { if (biezacy == 'b') { B(); else { /* epsilon */ Analiza składniowa (53) A oto poprawiona gramatyka i działająca implementacja. Ponieważ symbol nieterminalny B został rozbity na dwa symbole B i B2, więc na slajdzie przedstawiono kod dla obu tych symboli. 53

54 Podsumowanie Proste gramatyki LL(1) Zbiór FIRST Analiza zstępująca Metoda zejść rekurencyjnych Eliminacja lewostronnej rekurencji Lewostronna faktoryzacja Analiza składniowa (54) Przejdźmy do podsumowania wykładu. W wykładzie podano definicję prostych gramatyk LL(1). Przedstawiono sposób obliczania zbioru FIRST. Następnie zaprezentowano sposób implementacji analizatora zstępującego oparty na metodzie zejść rekurencyjnych. Przedstawiono popularne problemy, na które może natrafić osoba wykorzystująca tę metodę oraz sposoby ich rozwiązywania. Pokazano eliminację lewostronnej rekurencji oraz lewostronną faktoryzację. 54

55 Literatura Aho A. V., Sethi R., Ullman J. D., Kompilatory Reguły, metody i narzędzia, WNT Tremblay J. P., Sorenson P. G., The Theory and Practice of Compiler Writing, McGraw-Hill, 1985 Wilhelm R., Maurer D., Compiler Design, Addison-Wesley 1995 Analiza składniowa (55) Więcej informacji na temat omówionych w wykładzie zagadnień można znaleźć w literaturze przedstawionej na slajdzie. 55

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class

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

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

Rekurencja (rekursja)

Rekurencja (rekursja) Rekurencja (rekursja) Rekurencja wywołanie funkcji przez nią samą wewnątrz ciała funkcji. Rekurencja może być pośrednia funkcja jest wywoływana przez inną funkcję, wywołaną (pośrednio lub bezpośrednio)

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

W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby

W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby Część XI C++ W folderze nazwisko36 program za każdym razem sprawdza oba warunki co niepotrzebnie obciąża procesor. Ten problem można rozwiązać stosując instrukcje if...else Instrukcja if wykonuje polecenie

Bardziej szczegółowo

Klasy abstrakcyjne i interfejsy

Klasy abstrakcyjne i interfejsy Klasy abstrakcyjne i interfejsy Streszczenie Celem wykładu jest omówienie klas abstrakcyjnych i interfejsów w Javie. Czas wykładu 45 minut. Rozwiązanie w miarę standardowego zadania matematycznego (i nie

Bardziej szczegółowo

Ćwiczenie: JavaScript Cookies (3x45 minut)

Ćwiczenie: JavaScript Cookies (3x45 minut) Ćwiczenie: JavaScript Cookies (3x45 minut) Cookies niewielkie porcje danych tekstowych, które mogą być przesyłane między serwerem a przeglądarką. Przeglądarka przechowuje te dane przez określony czas.

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

Wprowadzenie do kompilatorów

Wprowadzenie do kompilatorów Wprowadzenie do kompilatorów Czy ja kiedykolwiek napisz jaki kompilator? Jakie zadania ma do wykonania kompilator? Czy jzyk formalny to rodzaj jzyka programowania? Co to jest UML?, Czy ja kiedykolwiek

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

Pytania sprawdzające wiedzę z programowania C++

Pytania sprawdzające wiedzę z programowania C++ Pytania sprawdzające wiedzę z programowania C++ Wstęp 1. Zaprezentuj mechanikę tworzenia programu napisanego w języku C++. 2. Co to jest kompilacja? 3. Co to jest konsolidacja? 4. Co to jest kod wykonywalny?

Bardziej szczegółowo

0 + 0 = 0, = 1, = 1, = 0.

0 + 0 = 0, = 1, = 1, = 0. 5 Kody liniowe Jak już wiemy, w celu przesłania zakodowanego tekstu dzielimy go na bloki i do każdego z bloków dodajemy tak zwane bity sprawdzające. Bity te są w ścisłej zależności z bitami informacyjnymi,

Bardziej szczegółowo

Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10.

Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10. ZAMIANA LICZB MIĘDZY SYSTEMAMI DWÓJKOWYM I DZIESIĘTNYM Aby zamienić liczbę z systemu dwójkowego (binarnego) na dziesiętny (decymalny) należy najpierw przypomnieć sobie jak są tworzone liczby w ww systemach

Bardziej szczegółowo

do instrukcja while (wyrażenie);

do instrukcja while (wyrażenie); Instrukcje pętli -ćwiczenia Instrukcja while Pętla while (póki) powoduje powtarzanie zawartej w niej sekwencji instrukcji tak długo, jak długo zaczynające pętlę wyrażenie pozostaje prawdziwe. while ( wyrażenie

Bardziej szczegółowo

Warunek wielokrotnego wyboru switch... case

Warunek wielokrotnego wyboru switch... case Warunek wielokrotnego wyboru switch... case Działanie instrukcji switch jest zupełnie inne niż w przypadku instrukcji if o czym będziesz mógł się przekonać w niniejszym rozdziale. Różnice pomiędzy instrukcjami

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

Nierówność Krafta-McMillana, Kodowanie Huffmana

Nierówność Krafta-McMillana, Kodowanie Huffmana Nierówność Krafta-McMillana, Kodowanie Huffmana Kodowanie i kompresja informacji - Wykład 2 1 marca 2010 Test na jednoznaczna dekodowalność Kod a jest prefiksem kodu b jeśli b jest postaci ax. x nazywamy

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

Wykład 11. Konstrukcja drzew składniowych

Wykład 11. Konstrukcja drzew składniowych Wykład 11 Konstrukcja drzew składniowych Drzewa składniowe Wykorzystanie drzew składniowych jako reprezentacji pośredniej umożliwia oddzielenie translacji od analizy składniowej; Procedury translacji wywołane

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

Wprowadzenie do programowania języki i gramatyki formalne. dr hab. inż. Mikołaj Morzy

Wprowadzenie do programowania języki i gramatyki formalne. dr hab. inż. Mikołaj Morzy Wprowadzenie do programowania języki i gramatyki formalne dr hab. inż. Mikołaj Morzy plan wykładu wprowadzenie gramatyki podstawowe definicje produkcje i drzewa wywodu niejednoznaczność gramatyk hierarchia

Bardziej szczegółowo

for (inicjacja_warunkow_poczatkowych; wyrazenie_warunkowe; wyrazenie_zwiekszajace) { blok instrukcji; }

for (inicjacja_warunkow_poczatkowych; wyrazenie_warunkowe; wyrazenie_zwiekszajace) { blok instrukcji; } Pętle Pętle (ang. loops), zwane też instrukcjami iteracyjnymi, stanowią podstawę prawie wszystkich algorytmów. Lwia część zadań wykonywanych przez programy komputerowe opiera się w całości lub częściowo

Bardziej szczegółowo

Przeszukiwanie z nawrotami. Wykład 8. Przeszukiwanie z nawrotami. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279

Przeszukiwanie z nawrotami. Wykład 8. Przeszukiwanie z nawrotami. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279 Wykład 8 J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279 sformułowanie problemu przegląd drzewa poszukiwań przykłady problemów wybrane narzędzia programistyczne J. Cichoń, P. Kobylański

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

Temat: Algorytm kompresji plików metodą Huffmana

Temat: Algorytm kompresji plików metodą Huffmana Temat: Algorytm kompresji plików metodą Huffmana. Wymagania dotyczące kompresji danych Przez M oznaczmy zbiór wszystkich możliwych symboli występujących w pliku (alfabet pliku). Przykład M = 2, gdy plik

Bardziej szczegółowo

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

Gramatyki (1-2) Definiowanie języków programowania. Piotr Chrząstowski-Wachjtel Gramatyki (1-2) Definiowanie języków programowania Piotr Chrząstowski-Wachjtel Zagadnienia Jak zdefiniować język programowania? Gramatyki formalne Definiowanie składni Definiowanie semantyki l 2 Pożądane

Bardziej szczegółowo

Drzewa poszukiwań binarnych

Drzewa poszukiwań binarnych 1 Cel ćwiczenia Algorytmy i struktury danych Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet ielonogórski Drzewa poszukiwań binarnych Ćwiczenie

Bardziej szczegółowo

Wprowadzenie: języki, symbole, alfabety, łańcuchy Języki formalne i automaty. Literatura

Wprowadzenie: języki, symbole, alfabety, łańcuchy Języki formalne i automaty. Literatura Wprowadzenie: języki, symbole, alfabety, łańcuchy Języki formalne i automaty Dr inŝ. Janusz Majewski Katedra Informatyki Literatura Aho A. V., Sethi R., Ullman J. D.: Compilers. Principles, Techniques

Bardziej szczegółowo

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

Bardziej szczegółowo

5. OKREŚLANIE WARTOŚCI LOGICZNEJ ZDAŃ ZŁOŻONYCH

5. OKREŚLANIE WARTOŚCI LOGICZNEJ ZDAŃ ZŁOŻONYCH 5. OKREŚLANIE WARTOŚCI LOGICZNEJ ZDAŃ ZŁOŻONYCH Temat, którym mamy się tu zająć, jest nudny i żmudny będziemy się uczyć techniki obliczania wartości logicznej zdań dowolnie złożonych. Po co? możecie zapytać.

Bardziej szczegółowo

Podstawy Programowania Podstawowa składnia języka C++

Podstawy Programowania Podstawowa składnia języka C++ Podstawy Programowania Podstawowa składnia języka C++ Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r. Szablon programu w C++ Najprostszy program w C++ ma postać: #include #include

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303 Wykład 9 J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303 stos i operacje na stosie odwrotna notacja polska języki oparte na ONP przykłady programów J. Cichoń, P. Kobylański Wstęp

Bardziej szczegółowo

Szablony funkcji i szablony klas

Szablony funkcji i szablony klas Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument

Bardziej szczegółowo

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Algorytmy i struktury danych Laboratorium Drzewa poszukiwań binarnych 1 Cel ćwiczenia Ćwiczenie ma na celu zapoznanie studentów

Bardziej szczegółowo

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

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami 1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami Celem tych zajęć jest zrozumienie i oswojenie z technikami programowania przy pomocy wskaźników w języku C++. Proszę przeczytać rozdział 8.

Bardziej szczegółowo

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno Instrukcja laboratoryjna 5 Podstawy programowania 2 Temat: Drzewa binarne Przygotował: mgr inż. Tomasz Michno 1 Wstęp teoretyczny Drzewa są jedną z częściej wykorzystywanych struktur danych. Reprezentują

Bardziej szczegółowo

Platforma.NET. Laboratorium nr 1 Podstawy języka C#

Platforma.NET. Laboratorium nr 1 Podstawy języka C# Platforma.NET Laboratorium nr 1 Podstawy języka C# Ćwiczenie 1 1. Utwórz nowy projekt a. Z menu File wybierz New/Project b. W oknie dialogowym New Project określ następujące właściwości: typu projektu:

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

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

Algorytmy i struktury danych

Algorytmy i struktury danych POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI i TECHNIK INFORMACYJNYCH Algorytmy i struktury danych www.pk.edu.pl/~zk/aisd_hp.html Wykładowca: dr inż. Zbigniew Kokosiński zk@pk.edu.pl Wykład 5: Algorytmy

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

Programowanie deklaratywne

Programowanie deklaratywne Programowanie deklaratywne Artur Michalski Informatyka II rok Plan wykładu Wprowadzenie do języka Prolog Budowa składniowa i interpretacja programów prologowych Listy, operatory i operacje arytmetyczne

Bardziej szczegółowo

Zacznijmy więc pracę z repozytorium. Pierwsza konieczna rzecz do rozpoczęcia pracy z repozytorium, to zalogowanie się w serwisie:

Zacznijmy więc pracę z repozytorium. Pierwsza konieczna rzecz do rozpoczęcia pracy z repozytorium, to zalogowanie się w serwisie: Repozytorium służy do przechowywania plików powstających przy pracy nad projektami we w miarę usystematyzowany sposób. Sam mechanizm repozytorium jest zbliżony do działania systemu plików, czyli składa

Bardziej szczegółowo

Paradygmaty programowania

Paradygmaty programowania Paradygmaty programowania Jacek Michałowski, Piotr Latanowicz 15 kwietnia 2014 Jacek Michałowski, Piotr Latanowicz () Paradygmaty programowania 15 kwietnia 2014 1 / 12 Zadanie 1 Zadanie 1 Rachunek predykatów

Bardziej szczegółowo

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski Algorytmy i struktury danych Wykład 5: Drzewa Dr inż. Paweł Kasprowski pawel@kasprowski.pl Drzewa Struktury przechowywania danych podobne do list ale z innymi zasadami wskazywania następników Szczególny

Bardziej szczegółowo

Przykłady zastosowań funkcji tekstowych w arkuszu kalkulacyjnym

Przykłady zastosowań funkcji tekstowych w arkuszu kalkulacyjnym S t r o n a 1 Bożena Ignatowska Przykłady zastosowań funkcji tekstowych w arkuszu kalkulacyjnym Wprowadzenie W artykule zostaną omówione zagadnienia związane z wykorzystaniem funkcji tekstowych w arkuszu

Bardziej szczegółowo

Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem

Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem Moduł 1 1. Wprowadzenie do języka Python Python jest dynamicznym językiem interpretowanym. Interpretowany tzn. że kod, który napiszemy możemy natychmiast wykonać bez potrzeby tłumaczenia kodu programistycznego

Bardziej szczegółowo

Usuwanie lewostronnej rekursji. Usuwanie lewostronnej faktoryzacji. Wyznaczanie zbioru FIRST. Wyznaczanie zbioru FOLLOW. Konstrukcja parsera LL

Usuwanie lewostronnej rekursji. Usuwanie lewostronnej faktoryzacji. Wyznaczanie zbioru FIRST. Wyznaczanie zbioru FOLLOW. Konstrukcja parsera LL Usuwanie lewostronnej rekursji A Aα β Np. A A+B C A βa A CA A αa ε A +BA ε Usuwanie lewostronnej faktoryzacji A αβ 1... αβ k Np. A ab a A αa A aa A β 1... β k A B ε Wyznaczanie zbioru FIRST 1) A xβ x T

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

Funkcje i Procedury. Wyrazenien

Funkcje i Procedury. Wyrazenien Funkcje i Procedury. Określanie Funkcji. Rozwiązanie skomplikowanych zagadnień czasami jest niemożliwe bez zastosowania własnej funkcji i procedur. Chcemy stworzyć dobre aplikacje? Trzeba umieć stworzyć

Bardziej szczegółowo

Projekt procesora NIOSII w strukturze programowalnego układu logicznego CYCLONEII EP2C35F672C6 podłączenie i obsługa wyświetlacza LCD.

Projekt procesora NIOSII w strukturze programowalnego układu logicznego CYCLONEII EP2C35F672C6 podłączenie i obsługa wyświetlacza LCD. LAB. 2 Projekt procesora NIOSII w strukturze programowalnego układu logicznego CYCLONEII EP2C35F672C6 podłączenie i obsługa wyświetlacza LCD. Laboratorium Mikroprocesorowych Układów Sterowania instrukcja

Bardziej szczegółowo

E S - uniwersum struktury stosu

E S - uniwersum struktury stosu Temat: Struktura stosu i kolejki Struktura danych to system relacyjny r I r i i I U,, gdzie U to uniwersum systemu, a i i - zbiór relacji (operacji na strukturze danych). Uniwersum systemu to zbiór typów

Bardziej szczegółowo

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek Algorytmy i str ruktury danych Metody algorytmiczne Bartman Jacek jbartman@univ.rzeszow.pl Metody algorytmiczne - wprowadzenia Znamy strukturę algorytmów Trudność tkwi natomiast w podaniu metod służących

Bardziej szczegółowo

Metody Metody, parametry, zwracanie wartości

Metody Metody, parametry, zwracanie wartości Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Metody Metody, parametry, zwracanie wartości Metody - co to jest i po co? Metoda to wydzielona część klasy, mająca

Bardziej szczegółowo

Urządzenia Techniki. Klasa I TI. System dwójkowy (binarny) -> BIN. Przykład zamiany liczby dziesiętnej na binarną (DEC -> BIN):

Urządzenia Techniki. Klasa I TI. System dwójkowy (binarny) -> BIN. Przykład zamiany liczby dziesiętnej na binarną (DEC -> BIN): 1. SYSTEMY LICZBOWE UŻYWANE W TECHNICE KOMPUTEROWEJ System liczenia - sposób tworzenia liczb ze znaków cyfrowych oraz zbiór reguł umożliwiających wykonywanie operacji arytmetycznych na liczbach. Do zapisu

Bardziej szczegółowo

Programowanie Niskopoziomowe

Programowanie Niskopoziomowe Programowanie Niskopoziomowe Wykład 11: Procedury zaawansowane Dr inż. Marek Mika Państwowa Wyższa Szkoła Zawodowa im. Jana Amosa Komeńskiego W Lesznie Plan Wstęp Ramki stosu Rekurencja INVOKE, ADDR, PROC,

Bardziej szczegółowo

wagi cyfry 7 5 8 2 pozycje 3 2 1 0

wagi cyfry 7 5 8 2 pozycje 3 2 1 0 Wartość liczby pozycyjnej System dziesiętny W rozdziale opiszemy pozycyjne systemy liczbowe. Wiedza ta znakomicie ułatwi nam zrozumienie sposobu przechowywania liczb w pamięci komputerów. Na pierwszy ogień

Bardziej szczegółowo

Zasady programowania Dokumentacja

Zasady programowania Dokumentacja Marcin Kędzierski gr. 14 Zasady programowania Dokumentacja Wstęp 1) Temat: Przeszukiwanie pliku za pomocą drzewa. 2) Założenia projektu: a) Program ma pobierać dane z pliku wskazanego przez użytkownika

Bardziej szczegółowo

JĘZYKIFORMALNE IMETODYKOMPILACJI

JĘZYKIFORMALNE IMETODYKOMPILACJI Stefan Sokołowski JĘZYKIFORMALNE IMETODYKOMPILACJI Inst. Informatyki Stosowanej, PWSZ Elbląg, 2009/2010 JĘZYKI FORMALNE reguły gry Wykład1,2X2009,str.1 Zasadnicze informacje: http://iis.pwsz.elblag.pl/

Bardziej szczegółowo

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki Turbo Pascal jest językiem wysokiego poziomu, czyli nie jest rozumiany bezpośrednio dla komputera, ale jednocześnie jest wygodny dla programisty,

Bardziej szczegółowo

Program 14. #include <iostream> #include <ctime> using namespace std;

Program 14. #include <iostream> #include <ctime> using namespace std; Program 14 Napisać: * funkcję słuŝącą do losowego wypełniania tablicy liczbami całkowitymi z podanego zakresu (*). Parametrami funkcji mają być tablica, jej długość oraz dwie liczby stanowiące krańce przedziału

Bardziej szczegółowo

Dokumentacja programu. Zoz. Uzupełnianie kodów terytorialnych w danych osobowych związanych z deklaracjami POZ. Wersja

Dokumentacja programu. Zoz. Uzupełnianie kodów terytorialnych w danych osobowych związanych z deklaracjami POZ. Wersja Dokumentacja programu Zoz Uzupełnianie kodów terytorialnych w danych osobowych związanych z deklaracjami POZ Wersja 1.40.0.0 Zielona Góra 2012-02-29 Wstęp Nowelizacja Rozporządzenia Ministra Zdrowia z

Bardziej szczegółowo

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

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut. Wyjątki Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut. Wydaje się, że żaden użytkownik oprogramowania nie lubi, kiedy stosowany program nagle zawiesza się,

Bardziej szczegółowo

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy Wykład 3, część 3 1 Język JAVA podstawy Plan wykładu: 1. Konstrukcja kodu programów w Javie 2. Identyfikatory, zmienne 3. Typy danych 4. Operatory, instrukcje sterujące instrukcja warunkowe,

Bardziej szczegółowo

ALGORYTMY I STRUKTURY DANYCH

ALGORYTMY I STRUKTURY DANYCH ALGORYTMY I STRUKTURY DANYCH Temat : Drzewa zrównoważone, sortowanie drzewiaste Wykładowca: dr inż. Zbigniew TARAPATA e-mail: Zbigniew.Tarapata@isi.wat.edu.pl http://www.tarapata.strefa.pl/p_algorytmy_i_struktury_danych/

Bardziej szczegółowo

Drzewa poszukiwań binarnych

Drzewa poszukiwań binarnych 1 Drzewa poszukiwań binarnych Kacper Pawłowski Streszczenie W tej pracy przedstawię zagadnienia związane z drzewami poszukiwań binarnych. Przytoczę poszczególne operacje na tej strukturze danych oraz ich

Bardziej szczegółowo

Jerzy Nawrocki, Wprowadzenie do informatyki

Jerzy Nawrocki, Wprowadzenie do informatyki Jerzy Nawrocki, Jerzy Nawrocki Wydział Informatyki Politechnika Poznańska jerzy.nawrocki@put.poznan.pl Przetwarzanie tekstów i AWK Problem konwersji plików FName:Jurek SName:Busz Salary 585 FName:Alek

Bardziej szczegółowo

DECLARE VARIABLE zmienna1 typ danych; BEGIN

DECLARE VARIABLE zmienna1 typ danych; BEGIN Procedury zapamiętane w Interbase - samodzielne programy napisane w specjalnym języku (właściwym dla serwera baz danych Interbase), który umożliwia tworzenie zapytań, pętli, instrukcji warunkowych itp.;

Bardziej szczegółowo

Wstęp do Programowania Obiektowego. Wykład 13 Paradygmaty. Składnia i semantyka.

Wstęp do Programowania Obiektowego. Wykład 13 Paradygmaty. Składnia i semantyka. Wstęp do Programowania Obiektowego Wykład 13 Paradygmaty. Składnia i semantyka. 1 PRZEGLĄD PODSTAWOWYCH PARADYGMATÓW 2 Cztery podstawowe paradygmaty 1. Programowanie imperatywne. 2. Programowanie funkcyjne.

Bardziej szczegółowo

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi. Przykład: $ ls more Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi. Tworzenie łącza #include int pipe(int filedes[2]); Przykład: int

Bardziej szczegółowo

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl System dziesiętny 7 * 10 4 + 3 * 10 3 + 0 * 10 2 + 5 *10 1 + 1 * 10 0 = 73051 Liczba 10 w tym zapisie nazywa się podstawą systemu liczenia. Jeśli liczba 73051 byłaby zapisana w systemie ósemkowym, co powinniśmy

Bardziej szczegółowo

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,

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

Dokumentacja API BizIn

Dokumentacja API BizIn Dokumentacja API BizIn Spis treści Wstęp... 1 Dostęp do API BizIn... 1 Identyfikatory API... 1 Dostępne akcje... 3 Przykład wywołania API w języku PHP... 3 Pobieranie danych... 3 Wystawianie dokumentu

Bardziej szczegółowo

10. Wstęp do Teorii Gier

10. Wstęp do Teorii Gier 10. Wstęp do Teorii Gier Definicja Gry Matematycznej Gra matematyczna spełnia następujące warunki: a) Jest co najmniej dwóch racjonalnych graczy. b) Zbiór możliwych dezycji każdego gracza zawiera co najmniej

Bardziej szczegółowo

Instalacja systemu zarządzania treścią (CMS): Joomla

Instalacja systemu zarządzania treścią (CMS): Joomla Instalacja systemu zarządzania treścią (CMS): Joomla Na stronie http://www.cba.pl/ zarejestruj nowe konto klikając na przycisk:, następnie wybierz nazwę domeny (Rys. 1a) oraz wypełnij obowiązkowe pola

Bardziej szczegółowo

Ćwiczenie 1. Przygotowanie środowiska JAVA

Ćwiczenie 1. Przygotowanie środowiska JAVA Ćwiczenie 1 Przygotowanie środowiska JAVA 1. Wprowadzenie teoretyczne Instalacja JDK (Java Development Kit) NaleŜy pobrać z java.sun.com środowisko i zainstalować je. Następnie naleŝy skonfigurować środowisko.

Bardziej szczegółowo

Struktury danych: stos, kolejka, lista, drzewo

Struktury danych: stos, kolejka, lista, drzewo Struktury danych: stos, kolejka, lista, drzewo Wykład: dane w strukturze, funkcje i rodzaje struktur, LIFO, last in first out, kolejka FIFO, first in first out, push, pop, size, empty, głowa, ogon, implementacja

Bardziej szczegółowo

Wykład 4: Wnioskowanie statystyczne. Podstawowe informacje oraz implementacja przykładowego testu w programie STATISTICA

Wykład 4: Wnioskowanie statystyczne. Podstawowe informacje oraz implementacja przykładowego testu w programie STATISTICA Wykład 4: Wnioskowanie statystyczne Podstawowe informacje oraz implementacja przykładowego testu w programie STATISTICA Idea wnioskowania statystycznego Celem analizy statystycznej nie jest zwykle tylko

Bardziej szczegółowo

Wydział Elektryczny. Katedra Telekomunikacji i Aparatury Elektronicznej. Konstrukcje i Technologie w Aparaturze Elektronicznej.

Wydział Elektryczny. Katedra Telekomunikacji i Aparatury Elektronicznej. Konstrukcje i Technologie w Aparaturze Elektronicznej. Politechnika Białostocka Wydział Elektryczny Katedra Telekomunikacji i Aparatury Elektronicznej Konstrukcje i Technologie w Aparaturze Elektronicznej Ćwiczenie nr 5 Temat: Przetwarzanie A/C. Implementacja

Bardziej szczegółowo

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy) Rok akademicki 2012/2013, Wykład nr 2 2/25 Plan wykładu nr 2 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013

Bardziej szczegółowo

Wykład 14. Środowisko przetwarzania

Wykład 14. Środowisko przetwarzania Wykład 14 Środowisko przetwarzania Środowisko przetwarzania Przed generacją kodu, musimy umieć powiązać statyczny kod źródłowy programu z akcjami, wykonywanymi w trakcie działania i implementującymi program;

Bardziej szczegółowo

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład I - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Zaliczenie przedmiotu Do zaliczenia przedmiotu niezbędne jest

Bardziej szczegółowo

Algorytmy i. Wykład 3: Stosy, kolejki i listy. Dr inż. Paweł Kasprowski. FIFO First In First Out (kolejka) LIFO Last In First Out (stos)

Algorytmy i. Wykład 3: Stosy, kolejki i listy. Dr inż. Paweł Kasprowski. FIFO First In First Out (kolejka) LIFO Last In First Out (stos) Algorytmy i struktury danych Wykład 3: Stosy, kolejki i listy Dr inż. Paweł Kasprowski pawel@kasprowski.pl Kolejki FIFO First In First Out (kolejka) LIFO Last In First Out (stos) Stos (stack) Dostęp jedynie

Bardziej szczegółowo

Sprawdziany w USOSweb instrukcja dla prowadzących zajęcia.

Sprawdziany w USOSweb instrukcja dla prowadzących zajęcia. Sprawdziany w USOSweb instrukcja dla prowadzących zajęcia. I. Wstęp Moduł Sprawdziany, służy do przekazywania w łatwy sposób, drogą elektroniczną zasad zaliczania przedmiotów oraz wyników kartkówek czy

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.

Bardziej szczegółowo

Zasady budowania algorytmów z klocków Początek pracy Klocki Podstawowe

Zasady budowania algorytmów z klocków Początek pracy Klocki Podstawowe Zasady budowania algorytmów z klocków Początek pracy Otwieramy nowy projekt Plik/Nowy projekt, a następnie planszę Plik/Plansza/Nowa, na której będziemy budowali algorytmy. Po lewej stronie widzimy paletę

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

Kurs Adobe Photoshop Elements 11

Kurs Adobe Photoshop Elements 11 Kurs Adobe Photoshop Elements 11 Gladiatorx1 Część III kursu zawiera opis interfejsu edytora zdjęć w TRYBIE SZYBKIEJ EDYCJI 2014-12- 12 Spis treści Część III- Edytor zdjęć... 2 Tryb Szybka edycja... 2

Bardziej szczegółowo

Semantyka i Weryfikacja Programów - Laboratorium 3

Semantyka i Weryfikacja Programów - Laboratorium 3 Semantyka i Weryfikacja Programów - Laboratorium 3 Modelowanie układów mikroprocesorowych - część II Wykonywanie całego programu Cały program wykonywany jest przez funkcję intpprog. Jedynym argumentem

Bardziej szczegółowo

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Część XVIII C++ Funkcje Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Umiemy już podzielić nasz

Bardziej szczegółowo

Typy danych. 2. Dane liczbowe 2.1. Liczby całkowite ze znakiem i bez znaku: 32768, -165, ; 2.2. Liczby rzeczywiste stało i zmienno pozycyjne:

Typy danych. 2. Dane liczbowe 2.1. Liczby całkowite ze znakiem i bez znaku: 32768, -165, ; 2.2. Liczby rzeczywiste stało i zmienno pozycyjne: Strona 1 z 17 Typy danych 1. Dane tekstowe rozmaite słowa zapisane w różnych alfabetach: Rozwój metod badawczych pozwala na przesunięcie granicy poznawania otaczającego coraz dalej w głąb materii: 2. Dane

Bardziej szczegółowo

Definicje. Algorytm to:

Definicje. Algorytm to: Algorytmy Definicje Algorytm to: skończony ciąg operacji na obiektach, ze ściśle ustalonym porządkiem wykonania, dający możliwość realizacji zadania określonej klasy pewien ciąg czynności, który prowadzi

Bardziej szczegółowo

Dokument opisuje sposób postępowania prowadzący do wysłania deklaracji VAT, PIT lub CIT drogą elektroniczną za pomocą funkcji systemu ADA modułu FK.

Dokument opisuje sposób postępowania prowadzący do wysłania deklaracji VAT, PIT lub CIT drogą elektroniczną za pomocą funkcji systemu ADA modułu FK. FK - EDeklaracje Dokument opisuje sposób postępowania prowadzący do wysłania deklaracji VAT, PIT lub CIT drogą elektroniczną za pomocą funkcji systemu ADA modułu FK. W założeniu przyjęto, iż użytkownik

Bardziej szczegółowo

Instrukcja obsługi Szybkiego paragonu w programie LiderSim [ProLider].

Instrukcja obsługi Szybkiego paragonu w programie LiderSim [ProLider]. Instrukcja obsługi Szybkiego paragonu w programie LiderSim [ProLider]. W wersji 6.31.0 programu LiderSim [ProLider] została wprowadzona funkcjonalność o nazwie Szybki paragon umożliwiająca łatwe wystawianie

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

TEORETYCZNE PODSTAWY INFORMATYKI

TEORETYCZNE PODSTAWY INFORMATYKI 1 TEORETYCZNE PODSTAWY INFORMATYKI WFAiS UJ, Informatyka Stosowana I rok studiów, I stopień Wykład 10, part I 2 Wzorce, automaty Definicja Grafy reprezentujące maszyny stanów Symulacje automatów Automaty

Bardziej szczegółowo

Interpolacja krzywymi sklejanymi stopnia drugiego (SPLINE-2)

Interpolacja krzywymi sklejanymi stopnia drugiego (SPLINE-2) Jacek Złydach (JW) Wstęp Interpolacja krzywymi sklejanymi stopnia drugiego (SPLINE-) Implementacja praktyczna Poniższa praktyczna implementacja stanowi uzupełnienie teoretycznych rozważań na temat interpolacji

Bardziej szczegółowo