Metody Kompilacji Wykład 7 Analiza Syntaktyczna
|
|
- Zdzisław Pluta
- 5 lat temu
- Przeglądów:
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 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ółowoMetody 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ółowoMetody 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ółowo0.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ółowoMatematyczne 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ółowoWprowadzenie 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ółowoWykł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ółowoAnalizator 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ółowoAnaliza 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ółowoJIP. 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ółowoAnaliza 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ółowoJę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ółowoEfektywna 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ółowoUproszczony 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ółowoJę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ółowoPodstawy 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ółowoWłą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ółowoJAO - 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ółowoZadanie 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ółowo10. 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ółowoUproszczony 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ółowoGramatyka 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ółowoMetody 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ółowo2.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ółowoGeneratory 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ółowo3.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ółowoAutomat 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ółowoGramatyki 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ółowoJę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ółowoJę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ółowoJę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ółowoTeoretyczne 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ółowoGramatyki, 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ółowoGramatyki 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ółowoPodstawy 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ółowoPARADYGMATY 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ółowoLingwistyka 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ółowoAnaliza 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ółowoAlgorytmy 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ółowoGRAMATYKI 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ółowoJę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ółowoJAO - 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ółowoWykł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ółowoOpis 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ółowoProgram 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ółowoWybrane 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ółowo11 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ółowoMetody 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ółowoAnaliza 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ółowoHierarchia 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ółowoWstę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ółowoWstę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ółowoPrzeglą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ółowoAlgorytmy 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ółowoMetody 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ółowoAlgorytmy 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ółowoProgramowanie 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ółowoJę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ółowoPorzą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ółowoWykł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ółowoMatematyczne 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ółowoTworzenie 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ółowoprowadzą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ółowoSYSTEMY 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ółowoGenerator 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ółowoElż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ółowoPoprawność 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ółowo12. 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ółowoWstę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ółowoJę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ółowoPoniŜ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ółowoInformatyka 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ółowoSortowanie 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
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ółowoAlgorytmy 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ółowoProgramowanie 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ółowoDrzewa 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ółowo1. 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ółowoAlgorytm - 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ółowoLista 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ółowoKolejka 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ółowoJę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ółowoSortowanie. 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ółowoALGORYTMY 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ółowoBison - 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ółowoHierarchia 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ółowoAlgorytmy 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ółowoAproksymacja 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ółowoJę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ółowoDrzewa 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ółowoObiektowa 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ółowoNieró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ółowoGenerator 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ółowoWykł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ółowoPrzeszukiwanie 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ółowoprocesó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ółowoINSTRUKCJA 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ółowoZł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ółowoJĘ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ółowoMETODY 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