Metody Kompilacji Wykład 7 Analiza Syntaktyczna

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

Download "Metody Kompilacji Wykład 7 Analiza Syntaktyczna"

Transkrypt

1 Metody Kompilacji Wykład 7 Analiza Syntaktyczna

2 Parsowanie Parsowanie jest to proces określenia jak ciąg terminali może być generowany przez gramatykę. Włodzimierz Bielecki WI ZUT 2/57

3 Parsowanie Dla każdej gramatyki bezkontekstowej istnieje parser, dla którego czas parsowania ciągu z n terminali zajmuje co najwyżej O(n^3) czasu. Ale czas ten jest zazwyczaj nie do przyjęcia w praktyce. Na szczęście, dla rzeczywistych języków programowania, możemy zaprojektować gramatykę, która może szybko parsować. Włodzimierz Bielecki WI ZUT 3

4 Parsowanie Dla większości języków programowania zostały opracowane algorytmy parsowania o złożoności liniowej. Włodzimierz Bielecki WI ZUT 4

5 Parsowanie Analizatory składni języka programowania prawie zawsze przeglądają ciąg wejściowy od lewej do prawej strony, biorąc pod uwagę tylko jeden terminal w danym momencie. Włodzimierz Bielecki WI ZUT 5

6 Parsowanie Większość metod parsowania należy do jednej z dwóch klas: metody zstępujące (top-down) i metody wstępujące (bottom-up). Terminy te odnoszą się do kolejności, w jakiej są budowane węzły w drzewie parsowania. Włodzimierz Bielecki WI ZUT 6

7 Parsowanie W parserach zstępujących ( top-down), tworzenie drzewa rozpoczyna się od korzenia i polega na przechodzeniu do liści, natomiast w parserach wstępujących(bottom-up) budowa rozpoczyna się od liści i przebiega w kierunku korzenia. Włodzimierz Bielecki WI ZUT 7

8 Parsowanie Popularność parserów zstępujących jest spowodowana tym, że łatwo mogą być zbudowane wydajne parsery przez mały nakład pracy programisty. Włodzimierz Bielecki WI ZUT 8

9 Parsowanie Parser wstępujący może obsłużyć jednak więcej bardziej złożonych gramatyk i schematów translacji, czyli jego zakres stosowalności jest szerszy. Włodzimierz Bielecki WI ZUT 9

10 Parsowanie zstępujące W parsowaniu zstępującym budowa drzewa syntaktycznego dokonuje się począwszy od korzenia, oznakowanego przez nieterminal startowy, i następnie wielokrotnie są wykonywane następujące dwa kroki. Włodzimierz Bielecki WI ZUT 10

11 Parsowanie zstępujące 1. W węźle N, oznaczonym nieterminalem A, wybierz jedną z produkcji, której lewa strona jest A, i utwórz dzieci dla N oznaczone symbolami prawej strony tej produkcji. 2. Znajdź następny węzeł, w którym poddrzewo ma być utworzone, zazwyczaj jest to skrajny lewy nieterminal drzewa bieżącego. Włodzimierz Bielecki WI ZUT 11

12 Parsowanie zstępujące Aktualny symbol terminalny z ciągu wejściowego jest często nazywany symbolem bieżącym -- lookahead. Początkowo symbolem bieżącym jest pierwszy terminal z lewej strony ciągu wejściowego. Włodzimierz Bielecki WI ZUT 12

13 Parsowanie zstępujące Parser próbuje utworzyć drzewo parsujące od korzenia w kierunku liści skanując wejście od lewej do prawej strony. Przykład: dla wejścia id+id*id jest tworzone drzewo parsowania: lm oznacza wyprowadzenie lewostronne, czyli zawsze jest wybierany skrajny lewy nieterminal E -> TE E -> +TE Ɛ T -> FT T -> *FT Ɛ F -> (E) id E E E lm lm lm E lm E T E T E T E T E F T F T F T id id Ɛ E lm T E F T + T E id Ɛ Włodzimierz Bielecki WI ZUT 13

14 Parsowanie zstępujące: tworzenie kodu parsera 1. Tworzymy jedną procedurę dla wszystkich symboli terminalnych 2. Tworzymy jedną procedurę dla każdego symbolu pomocniczego 3. Tworzymy kod dla każdej produkcji jako ciąg procedur zgodnie z kolejnością symboli w prawej stronie odpowiedniej produkcji. Włodzimierz Bielecki WI ZUT 14

15 Parsowanie zstępujące: przykład stmt expr ; if ( expr ) stmt for ( optexpr ; optexpr ; optexpr ) stmt other optexpr expr stmt Drzewo parsowania dla produkcji stmt->for ( optexpr; optexpr ; optexpr ) stmt dla kodu o przykładowej strukturze: for ( ; i<n ; i+=2*k) p=i; for ( optexpr ; optexpr ; optexpr ) stmt ε expr expr other Włodzimierz Bielecki WI ZUT 15

16 Pseudokod parsera, który sprawdza czy ciąg wejściowy zawiera błędy syntaktyczne stmt expr ; if ( expr ) stmt for ( optexpr ; optexpr ; optexpr ) stmt other Zastosowanie ε-produkcji: optexpr expr void stmt() { switch ( lookahead ) { case expr: match(expr); match( ; ); break; case if: match(if); match( ( ); match(expr); match( ) ); stmt(); break; case for: match(for); match( ( ); optexpr(); match( ; ); optexpr(); match( ; ); optexpr(); match( ) ); stmt(); break; case other: match(other); break; default: report( syntax error ); } } void optexpr() { if ( lookahead == expr ) match(expr); } Sprawdzenie pasowania terminala t do symbolu wejścia Włodzimierz Bielecki WI ZUT void match(terminal t) { if ( lookahead == t ) lookahead = nextterminal; else } report( syntax error ); 16

17 Pseudokod: stmt expr ; if ( expr ) stmt for ( optexpr ; optexpr ; optexpr ) stmt other Zastosowanie ε-produkcji: optexpr expr void stmt() { switch ( lookahead ) { case expr: match(expr); match( ; ); break; case if: match(if); match( ( ); match(expr); match( ) ); stmt(); break; case for: match(for); match( ( ); optexpr(); match( ; ); optexpr(); match( ; ); optexpr(); match( ) ); stmt(); break; case other: match(other); break; default: report( syntax error ); } } void optexpr() { if ( lookahead == expr ) match(expr); } Jeśli wartość lookahead równa się expr, to wywołaj funkcje void match(terminal t) { if ( lookahead == t ) lookahead = nextterminal; else match(expr) Włodzimierz Bielecki report( syntax WI ZUT error ); 17 }

18 Pseudokod: stmt expr ; if ( expr ) stmt for ( optexpr ; optexpr ; optexpr ) stmt other Zastosowanie ε-produkcji: optexpr expr void stmt() { switch ( lookahead ) { case expr: match(expr); match( ; ); break; case if: match(if); match( ( ); match(expr); match( ) ); stmt(); break; case for: match(for); match( ( ); optexpr(); match( ; ); optexpr(); match( ; ); optexpr(); match( ) ); stmt(); break; case other: match(other); break; default: report( syntax error ); } } void optexpr() { if ( lookahead == expr ) match(expr); } Jeśli terminal t jest taki sam jak wartość lookahead, to wczytaj następny znak, inaczej jest błąd składni void match(terminal t) { if ( lookahead == t ) lookahead = nextterminal; else } report( syntax error ); 18

19 Pseudokod: Kolejność wywołania funkcji jest taka sama jak i kolejność symboli w prawej stronie odpowiedniej produkcji stmt expr ; if ( expr ) stmt for ( optexpr ; optexpr ; optexpr ) stmt other Zastosowanie ε-produkcji: optexpr expr void stmt() { switch ( lookahead ) { case expr: match(expr); match( ; ); break; case if: match(if); match( ( ); match(expr); match( ) ); stmt(); break; case for: match(for); match( ( ); optexpr(); match( ; ); optexpr(); match( ; ); optexpr(); match( ) ); stmt(); break; case other: match(other); break; default: report( syntax error ); } } void optexpr() { if ( lookahead == expr ) match(expr); } void match(terminal t) { if ( lookahead == t ) lookahead = nextterminal; else } report( syntax error ); 19

20 stmt expr ; if ( expr ) stmt for ( optexpr ; optexpr ; optexpr ) stmt other optexpr expr expr ; if ( expr ) stmt for ( optexpr ; optexpr ; optexpr ) stmt other Zastosowanie ε-produkcji: void stmt() { switch ( lookahead ) { case expr: match(expr); match( ; ); break; case if: match(if); match( ( ); match(expr); match( ) ); stmt(); break; case for: match(for); match( ( ); optexpr(); match( ; ); optexpr(); match( ; ); optexpr(); match( ) ); stmt(); break; case other: match(other); break; default: report( syntax error ); } } void optexpr() { if ( lookahead == expr ) match(expr); } void match(terminal t) { if ( lookahead == t ) lookahead = nextterminal; else } report( syntax error ); 20

21 Parsowanie zstępujące: przykład Drzewo parsowania stmt for ( optexpr ; optexpr ; optexpr ) stmt match(for) match( ( ) optexpr() match( ; ) optexpr() match( ; ) optexpr() match( ) ) stmt() Wejście for ( ; expr ; expr ) other lookahead Włodzimierz Bielecki WI ZUT 21

22 Parsowanie zstępujące: przykład Krok 1: stmt for ( optexpr ; optexpr ; optexpr ) stmt match(for) match( ( ) optexpr() match( ; ) optexpr() match( ; ) optexpr() match( ) ) stmt() Wejście for ( ; expr ; expr ) other lookahead Włodzimierz Bielecki WI ZUT 22

23 Parsowanie zstępujące: przykład Krok 2: stmt for ( optexpr ; optexpr ; optexpr ) stmt match(for) match( ( ) optexpr() match( ; ) optexpr() match( ; ) optexpr() match( ) ) stmt() Wejście for ( ; expr ; expr ) other lookahead Włodzimierz Bielecki WI ZUT 23

24 Parsowanie zstępujące: przykład Krok 3: stmt Problem: brak dopasowania. Wybieramy produkcję: optexpr for ( optexpr ; optexpr ; optexpr ) stmt match(for) match( ( ) optexpr() match( ; ) optexpr() match( ; ) optexpr() match( ) ) stmt() Wejście for ( ; expr ; expr ) other lookahead Włodzimierz Bielecki WI ZUT 24

25 Parsowanie zstępujące: przykład Krok 4: stmt for ( optexpr ; optexpr ; optexpr ) stmt match(for) match( ( ) optexpr() match( ; ) optexpr() match( ; ) optexpr() match( ) ) stmt() Wejście for ( ; expr ; expr ) other lookahead Włodzimierz Bielecki WI ZUT 25

26 Parsowanie zstępujące: przykład Krok 5: stmt void optexpr() { if ( lookahead == expr ) match(expr); } for ( optexpr ; optexpr ; optexpr ) stmt match(for) match( ( ) optexpr() match( ; ) optexpr() match( ; ) optexpr() match( ) ) stmt() Wejście for ( ; expr ; expr ) other lookahead Włodzimierz Bielecki WI ZUT 26

27 Parsowanie zstępujące: przykład Krok 6: stmt for ( optexpr ; optexpr ; optexpr ) stmt match(for) match( ( ) optexpr() match( ; ) optexpr() match( ; ) optexpr() match( ) ) stmt() Wejście for ( ; expr ; expr ) other lookahead Włodzimierz Bielecki WI ZUT 27

28 Parsowanie zstępujące: przykład Krok 7: stmt for ( optexpr ; optexpr ; optexpr ) stmt match(for) match( ( ) optexpr() match( ; ) optexpr() match( ; ) optexpr() match( ) ) stmt() Wejście for ( ; expr ; expr ) other lookahead Włodzimierz Bielecki WI ZUT 28

29 Parsowanie zstępujące: przykład Krok 7: stmt for ( optexpr ; optexpr ; optexpr ) stmt match(for) match( ( ) optexpr() match( ; ) optexpr() match( ; ) optexpr() match( ) ) stmt() Wejście for ( ; expr ; expr ) other Włodzimierz Bielecki WI ZUT lookahead 29

30 Parsowanie zstępujące: przykład Krok 8: for ( stmt Wywołanie stmt() dla lookahead other kończy się zakończeniem programu bez sygnalizacji błędu syntaktycznego, czyli wejście jest poprawne optexpr ; optexpr ; optexpr ) stmt match(for) match( ( ) optexpr() match( ; ) optexpr() match( ; ) optexpr() match( ) ) stmt() Wejście for ( ; expr ; expr ) other Włodzimierz Bielecki WI ZUT lookahead 30

31 Parsowanie zstępujące Kroki parsowania: ε-produkcje ( produkcje, których prawa strona jest napisem pustym ε ) wymagają specjalnego traktowania. Używamy je jako domyślnych, gdy żadna inna produkcja nie może być użyta. Włodzimierz Bielecki WI ZUT 31

32 Parsowanie zstępujące Kroki parsowania: Z nieterminalem optexpr i symbolem bieżącym ; ε-produkcja jest wykorzystywana, ponieważ nie ma takiej produkcji, której lewa strona jest optexpr, a prawą stroną jest symbol ;. Włodzimierz Bielecki WI ZUT 32

33 Parsowanie zstępujące Kroki parsowania: Ogólnie rzecz biorąc, wybór produkcji dla nieterminala może być oparty na metodzie prób i błędów; to znaczy, możemy spróbować jakiejś produkcji, jeśli jest ona niewłaściwa, to możemy wrócić i spróbować innej produkcji i t.d. Włodzimierz Bielecki WI ZUT 33

34 Parsowanie zstępujące: przykład type simple ^ id array [ simple ] of type simple integer char num dotdot num Ile procedur należy utworzyć? Włodzimierz Bielecki WI ZUT 34

35 Parsowanie zstępujące:program procedure match(t : token); begin if lookahead = t then lookahead := nexttoken() else error() end; procedure type(); begin if lookahead in { integer, char, num } then simple() else if lookahead = ^ then match( ^ ); match(id) else if lookahead = array then match( array ); match( [ ); simple(); match( ] ); match( of ); type() else error() end; Włodzimierz Bielecki WI ZUT procedure simple(); begin if lookahead = integer then match( integer ) else if lookahead = char then match( char ) else if lookahead = num then match( num ); match( dotdot ); match( num ) else error() end; 35

36 Parsowanie zstępujące:program procedure match(t : token); begin if lookahead = t then lookahead := nexttoken() else error() end; simple integer char num dotdot num procedure type(); begin if lookahead in { integer, char, num } then simple() else if lookahead = ^ then match( ^ ); match(id) else if lookahead = array then match( array ); match( [ ); simple(); match( ] ); match( of ); type() else error() end; Włodzimierz Bielecki WI ZUT procedure simple(); begin if lookahead = integer then match( integer ) else if lookahead = char then match( char ) else if lookahead = num then match( num ); match( dotdot ); match( num ) else error() end; 36

37 Parsowanie zstępujące:program procedure match(t : token); begin if lookahead = t then lookahead := nexttoken() else error() end; type simple ^ id array [ simple ] of type procedure type(); begin if lookahead in { integer, char, num } then simple() else if lookahead = ^ then match( ^ ); match(id) else if lookahead = array then match( array ); match( [ ); simple(); match( ] ); match( of ); type() else error() end; Włodzimierz Bielecki WI ZUT procedure simple(); begin if lookahead = integer then match( integer ) else if lookahead = char then match( char ) else if lookahead = num then match( num ); match( dotdot ); match( num ) else error() end; 37

38 Parsowanie zstępujące: krok 1 match( array ) type() procedure type(); begin if lookahead in { integer, char, num } then simple() else if lookahead = ^ then match( ^ ); match(id) else if lookahead = array then match( array ); match( [ ); simple(); match( ] ); match( of ); type() else error() end; Input: array [ num dotdot num ] of integer lookahead Włodzimierz Bielecki WI ZUT 38

39 Parsowanie zstępujące: krok 2 type() match( array ) match( [ ) Input: array [ num dotdot num ] of integer lookahead Włodzimierz Bielecki WI ZUT 39

40 Parsowanie zstępujące: krok 3 match( array ) match( num ) match( [ ) type() simple() procedure simple(); begin if lookahead = integer then match( integer ) else if lookahead = char then match( char ) else if lookahead = num then match( num ); match( dotdot ); match( num ) else error() end; Input: array [ num dotdot num ] of integer lookahead Włodzimierz Bielecki WI ZUT 40

41 Parsowanie zstępujące: krok 4 type() match( array ) match( [ ) simple() match( num ) match( dotdot ) Input: array [ num dotdot num ] of integer lookahead Włodzimierz Bielecki WI ZUT 41

42 Parsowanie zstępujące: krok 5 type() match( array ) match( [ ) simple() match( num ) match( dotdot ) match( num ) Input: array [ num dotdot num ] of integer Włodzimierz Bielecki WI ZUT lookahead 42

43 Parsowanie zstępujące: krok 6 match( array ) match( [ ) type() simple() match( ] ) procedure type(); begin. else if lookahead = array then simple(); match( ] ); match( of ); type() else error() end; match( num ) match( dotdot ) match( num ) Input: array [ num dotdot num ] of integer Włodzimierz Bielecki WI ZUT lookahead 43

44 Parsowanie zstępujące: krok 7 type() match( array ) match( [ ) simple() match( ] ) match( of ) match( num ) match( dotdot ) match( num ) Input: array [ num dotdot num ] of integer Włodzimierz Bielecki WI ZUT lookahead 44

45 Parsowanie zstępujące: krok 8 type() match( array ) match( [ ) simple() match( ] ) match( of ) type() match( num ) match( dotdot ) match( num ) simple() Input: match( integer ) array [ num dotdot num ] of integer Włodzimierz Bielecki WI ZUT lookahead 45

46 Parsowanie zstępujące Rekurencja lewostronna Dla parsera zstępującego możliwe jest zapętlenie. Problem pojawia się, gdy korzystamy z produkcji lewostronnie rekurencyjnych, takich jak: expr -> expr + term, gdzie lewy skrajny symbol ciała produkcji jest taki sam jak symbol po lewej stronie produkcji. Włodzimierz Bielecki WI ZUT 46

47 Parsowanie zstępujące Rekurencja lewostronna Produkcja lewostronnie rekurencyjna może być wyeliminowana poprzez jej modyfikację. Rozważmy produkcje: A->Aα β gdzie α i β są to ciągi terminali i nieterminali, które nie zaczynają się od A. Włodzimierz Bielecki WI ZUT 47

48 Parsowanie zstępujące Rekurencja lewostronna Na przykład, dla produkcji expr -> expr + term term Nieterminal A = expr, ciąg α= +term, ciąg β = term. Włodzimierz Bielecki WI ZUT 48

49 Parsowanie zstępujące Rekurencja lewostronna Nieterminal A i jego produkcja są lewostronnie rekurencyjne. W ogólnym przypadku, gramatyka może być lewostronnie rekurencyjna, jeśli nieterminal A wyprowadza napis Aα przez zastosowanie dwóch lub więcej produkcji bezpośrednich. Włodzimierz Bielecki WI ZUT 49

50 Parsowanie zstępujące Rekurencja lewostronna Powtarzające się stosowanie tej produkcji tworzy sekwencję ciągu α po prawej stronie A. Włodzimierz Bielecki WI ZUT 50

51 Rekurencja lewostronna A A A Parser zawsze będzie wybierał pierwszą produkcję dla gramatyki: A->Aα β A A A->Aα-> Aαα->Aααα-> -> Aααα α-> β α ααα β α α α α Zapętlenie Włodzimierz Bielecki WI ZUT 51

52 Parsowanie zstępujące Rekurencja lewostronna Jeśli w końcu symbol A zostanie zastąpiony przez β, to uzyskamy β, po którym następuje sekwencja zero lub więcej α. Problem: A nigdy nie zostanie zastąpione przez β ponieważ zawsze będzie wybrana pierwsza produkcja: A->Aα. Włodzimierz Bielecki WI ZUT 52

53 Przykład Gramatyka: expr -> expr + term term term->0,1,9 Dla wejścia: 2+2, proces tworzenia drzewa parsowania jest nieskończony. expr expr + term expr + term Włodzimierz Bielecki WI ZUT 53

54 Parsowanie zstępujące Rekurencja lewostronna Problem można rozwiązać przez przepisanie produkcji dla A A->Aα β w następujący sposób przy użyciu nowego nieterminala R: A->βR R->αR ε Włodzimierz Bielecki WI ZUT 54

55 Parsowanie zstępujące Rekurencja prawostronna Nieterminal R i jego produkcja R->αR są prawostronnie rekurencyjne. Produkcje prawostronnie rekurencyjne prowadzą do drzew, które rosną w dół i w prawo jak jest pokazane na rysunku na następnym slajdzie Włodzimierz Bielecki WI ZUT 55

56 A->βR R->αR ε Rekurencja prawostronna A->βR->βαR-> βααr-> βαα αr-> βαα αε A R R R R β α α. α ε Włodzimierz Bielecki WI ZUT 56

57 Przykład Gramatyka: expr -> expr + term term term->0,1,9 Przekonwertowana do postaci expr -> term R R-> +term R ε term->0,1,9 term expr Dla wejścia: 2+2 drzewo parsowania wygląda jak wyżej. R 2 + term R 2 ε Liście drzewa tworzą zdanie wejściowe, więc parser kończy pracę Włodzimierz Bielecki WI ZUT 57

58 Dziękuję za uwagę Włodzimierz Bielecki WI ZUT 58

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

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 3

Metody Kompilacji Wykład 3 Metody Kompilacji Wykład 3 odbywa się poprzez dołączenie zasad(reguł) lub fragmentów kodu do produkcji w gramatyce. Włodzimierz Bielecki WI ZUT 2 Na przykład, dla produkcji expr -> expr 1 + term możemy

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

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

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

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

Analizator syntaktyczny

Analizator syntaktyczny Analizator syntaktyczny program źródłowy analizator leksykalny token daj nast. token analizator syntaktyczny drzewo rozbioru syntaktycznego analizator semantyczny kod pośredni tablica symboli Analizator

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

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

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

Języki formalne i automaty Ćwiczenia 4

Języki formalne i automaty Ćwiczenia 4 Języki formalne i automaty Ćwiczenia 4 Autor: Marcin Orchel Spis treści Spis treści... 1 Wstęp teoretyczny... 2 Sposób tworzenia deterministycznego automatu skończonego... 4 Intuicyjne rozumienie konstrukcji

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

Uproszczony schemat działania kompilatora

Uproszczony schemat działania kompilatora Uproszczony schemat działania kompilatora Wykład7,str.1 program źródłowy ciąg leksemów drzewo wywodu drzewo i tablice symboli analiza leksykalna analiza syntaktyczna analiza semantyczna KOMPILATOR generacja

Bardziej szczegółowo

Języki formalne i automaty Ćwiczenia 2

Języki formalne i automaty Ćwiczenia 2 Języki formalne i automaty Ćwiczenia 2 Autor: Marcin Orchel Spis treści Spis treści... 1 Wstęp teoretyczny... 2 Metoda brute force... 2 Konwersja do postaci normalnej Chomskiego... 5 Algorytm Cocke a-youngera-kasamiego

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

Włączenie analizy leksykalnej do analizy składniowej jest nietrudne; po co więc jest wydzielona?

Włączenie analizy leksykalnej do analizy składniowej jest nietrudne; po co więc jest wydzielona? Po co wydziela się analizę leksykalną? Wykład7,str1 Włączenie analizy leksykalnej do analizy składniowej jest nietrudne; po co więc jest wydzielona? 1 Analiza leksykalna jest prostsza niż składniowa leksyka

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

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

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

Uproszczony schemat działania kompilatora

Uproszczony schemat działania kompilatora Wykład7,13XI2009,str.1 Uproszczony schemat działania kompilatora program źródłowy ciąg leksemów drzewo wywodu drzewo i tablice symboli analiza leksykalna analiza syntaktyczna analiza semantyczna KOMPILATOR

Bardziej szczegółowo

Gramatyka operatorowa

Gramatyka operatorowa Gramatyki z pierwszeństwem operatorów Teoria kompilacji Dr inŝ. Janusz Majewski Katedra Informatyki Gramatyka operatorowa Definicja: G = G BK jest gramatyką operatorową (i) (ii) G jest gramatyką

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

2.2. Gramatyki, wyprowadzenia, hierarchia Chomsky'ego

2.2. Gramatyki, wyprowadzenia, hierarchia Chomsky'ego 2.2. Gramatyki, wyprowadzenia, hierarchia Chomsky'ego Gramatyka Gramatyką G nazywamy czwórkę uporządkowaną G = gdzie: N zbiór symboli nieterminalnych, T zbiór symboli terminalnych, P zbiór

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

3.4. Przekształcenia gramatyk bezkontekstowych

3.4. Przekształcenia gramatyk bezkontekstowych 3.4. Przekształcenia gramatyk bezkontekstowych Definicje Niech będzie dana gramatyka bezkontekstowa G = G BK Symbol X (N T) nazywamy nieużytecznym w G G BK jeśli nie można w tej gramatyce

Bardziej szczegółowo

Automat ze stosem. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki

Automat ze stosem. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki Automat ze stosem Języki formalne i automaty Dr inż. Janusz Majewski Katedra Informatyki Automat ze stosem (1) dno stosu Stos wierzchołek stosu Wejście # B B A B A B A B a b b a b a b $ q i Automat ze

Bardziej szczegółowo

Gramatyki rekursywne

Gramatyki rekursywne Gramatyki bezkontekstowe, rozbiór gramatyczny eoria automatów i języków formalnych Dr inŝ. Janusz Majewski Katedra Informatyki Gramatyki rekursywne Niech będzie dana gramatyka bezkontekstowa G =

Bardziej szczegółowo

Języki formalne i automaty Ćwiczenia 1

Języki formalne i automaty Ćwiczenia 1 Języki formalne i automaty Ćwiczenia Autor: Marcin Orchel Spis treści Spis treści... Wstęp teoretyczny... 2 Wprowadzenie do teorii języków formalnych... 2 Gramatyki... 5 Rodzaje gramatyk... 7 Zadania...

Bardziej szczegółowo

Języki formalne i automaty Ćwiczenia 3

Języki formalne i automaty Ćwiczenia 3 Języki formalne i automaty Ćwiczenia 3 Autor: Marcin Orchel Spis treści Spis treści... 1 Wstęp teoretyczny... 2 Algorytm LL(1)... 2 Definicja zbiorów FIRST1 i FOLLOW1... 3 Konstrukcja tabeli parsowania

Bardziej szczegółowo

Języki formalne i automaty Ćwiczenia 9

Języki formalne i automaty Ćwiczenia 9 Języki formalne i automaty Ćwiczenia 9 Autor: Marcin Orchel Spis treści Spis treści... 1 Wstęp teoretyczny... 2 Maszyna Mealy'ego... 2 Maszyna Moore'a... 2 Automat ze stosem... 3 Konwersja gramatyki bezkontekstowej

Bardziej szczegółowo

Teoretyczne podstawy informatyki. Wykład 12: Gramatyki. E. Richter-Was 1

Teoretyczne podstawy informatyki. Wykład 12: Gramatyki. E. Richter-Was 1 Teoretyczne podstawy informatyki Wykład 12: Gramatyki 1 18.12.2012 Gramatyki bezkontekstowe Opis wzorców polegający na wykorzystaniu modelu definicji rekurencyjnych, nazywamy gramatyką bezkontekstową (ang.

Bardziej szczegółowo

Gramatyki, wyprowadzenia, hierarchia Chomsky ego. Gramatyka

Gramatyki, wyprowadzenia, hierarchia Chomsky ego. Gramatyka Gramatyki, wyprowadzenia, hierarchia Chomsky ego Teoria automatów i języków formalnych Dr inŝ. Janusz Majewski Katedra Informatyki Gramatyka Gramatyką G nazywamy czwórkę uporządkowaną gdzie: G =

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

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

PARADYGMATY I JĘZYKI PROGRAMOWANIA. Analiza leksykalna i syntaktyczna. w- 5

PARADYGMATY I JĘZYKI PROGRAMOWANIA. Analiza leksykalna i syntaktyczna. w- 5 PARADYGMATY I JĘZYKI PROGRAMOWANIA Analiza leksykalna i syntaktyczna. Treść 2 Wstęp Analiza leksykalna Analiza syntaktyczna Rekurencja zstępująca Parsery LL Parsery LL sterowane tablicą 3 Wstęp dobra książka

Bardziej szczegółowo

Lingwistyka Matematyczna Języki formalne i gramatyki Analiza zdań

Lingwistyka Matematyczna Języki formalne i gramatyki Analiza zdań Katedra Informatyki Stosowanej Politechnika Łódzka Lingwistyka Matematyczna Języki formalne i gramatyki Analiza zdań dr hab. inŝ. Lidia Jackowska-Strumiłło Historia rozwoju języków programowania 1955 1955

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

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne Algorytmy i struktury danych Drzewa: BST, kopce Letnie Warsztaty Matematyczno-Informatyczne Drzewa: BST, kopce Definicja drzewa Drzewo (ang. tree) to nieskierowany, acykliczny, spójny graf. Drzewo może

Bardziej szczegółowo

GRAMATYKI BEZKONTEKSTOWE

GRAMATYKI BEZKONTEKSTOWE GRAMATYKI BEZKONTEKSTOWE PODSTAWOWE POJĘCIE GRAMATYK Przez gramatykę rozumie się pewien układ reguł zadający zbiór słów utworzonych z symboli języka. Słowa te mogą być i interpretowane jako obiekty językowe

Bardziej szczegółowo

Języki formalne i automaty Ćwiczenia 8

Języki formalne i automaty Ćwiczenia 8 Języki formalne i automaty Ćwiczenia 8 Autor: Marcin Orchel Spis treści Spis treści... 1 Wstęp teoretyczny... 2 Konwersja NFA do DFA... 2 Minimalizacja liczby stanów DFA... 4 Konwersja automatu DFA do

Bardziej szczegółowo

JAO - lematy o pompowaniu dla jezykow bezkontekstowy

JAO - lematy o pompowaniu dla jezykow bezkontekstowy JAO - lematy o pompowaniu dla jezykow bezkontekstowych Postać normalna Chomsky ego Gramatyka G ze zbiorem nieterminali N i zbiorem terminali T jest w postaci normalnej Chomsky ego wtw gdy każda produkcja

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

Opis wzorców polegający na na wykorzystaniu modelu definicji rekurencyjnych, nazywamy gramatyką bezkontekstową (ang. contex-free grammar).

Opis wzorców polegający na na wykorzystaniu modelu definicji rekurencyjnych, nazywamy gramatyką bezkontekstową (ang. contex-free grammar). 1 2 Opis wzorców polegający na na wykorzystaniu modelu definicji rekurencyjnych, nazywamy gramatyką bezkontekstową (ang. contex-free grammar). Jednym z ważnych zastosowań gramatyksą specyfikacje języków

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

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

11 Probabilistic Context Free Grammars

11 Probabilistic Context Free Grammars 11 Probabilistic Context Free Grammars Ludzie piszą i mówią wiele rzeczy, a ich wypowiedzi mają zawsze jakąś określoną strukture i regularność. Celem jest znalezienie i wyizolowanie tego typu struktur.

Bardziej szczegółowo

Metody Realizacji Języków Programowania

Metody Realizacji Języków Programowania 1/54 Metody Realizacji Języków Programowania Analiza składniowa wstępujaca Marcin Benke MIM UW 9 stycznia 2015 2/54 Analiza wstępujaca metoda LR Od Lewej, prawostronne wyprowadzenie (w odwrotnej kolejności)

Bardziej szczegółowo

Analiza semantyczna. Gramatyka atrybutywna

Analiza semantyczna. Gramatyka atrybutywna Analiza semantyczna Do przeprowadzenia poprawnego tłumaczenia, oprócz informacji na temat składni języka podlegającego tłumaczeniu, translator musi posiadać możliwość korzystania z wielu innych informacji

Bardziej szczegółowo

Hierarchia Chomsky ego Maszyna Turinga

Hierarchia Chomsky ego Maszyna Turinga Hierarchia Chomsky ego Maszyna Turinga Języki formalne i automaty Dr inż. Janusz Majewski Katedra Informatyki Gramatyka Gramatyką G nazywamy czwórkę uporządkowaną gdzie: G = V skończony zbiór

Bardziej szczegółowo

Wstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel

Wstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel Wstęp do programowania Drzewa podstawowe techniki Piotr Chrząstowski-Wachtel Drzewa wyszukiwań Drzewa często służą do przechowywania informacji. Jeśli uda sie nam stworzyć drzewo o niewielkiej wysokości

Bardziej szczegółowo

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel Wstęp do programowania Drzewa Piotr Chrząstowski-Wachtel Drzewa Drzewa definiują matematycy, jako spójne nieskierowane grafy bez cykli. Równoważne określenia: Spójne grafy o n wierzchołkach i n-1 krawędziach

Bardziej szczegółowo

Przegląd metod error recovery (dla parsingu top-down, przykłady)

Przegląd metod error recovery (dla parsingu top-down, przykłady) Referat z przedmiotu Teoria Kompilacji Przegląd metod error recovery (dla parsingu top-down, przykłady) Skąd biorą się błędy? Proces obsługi błędów zajmuje się defektami powstającymi z powodu błędów w

Bardziej szczegółowo

Algorytmy i struktury danych. wykład 5

Algorytmy i struktury danych. wykład 5 Plan wykładu: Wskaźniki. : listy, drzewa, kopce. Wskaźniki - wskaźniki Wskaźnik jest to liczba lub symbol który w ogólności wskazuje adres komórki pamięci. W językach wysokiego poziomu wskaźniki mogą również

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

Algorytmy i struktury danych. wykład 2

Algorytmy i struktury danych. wykład 2 Plan wykładu: Pojęcie algorytmu. Projektowanie wstępujące i zstępujące. Rekurencja. Pojęcie algorytmu Pojęcie algorytmu Algorytm skończony zbiór operacji, koniecznych do wykonania zadania z pewnej klasy

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

Języki, automaty i obliczenia

Języki, automaty i obliczenia Języki, automaty i obliczenia Wykład 9: Własności języków bezkontekstowych Sławomir Lasota Uniwersytet Warszawski 27 kwietnia 2016 Plan 1 Pompowanie języków bezkontekstowych 2 Własności domknięcia 3 Obrazy

Bardziej szczegółowo

Porządek symetryczny: right(x)

Porządek symetryczny: right(x) Porządek symetryczny: x lef t(x) right(x) Własność drzewa BST: W drzewach BST mamy porządek symetryczny. Dla każdego węzła x spełniony jest warunek: jeżeli węzeł y leży w lewym poddrzewie x, to key(y)

Bardziej szczegółowo

Wykład 2. Drzewa poszukiwań binarnych (BST)

Wykład 2. Drzewa poszukiwań binarnych (BST) Wykład 2 Drzewa poszukiwań binarnych (BST) 1 O czym będziemy mówić Definicja Operacje na drzewach BST: Search Minimum, Maximum Predecessor, Successor Insert, Delete Struktura losowo budowanych drzew BST

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 Automat ze stosem Automat ze stosem to szóstka

Bardziej szczegółowo

Tworzenie aplikacji w języku Java

Tworzenie aplikacji w języku Java Tworzenie aplikacji w języku Java Wykład 1 Piotr Czapiewski Wydział Informatyki ZUT 2 października 2009 Piotr Czapiewski (Wydział Informatyki ZUT) Tworzenie aplikacji w języku Java 2 października 2009

Bardziej szczegółowo

prowadzący dr ADRIAN HORZYK /~horzyk e-mail: horzyk@agh tel.: 012-617 Konsultacje paw. D-13/325

prowadzący dr ADRIAN HORZYK /~horzyk e-mail: horzyk@agh tel.: 012-617 Konsultacje paw. D-13/325 PODSTAWY INFORMATYKI WYKŁAD 8. prowadzący dr ADRIAN HORZYK http://home home.agh.edu.pl/~ /~horzyk e-mail: horzyk@agh agh.edu.pl tel.: 012-617 617-4319 Konsultacje paw. D-13/325 DRZEWA Drzewa to rodzaj

Bardziej szczegółowo

SYSTEMY UCZĄCE SIĘ WYKŁAD 3. DRZEWA DECYZYJNE. Dr hab. inż. Grzegorz Dudek Wydział Elektryczny Politechnika Częstochowska.

SYSTEMY UCZĄCE SIĘ WYKŁAD 3. DRZEWA DECYZYJNE. Dr hab. inż. Grzegorz Dudek Wydział Elektryczny Politechnika Częstochowska. SYSTEMY UCZĄCE SIĘ WYKŁAD 3. DRZEWA DECYZYJNE Częstochowa 2014 Dr hab. inż. Grzegorz Dudek Wydział Elektryczny Politechnika Częstochowska BUDOWA DRZEW DECYZYJNYCH Drzewa decyzyjne są metodą indukcyjnego

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

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

Poprawność semantyczna

Poprawność semantyczna Poprawność składniowa Poprawność semantyczna Poprawność algorytmu Wypisywanie zdań z języka poprawnych składniowo Poprawne wartościowanie zdań języka, np. w języku programowania skutki wystąpienia wyróżnionych

Bardziej szczegółowo

12. Rekurencja. UWAGA Trzeba bardzo dokładnie ustalić <warunek>, żeby mieć pewność, że ciąg wywołań się zakończy.

12. Rekurencja. UWAGA Trzeba bardzo dokładnie ustalić <warunek>, żeby mieć pewność, że ciąg wywołań się zakończy. 12. Rekurencja. Funkcja rekurencyjna funkcja, która wywołuje samą siebie. Naturalne postępowanie: np. zbierając rozsypane pionki do gry podnosi się zwykle pierwszy, a potem zbiera się resztę w ten sam

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

Język programowania PASCAL

Język programowania PASCAL Język programowania PASCAL (wersja podstawowa - standard) Literatura: dowolny podręcznik do języka PASCAL (na laboratoriach Borland) Iglewski, Madey, Matwin PASCAL STANDARD, PASCAL 360 Marciniak TURBO

Bardziej szczegółowo

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy. PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy. 1. Instrukcję case t of... w przedstawionym fragmencie programu moŝna zastąpić: var t : integer; write( Podaj

Bardziej szczegółowo

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa Informatyka 1 Wykład III Wyrażenia i instrukcje, złożoność obliczeniowa Robert Muszyński ZPCiR ICT PWr Zagadnienia: składnia wyrażeń, drzewa rozbioru gramatycznego i wyliczenia wartości wyrażeń, operatory

Bardziej szczegółowo

Sortowanie topologiczne skierowanych grafów acyklicznych

Sortowanie topologiczne skierowanych grafów acyklicznych Sortowanie topologiczne skierowanych grafów acyklicznych Metody boolowskie w informatyce Robert Sulkowski http://robert.brainusers.net 23 stycznia 2010 1 Definicja 1 (Cykl skierowany). Niech C = (V, A)

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

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych Algorytmy i Struktury Danych Kopce Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 11 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 11 1 / 69 Plan wykładu

Bardziej szczegółowo

Programowanie w Logice Gramatyki metamorficzne. Przemysław Kobylański na podstawie [CM2003] i [SS1994]

Programowanie w Logice Gramatyki metamorficzne. Przemysław Kobylański na podstawie [CM2003] i [SS1994] Programowanie w Logice Gramatyki metamorficzne Przemysław Kobylański na podstawie [CM2003] i [SS1994] Gramatyki bezkontekstowe Gramatyką bezkontekstową jest uporządkowana czwórka G = Σ, N, S, P, gdzie

Bardziej szczegółowo

Drzewa podstawowe poj

Drzewa podstawowe poj Drzewa podstawowe poj ecia drzewo graf reprezentujacy regularna strukture wskaźnikowa, gdzie każdy element zawiera dwa lub wiecej wskaźników (ponumerowanych) do takich samych elementów; wez ly (albo wierzcho

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

Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji.

Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji. Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji. Maria Górska 9 stycznia 2010 1 Spis treści 1 Pojęcie algorytmu 3 2 Sposób

Bardziej szczegółowo

Lista 5 Gramatyki bezkontekstowe i automaty ze stosem

Lista 5 Gramatyki bezkontekstowe i automaty ze stosem Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Teoretyczne Podstawy Informatyki Lista 5 Gramatyki bezkontekstowe i automaty ze stosem 1 Wprowadzenie 1.1 Gramatyka bezkontekstowa

Bardziej szczegółowo

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego. Kolejki Kolejka priorytetowa Kolejka priorytetowa (ang. priority queue) to struktura danych pozwalająca efektywnie realizować następujące operacje na zbiorze dynamicznym, którego elementy pochodzą z określonego

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

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania: Sortowanie Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania: podać strukturę danych dla elementów dynamicznego skończonego multi-zbioru S, względem którego są wykonywane następujące

Bardziej szczegółowo

ALGORYTMY I STRUKTURY DANYCH

ALGORYTMY I STRUKTURY DANYCH ALGORYTMY I STRUKTURY DANYCH Temat 4: Realizacje dynamicznych struktur danych. 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

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

Hierarchia Chomsky ego

Hierarchia Chomsky ego Hierarchia Chomsky ego Gramatyki nieograniczone Def. Gramatyką nieograniczoną (albo typu 0) nazywamy uporządkowaną czwórkę G= gdzie: % Σ - skończony alfabet symboli końcowych (alfabet, nad którym

Bardziej szczegółowo

Algorytmy z powrotami. Algorytm minimax

Algorytmy z powrotami. Algorytm minimax Algorytmy z powrotami. Algorytm minimax Algorytmy i struktury danych. Wykład 7. Rok akademicki: 2010/2011 Algorytm z powrotami rozwiązanie problemu budowane jest w kolejnych krokach, po stwierdzeniu (w

Bardziej szczegółowo

Aproksymacja funkcji a regresja symboliczna

Aproksymacja funkcji a regresja symboliczna Aproksymacja funkcji a regresja symboliczna Problem aproksymacji funkcji polega na tym, że funkcję F(x), znaną lub określoną tablicą wartości, należy zastąpić inną funkcją, f(x), zwaną funkcją aproksymującą

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

Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.

Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np. Drzewa binarne Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0 i T 1 są drzewami binarnymi to T 0 T 1 jest drzewem binarnym Np. ( ) ( ( )) Wielkość drzewa

Bardziej szczegółowo

Obiektowa implementacja parsera klasy LL(1)

Obiektowa implementacja parsera klasy LL(1) Obiektowa implementacja parsera klasy LL(1) Piotr Jeruszka 1 1 Wydział Inżynierii Mechanicznej i Informatyki Kierunek Informatyka, II stopień Specjalność: Aplikacje biznesowe i bazy danych, Rok II Streszczenie

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

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

Generator LLgen. Wojciech Complak Generator LLgen - charakterystyka. Generator LLgen -składnia specyfikacji Plan wykładu Wojciech Complak Wojciech.Complak@cs.put.poznan.pl charakterystyka generatora LLgen składnia specyfikacji analizatora składniowego dołączanie analizatora leksykalnego rozszerzenia składni

Bardziej szczegółowo

Wykład 6. Drzewa poszukiwań binarnych (BST)

Wykład 6. Drzewa poszukiwań binarnych (BST) Wykład 6 Drzewa poszukiwań binarnych (BST) 1 O czym będziemy mówić Definicja Operacje na drzewach BST: Search Minimum, Maximum Predecessor, Successor Insert, Delete Struktura losowo budowanych drzew BST

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

procesów Współbieżność i synchronizacja procesów Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

procesów Współbieżność i synchronizacja procesów Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak Plan wykładu Abstrakcja programowania współbieżnego Instrukcje atomowe i ich przeplot Istota synchronizacji Kryteria poprawności programów współbieżnych

Bardziej szczegółowo

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma}; INSTRUKCJA PUSTA Nie składa się z żadnych znaków i symboli, niczego nie robi Przykłady: for i := 1 to 10 do {tu nic nie ma}; while a>0 do {tu nic nie ma}; if a = 0 then {tu nic nie ma}; INSTRUKCJA CASE

Bardziej szczegółowo

Złożoność obliczeniowa zadania, zestaw 2

Złożoność obliczeniowa zadania, zestaw 2 Złożoność obliczeniowa zadania, zestaw 2 Określanie złożoności obliczeniowej algorytmów, obliczanie pesymistycznej i oczekiwanej złożoności obliczeniowej 1. Dana jest tablica jednowymiarowa A o rozmiarze

Bardziej szczegółowo

JĘZYKI FORMALNE I METODY KOMPILACJI

JĘZYKI FORMALNE I METODY KOMPILACJI Stefan Sokołowski JĘZYKI FORMALNE I METODY KOMPILACJI Inst Informatyki Stosowanej, PWSZ Elbląg, 2015/2016 JĘZYKI FORMALNE reguły gry Wykład1,str1 Zasadnicze informacje: http://iispwszelblagpl/ stefan/dydaktyka/jezform

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