Wykład 10. Translacja sterowana składnią

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

Download "Wykład 10. Translacja sterowana składnią"

Transkrypt

1 Wykład 10 Translacja sterowana składnią

2 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 konstrukcje. Wartości tych atrybutów są obliczane za pomocą reguł semantycznych związanych z regułami gramatyki. Istnieją dwie notacje służące do łączenia reguł semantycznych z produkcjami: - definicje sterowane składnią; - schematy translacji;

3 Translacja sterowana składnią Definicje sterowane składnią są wysokopozio- mową specyfikacją translacji. Ukrywają one wiele detali implementacyjnych i zwalniają użytkownika z bezpośredniego określania kolejności w jakiej jest wykonywana translacja; Schematy translacji wskazują kolejność obliczania reguł semantycznych i w związku z tym niektóre detale implementacyjne są w nich widoczne.

4 Translacja sterowana składnią Aby użyć definicji sterowanych składnią lub schematów translacji należy zanalizować strumień symboli leksykalnych, tworząc drzewo wyprowadzenia i następnie przejść to drzewo, tak, aby policzyć reguły semantyczne w jego węzłach; Napis wejściowy Drzewo wyprowadzenia Graf zależności Kolejność obliczeń akcji semantycznych Obliczanie tych reguł może polegać na generacji kodu, zapisie informacji w tablicy symboli, wyświetlaniu komunikatów o błędach lub innym działaniu. Translację strumienia symboli leksykalnych otrzymuje się obliczając reguły semantyczne.

5 Translacja sterowana składnią Napis wejściowy Drzewo wyprowadzenia Graf zależności Kolejność obliczeń akcji semantycznych Implementacja nie musi dosłownie odpowiadać powyższemu schematowi. Pewne szczególne przypadki definicji sterowanych składnią mogą być zaimplementowane jako pojedynczy przebieg wykonujący wszystkie obliczenia w trakcie analizy składniowej, bez konstruowania wprost drzewa wyprowadzenia lub grafu zawierającego zależności między atrybutami. Implementacja z pojedynczym przebiegiem jest ważna ze względu na wydajność krótki czas kompilacji.

6 Definicja sterowana składnią Definicja sterowana składnią jest uogólnieniem gramatyki bezkontekstowej, w której z każdym symbolem gramatyki jest związany pewien zbiór atrybutów. Zbiór ten jest podzielony na dwa podzbiory: - Atrybuty syntezowane - Atrybuty dziedziczone. Jeśli węzeł w drzewie wyprowadzenia dla symbolu gramatyki traktujemy jako rekord zawierający pola przechowujące informacje, to atrybut odpowiada nazwie pola rekordu.

7 Atrybuty Atrybut może reprezentować dowolne wielkości: napis, liczbę, typ, adres pamięci itp.. Wartość atrybutu w węźle drzewa wyprowadzenia jest zdefiniowana przez regule semantyczną związaną z produkcja użyta dla tego węzła; Wartość atrybutu syntezowanego jest obliczana z wartości atrybutów w dzieciach tego węzła z drzewa wyprowadzenia; Wartość atrybutu dziedziczonego na podstawie atrybutów w sąsiadach i rodzicu węzła.

8 Reguły semantyczne Reguły semantyczne ustanawiają miedzy atrybutami zależności, które mogą być reprezentowane za pomocą grafu. Z takiego grafu zależności wyprowadza się kolejność obliczeń reguł semantycznych; Wartości atrybutów w węzłach drzewa wyprowadzenia dla danego napisu wejściowego definiowane są w trakcie obliczania reguł semantycznych; Reguła semantyczna może mieć także efekty uboczne, np. wypisanie wartości lub zmiana wartości zmiennej globalnej. Implemenatcja nie musi konstruować wprost drzewa wyprowadzenia lub grafu zależności Drzewo wyprowadzenia z widocznymi wartościami atrybutów w każdym węźle nazywamy drzewem wyprowadzenia z przypisami,, natomiast proces obliczania wartości atrybutów w węzłach opisywaniem lub dekoracją drzewa wyprowadzenia.

9 Postać definicji sterowanej składnią W definicji sterowana składnią z każdą produkcją gramatyki A->α jest związany zbiór reguł semantycznych o postaci b:=f(c 1,c 2,,c k ), gdzie f jest funkcją oraz: 1. b jest atrybutem syntezowanym symbolu A,, a c 1,c 2,,c k są atrybutami do symboli z produkcji, albo 2. b jest atrybutem dziedziczonym jednego z symboli gramatyki z prawej strony, a c 1,c 2,,c k są atrybutami symboli z produkcji. W obu przypadkach mówimy, że atrybut b zależy od atrybutów c 1,c 2,,c k.

10 Postać definicji sterowanej składnią Gramatyka atrybutowana jest definicją sterowaną składnią, w której funkcje z reguł semantycznych nie mają efektów ubocznych. Funkcje z reguł semantycznych często zapoisujemy jako wyrażenia. Czasami jedynym celem reguł semantycznych w definicji sterowanej składnią jest tworzenie efektów ubocznych. Reguły semantyczne tego typu są zapisywane jako wywołania procedur lub fragmenty programu. Można je traktować jak reguły definiujące wartości sztucznych atrybutów syntezowanych dla nieterminala z lewej strony produkcji (sztuczny atrybut i znak przypisania := w regule semantycznej nie jest pokazywany).

11 Definicji sterowanej składnią przykład kalkulatora stołowego Produkcja L -> W n W-> W 1 + S W-> S S-> S 1 * C S-> C C -> W C -> cyfra Reguły semantyczne print(w.wart) W.wart := W 1.wart + S.wart W.wart := S.wart S.wart := S 1.wart * C.wart S.wart := C.wart C.wart := W.wart C.wart := cyfra.lekswart

12 Definicji sterowanej składnią przykład kalkulatora stołowego Produkcja L -> W n W-> W 1 + S W-> S S-> S 1 * C S-> C C -> W C -> cyfra Reguły semantyczne print(w.wart) W.wart := W 1.wart + S.wart W.wart := S.wart S.wart := S 1.wart * C.wart S.wart := C.wart C.wart := W.wart C.wart := cyfra.lekswart Ta definicja związuje wartość całkowitą atrybutu syntezowanego, nazwanego wart,, z każdym z nieterminali W, S i C. Dla każdej produkcji dla W, S i C reguła semantyczna oblicza wartość wart dla nieterminala z lewej strony produkcji z wartości wart dla nieterminali z prawej strony. Symbol leksykalny cyfra ma atrybut syntezowany lekswart,, którego wartość dostarcza analizator leksykalny; Reguła związana z produkcją L->Wn dla nieterminala startowego L jest po prostu procedurą wypisującą wartość wyrażenia arytmetycznego wygenerowanego przez W (można ja traktować jako definicję sztucznego atrybutu dla nieterminala L).

13 Przykład kalkulatora stołowego %{ #include<ctype.h> %} %token CYFRA implementacja w YACC %% wiersz : wyr \n {print( %d\n, $1);} ; wyr : wyr + term {$$ = $1 + $3;} term ; term : term * czynnik {$$ = $1 * $3;} czynnik ; czynnik : ( wyr ) {$$ = $2;} CYFRA ; %% yylex(){ int c; c=getchar(); if (isdigit(c){ yyval=c- 0 ; return CYFRA;} return c; }

14 Definicja sterowana składnią W definicji sterowanej składnią zakłada się, że terminale maja tylko atrybuty syntezowane, ponieważ definicja ta nie zawiera żadnych reguł semantycznych dla terminali. Wartości atrybutów terminali są zwykle dostarczone przez analizator leksykalny. Jeśli nie zostanie stwierdzone inaczej, zakłada się, że symbol startowy nie ma atrybutów dziedziczonych.

15 Atrybuty syntezowane Atrybuty syntezowane są powszechnie używane w praktyce; Definicja sterowana składnią używająca jedynie atrybutów syntezowanych jest nazwana definicją S-atrybutowaną. Drzewo składniowe dla definicji S-atrybutowanej może zostać oznaczone przypisami przez obliczanie reguł semantycznych dla atrybutów w każdym węźle przechodząc od liści do korzenia

16 AS przykład - drzewo wyprowadzenia z przypisami L W.wart=19 n W.wart=15 + S.wart=4 S.wart=15 C.wart=4 S.wart=3 * C.wart=5 cyfra.lekswart=4 C.wart=3 cyfra.lekswart=5 cyfra.lekswart=3 Drzewo wyprowadzenia z przypisami dla 3*5+4n

17 AS przykład - drzewo wyprowadzenia z przypisami Interpretacja: Na diagramie zaprezentowaliśmy drzewo wyprowadzenia dla wejścia 3*5+4 (3*5+4n, gdzie n znak końca wiersza); Wynik wypisany w korzeniu drzewa jest wartością W.wart z pierwszego dziecka korzenia; W celu obliczenia wartości atrybutów rozważamy węzeł najbardziej lewy z dołu, odpowiadający użyciu produkcji C->cyfra cyfra.. Odpowiadająca jej reguła semantyczna C.wart:=cyfra.lekswart ustawia na 3 wartość atrybutu C.wart w tym węźle, ponieważ wartością cyfra.lekswart w dziecku tego węzła jest 3. Podobnie w rodzicu tego węzła atrybut S.wart ma wartość 3. Rozważmy węzeł dla produkcji S->S*C.. Wartośc atrybutu S.wart w tym węźle jest zdefiniowana przez produkcję S->S 1 *C i regułę semantyczną S.wart:=S 1.wart*C.wart Reguła związana z produkcją dla nieterminala startowego L->W n drukuje wartość wyrażenia wygenerowanego przez W.

18 Atrybuty dziedziczone Wartość atrybutu dziedziczonego w węźle drzewa wyprowadzenia jest zdefiniowana na podstawie atrybutów z rodzica oraz z sąsiadów tego węzła; Atrybuty dziedziczone przydają się do wyrażenia zależności konstrukcji programistycznych od kontekstu, w jakim się pojawiają; Chociaż definicję sterowaną składnią zawsze można przepisać, tak aby używała tylko atrybutów syntezowanych, często bardziej naturalne jest użycie w niej atrybutów dziedziczonych. Zobaczmy na przykładzie jak atrybut dziedziczony rozprowadza informacje o typach do poszczególnych identyfikatorów w deklaracji.

19 AD - przykład Produkcja D -> T L T -> int T -> real L-> L 1, id L -> id Reguły semantyczne L.dz := T.typ T.typ := integer T.typ := real L 1.dz = L.dz dodajtyp(id.wpis, L.dz) dodajtyp(id.wpis, L.dz)

20 AD przykład Produkcja D -> T L T -> int T -> real L-> L 1, id L -> id Reguły semantyczne L.dz := T.typ T.typ := integer T.typ := real L 1.dz = L.dz dodajtyp(id.wpis, L.dz) dodajtyp(id.wpis, L.dz) Deklaracja generowana przez nieterminal D w definicji sterowanej składnią zawiera słowa kluczowe int lub real oaz występujące po nich listy identyfikatorów; Nieterminal T ma atrybut syntezowany typ, którego wartość jest wyznaczana na podstawie słowa kluczowego w deklaracji; Reguła semantyczna L.dz := T.typ związana z produkcją D->TL ustawia atrybut dziedziczony L.dz na typ deklaracji. Następne reguły przy użyciu L.dz przeprowadzają tę wartość w dół drzewa wyprowadzenia; Reguły związane z produkcjami dla L wywołują procedurę dodajtyp do dodania typu dla każdego identyfikatora do jego wpisu w tablicy symboli (wskazanego przez atrybut wpis).

21 Drzewo wyprowadzenia z atrybutem dziedziczonym w każdym węźle. D T.typ=real real L.dz=real L.dz=real, id 3 L.dz=real, id 2 id 1 Drzewo wyprowadzenia z atrybutem dziedziczonym dz w każdym węźle dla L

22 Drzewo wyprowadzenia z atrybutem dziedziczonym w każdym węźle Interpretacja: Na diagramie zaprezentowaliśmy drzewo wyprowa- dzenia z przypisami dla zdania real id 1, id 2, id 3. Wartość L.dz w trzech węzłach L stanowi typ dla trzech identyfikatorów id 1, id 2, id 3 ; Wartości te sa wyznaczone po obliczeniu wartości atrybutu T.typ w lewym dziecku korzenia i następnie przechodzą w dół drzewa wartość L.dz w trzech węzłach dla L w prawym poddrzewie korzenia. W każdym poddrzewie dla L zostanie wywołana również procedura dodajtyp ustawiająca w tablicy symboli typ real dla identyfikatora z prawego dziecka tego węzła.

23 AS przykład - drzewo wyprowadzenia z przypisami Interpretacja: Na diagramie zaprezentowaliśmy drzewo wyprowadzenia dla wejścia 3*5+4 (3*5+4n, gdzie n znak końca wiersza); Wynik wypisany w korzeniu drzewa jest wartością W.wart z pierwszego dziecka korzenia; W celu obliczenia wartości atrybutów rozważamy węzeł najbardziej lewy z dołu, odpowiadający użyciu produkcji C->cyfra cyfra.. Odpowiadająca jej reguła semantyczna C.wart:=cyfra.lekswart ustawia na 3 wartość atrybutu C.wart w tym węźle, ponieważ wartością cyfra.lekswart w dziecku tego węzła jest 3. Podobnie w rodzicu tego węzła atrybut S.wart ma wartość 3. Rozważmy węzeł dla produkcji S->S*C.. Wartośc atrybutu S.wart w tym węźle jest zdefiniowana przez produkcję S->S 1 *C i regułę semantyczną S.wart:=S 1.wart*C.wart Reguła związana z produkcją dla nieterminala startowego L->W n drukuje wartość wyrażenia wygenerowanego przez W.

24 Grafy zależności Jeżeli atrybut b w węźle drzewa wyprowadzenia zależy od atrybutu c,, to reguła dla b w tym węźle musi zostać wyliczona po regule semantycznej definiującej c. Wzajemne zależności między atrybutami syntezowanymi i dziedziczonymi w węzłach drzewa wyprowadzenia mogą zostać przedstawione za pomocą grafu skierowanego zwanego grafem zależności. Przed skonstruowaniem grafu zależności dla drzewa wyprowadzenia każda reguła semantyczna jest zapisywana w postaci: b:=f(c 1,c 2,...,c k ) Dla reguł semantycznych składających się z wywołania procedury wyprowadzany jest sztuczny atrybut syntezowany b.. Graf zależności ma węzły dla wszystkich atrybutów oraz krawędzie z każdego b do każdego c takie, że atrybut b zależy od atrybutu c.

25 Grafy zależności - algorytm for każdy węzeł n w drzewie wyprowadzenia do for każdy atrybut a symbolu gramatyki z n do utwórz węzeł w grafie zależności dla a; for każdy węzeł n w drzewie wyprowadzenia do for każda reguła semantyczna b:=f(c 1,c 2,...,c k ) związana z produkcją użytą w n do for i:=1 to k do skonstruuj krawędź z węzła dla c i do węzła dla b;

26 Grafy zależności przykład Załóżmy, że A.a:=f(X.x,Y.y) jest regułą semantyczną dla produkcji A->XY; Reguła ta definiuje atrybut syntezowany A.a zależny od atrybutów X.x i Y.y; Jeśli ta produkcja jest używana w drzewie wyprowadzenia, to w grafie zależności znajdą się: - trzy węzły: A.a, X.x, Y.y; ; oraz - krawędzie z A.a do X.x (ponieważ A.a zależy do X.x) ) i z A.a do Y.y (ponieważ A.a zalezy od Y.y) Jeśli produkcja A->XY miałaby związaną z nią regułę semantyczną X.i:=g(A.a,Y.y) to istniałyby krawędzie z X.i do A.a oraz Y.y,, ponieważ X.i zależy zarówno od A.a,, jak i od Y.y.

27 Grafy zależności przykład Produkcja W > W 1 + W 2 Reguła semantyczna W.wart:= W 1.wart + W 2.wart W wart W 1 + W 2 wart wart Trzy węzły w grafie zależności reprezentują atrybuty syntezowane W.wart, W 1.wart i W 2.wart z odpowiednich węzłów drzewa wyprowadzenia. Krawędź z W.wart do W 1.wart oznacza że W.wart zależy od W 1.wart Krawędź z W.wart do W 2.wart oznacza że W.wart zależy od W 2.wart Linie przerywane oznaczają drzewo wyprowadzenia i nie są częścią grafu zależności.

28 Grafy zależności przykład Drzewo wyprowadzenia

29 Grafy zależności przykład Interpretacja: Węzły w grafie zależności są oznaczone liczbami, które będą używane do ich numeracji; Ponieważ atrybut dziedziczony L.dz zależy od atrybutu T.typ z reguły L.dz:=T.typ dla produkcji D->TL,, więc z węzła 4 dla T.typ istnieje krawędź do węzła 5; Ponieważ L 1.dz zależy od L.dz w regule semantycznej L 1.dz:=L.dz dla produkcji L->L 1,id więc pojawiają się dwie krawędzie prowadzące od węzłów 7 i 9; Każda z reguł semantycznych dodajtyp(id id.wpis,l.dz) związana z produkcjami L powoduje utworzenie sztucznego atrybutu; Węzły 6,9 i 10 są tworzone dla sztucznych atrybutów.

30 Kolejność obliczeń Porządek topologiczny w acyklicznym grafie skierowanym jest uporządkowaniem węzłów grafu m 1,m 2,...,m k, dla którego wszystkie krawędzie grafu prowadzą od wcześniejszych węzłów do późniejszych w tym porządku. Inaczej mówiąc, jeśli m i m j jest krawędzią z m i do m j, to w tym porządku m i występuje przed m j. Każdy porządek topologiczny w grafie zależności dostarcza prawidłowej kolejności obliczeń reguł semantycznych związanych z węzłami drzewa wyprowadzenia. W porządku topologicznym atrybuty zależne c 1,c 2,...,c k z reguły semantycznej b:=f(c 1,c 2,...,c k ) muszą być do- stępne w węźle przed rozpoczęciem obliczania funkcji f.

31 Podsumowanie Translacja specyfikowana przez definicję sterowaną składnią może zostać sprecyzowana w następujący sposób: - Gramatyka, na której ta definicja bazuje, jest używana do konstrukcji drzewa wyprowadzenia dla wejścia; - Graf zależności jest konstruowany w sposób omówiony wcześniej; - Z porządku topologicznego w grafie zależności otrzymujemy kolejność obliczeń dla reguły seman- tycznych; - Obliczenie reguł semantycznych w tej kolejności daje translację napisu wejściowego.

32 Kolejność obliczeń - przykład Graf zależności; Ponieważ każda krawędź w grafie zależności prowadzi z węzła o niższej numeracji do węzła o wyższej numeracji, więc porządek topologiczny w grafie zależności można otrzymać zapisując węzły w porządku przypisanych im numerów. Niech a n będzie atrybutem związanym z węzłem o numerze n w grafie zależności. Wówczas: a 4 := real; a 5 := a 4 ; dodajtyp(id 3.wpis, a 5 ); a 7 :=a 5 ; dodajtyp(id 2.wpis, a 7 ); a 9 :=a 7 ; dodajtyp(id 1.wpis, a 9 ); Obliczając te reguły semantyczne, zapisujemy typ real we wpisach w tablicy symboli dla każdego identyfikatora.

33 Obliczanie reguł semantycznych Metody obliczania reguł semantycznych: - Metody bazujące na drzewach wypro- wadzenia; - Metody bazujące na regułach; - Metody bez pamięci;

34 Metody bazujące na drzewach wyprowadzenia W czasie kompilacji metody bazujące na drzewach wyprowadzenia wyznaczają kolejność obliczeń na podstawie porządku topologicznego z grafu zależności dla drzewa wyprowadzenia dla każdego wejścia. Metody te nie zadziałają jedynie wtedy, gdy graf zależności dla rozważanego drzewa wyprowadzenia ma cykl.

35 Metody bazujące na regułach W czasie konstrukcji kompilatora reguły semantyczne związane z produkcjami są analizowane ręcznie lub przy użyciu wyspecjalizowanych narzędzi. Dla każdej produkcji porządek obliczeń atrybutów z nią związanych jest wyznaczany w trakcie konstrukcji kompilatora.

36 Metody bez pamięci Kolejność obliczeń jest ustalana bez rozważania reguł semantycznych. Przykładów, jeśli translacja odbywa się podczas analizy składniowej, to porządek obliczeń jest narzu- cany przez samą metodę analizy składniowej, niezależnie od reguł semantycznych. Taka kolejność obliczeń ogranicza klasę definicji sterowanych składnią, które mogą zostać zaimplementowane.

37 Obliczanie reguł semantycznych Wnioski: Metody bazujące na regułach i metody bez pamięci nie konstruują grafu zależności w trakcie kompilacji, więc mogą być bardziej wydajne pod względem czasu kompilacji i wykorzystania pamięci; Metody bazujące na drzewach wyprowadzenia nie zadziałają jedynie wtedy, gdy graf zależności dla rozważanego drzewa wyprowadzenia ma cykl (takie definicje sterowane składnią nazywamy cyklicznymi).

38 Podsumowanie Wśród definicji sterowanych składnią wyróżniamy dwie podklasy: - S-atrybutowe w których używane są jedynie atrybuty syntezowane; - L-atrybutowe w których każdy atrybut może być atrybutem syntezowanym albo atrybutem dziedziczonym symbolu stojącego po prawej stronie produkcji, który zależy od atrybutów symboli stojących po prawej stronie produkcji na lewo od niego i od atrybutu dziedziczonego symbolu stojącego po lewej stronie produkcji; Wniosek: Każda definicja S-atrybutowa jest również L-atrybutowa.

39 Translacja sterowana składnią - LLGEN W generatorze LLgen atrybuty symboli są implementowane w dokładnie taki sam sposób jak w języku C, czyli jako parametry funkcji: - Atrybuty syntezowane jako parametry wyjściowe (na poziomie języka C wskaźniki); - Atrybuty dziedziczone jako parametry wejściowe (na poziomie języka C zmienne przekazywane przez wartość).

40 Translacja sterowana składnią - LLGEN Generator LLgen nie nakłada własnych, dodatkowych ograniczeń na liczbę i typ atrybutów ponad te, które wynikają z użycia języka C; Przykład: S (int p1,; int p2; int *p3; double *p4;) {int l1; double l2; } :... Nieterminal S ma w powyższej produkcji: - Dwa atrybuty dziedziczone (p1, p2); - Dwa atrybuty syntezowane (p3 i p4); - Dwie zmienne lokalne (l1 i l2).

41 Translacja sterowana składnią - LLGEN Generator LLgen nie nakłada własnych, dodatkowych ograniczeń na liczbę i typ atrybutów ponad te, które wynikają z użycia języka C; Przykład: S (int p1,; int p2; int *p3; double *p4;) {int l1; double l2; } :... Nieterminal S ma w powyższej produkcji: - Dwa atrybuty dziedziczone (p1, p2); - Dwa atrybuty syntezowane (p3 i p4); - Dwie zmienne lokalne (l1 i l2).

42 Translacja sterowana składnią - LLGEN Atrybuty i zmienne lokalne deklarowane są w produkcji, w której dany nieterminal znajduje się po lewej stronie (jest tylko jedna taka produkcja dla każdego nieterminala, ponieważ w LLgenie alternatywne prawe strony muszą być zapisane po znaku ); Atrybuty definiujemy zaraz po nazwie symbolu, w nawiasach okrągłych, rozdzielając je średnikami, średnik po ostatnim atrybucie jest opcjonalny; Zmienne lokalne deklarujemy po nazwie symbolu i atrybutach w nawiasach klamrowych. S (int p1,; int p2; int *p3; double *p4;) {int l1; double l2; } :... atrybuty Zmienne lokalne

43 Translacja sterowana składnią - YACC W generatorze YACC reguły semantyczne są obliczane w trakcie przetwarzania wejścia. Drzewo rozbioru nie jest jawnie konstruowane a kolejność obliczania atrybutów wynika z zasady działania LR-parsera akcje są wykonywane tylko w trakcie redukcji. Zaletą takiego podejścia jest prostota i efektywność translatora (małe narzuty pamięciowe i czasowe). Wadą takiego podejścia jest możliwość przetwarzania tylko L-atrybutowych definicji sterowanych składnią.

44 Translacja sterowana składnią - YACC Uwaga: Może się wydawać, że ograniczenie możliwości przetwarzania definicji sterowanych składnią do zbioru tylko L-atrybutowych jest istotne. W praktyce jednak rzadko jest to istotny problem. Jeżeli definicja sterowana składnia nie jest L-atrybutowa, a chcemy taki translator w YACC-u skonstruować mamy dwa rozwiązania: - przepisać definicję tak, aby była L-atrybutowa (czasem definicję sterowaną składnią można łatwo zmodyfikować tak, żeby była L- atrybutowa (a nawet S-atrybutowa); - Samodzielnie skonstruować niezbędną część (albo całe) drzewo rozbioru i dokonać ewaluacji wtedy, gdy znane będą już konieczne wartości atrybutów.

45 Translacja sterowana składnią - YACC W generatorze YACC translację sterowana składnią można realizować w oparciu o zmienne globalne albo wbudowane mechanizmy atrybutów. Można stosować także kombinację tych pojęć; Mechanizm atrybutów wbudowany w generator YACC jest dostatecznie elastyczny i efektywny, aby implementować z jego użyciem wszystkie translatory unikając zagrożeń wynikających z używania zmiennych globalnych; W bardziej złożonych specyfikacjach łatwo jest stracić kontrolę nad użyciem zmiennych globalnych, a dodatkowe zagrożenia stanowi ścisłe kontrolowanie kolejności wykonywania obliczeń związanej z działaniem LR- parsera; Wniosek: Lepiej nie korzystać ze zmiennych globalnych ani w samym analizatorze składniowym, ani pośredniczących w przekazywaniu wartości między skanerem a parserem.

46 Koniec wykładu dziesiątego

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

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

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

Wykład 11. Konstrukcja drzew składniowych

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

Bardziej szczegółowo

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

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

Metody Kompilacji Wykład 7 Analiza Syntaktyczna

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

Bardziej szczegółowo

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

Translacja sterowana składnią w generatorze YACC

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

Bardziej szczegółowo

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

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

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

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

Bardziej szczegółowo

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

KONSTRUKCJA KOMPILATORÓW

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

Bardziej szczegółowo

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

Podstawy Kompilatorów

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

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

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

Bardziej szczegółowo

L E X. Generator analizatorów leksykalnych

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

Bardziej szczegółowo

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

Matematyczne Podstawy Informatyki

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

Bardziej szczegółowo

Podstawy 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

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

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

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

Bardziej szczegółowo

Matematyka dyskretna - 7.Drzewa

Matematyka dyskretna - 7.Drzewa Matematyka dyskretna - 7.Drzewa W tym rozdziale zajmiemy się drzewami: specjalnym przypadkiem grafów. Są one szczególnie przydatne do przechowywania informacji, umożliwiającego szybki dostęp do nich. Definicja

Bardziej szczegółowo

Wykład 14. Środowisko przetwarzania

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

PROLOG WSTĘP DO INFORMATYKI. Akademia Górniczo-Hutnicza. Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej.

PROLOG WSTĘP DO INFORMATYKI. Akademia Górniczo-Hutnicza. Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej. Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej WSTĘP DO INFORMATYKI Adrian Horzyk PROLOG www.agh.edu.pl Pewnego dnia przyszedł na świat komputer Komputery

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

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

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

Bardziej szczegółowo

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

Diagramy klas. dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com

Diagramy klas. dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com Diagramy klas dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com O czym będzie? Notacja Ujęcie w różnych perspektywach Prezentacja atrybutów Operacje i metody Zależności Klasy aktywne,

Bardziej szczegółowo

Wprowadzenie do kompilatorów

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

Bardziej szczegółowo

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

Podstawy Programowania

Podstawy Programowania Podstawy Programowania Monika Wrzosek Instytut Matematyki Uniwersytet Gdański Matematyka 2017/18 Monika Wrzosek (IM UG) Podstawy Programowania 1 / 119 Sprawy organizacyjne E-mail: mwrzosek@mat.ug.edu.pl

Bardziej szczegółowo

Indukowane Reguły Decyzyjne I. Wykład 3

Indukowane Reguły Decyzyjne I. Wykład 3 Indukowane Reguły Decyzyjne I Wykład 3 IRD Wykład 3 Plan Powtórka Grafy Drzewa klasyfikacyjne Testy wstęp Klasyfikacja obiektów z wykorzystaniem drzewa Reguły decyzyjne generowane przez drzewo 2 Powtórzenie

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

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

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

Bardziej szczegółowo

Układy VLSI Bramki 1.0

Układy VLSI Bramki 1.0 Spis treści: 1. Wstęp... 2 2. Opis edytora schematów... 2 2.1 Dodawanie bramek do schematu:... 3 2.2 Łączenie bramek... 3 2.3 Usuwanie bramek... 3 2.4 Usuwanie pojedynczych połączeń... 4 2.5 Dodawanie

Bardziej szczegółowo

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1 Tablice wielowymiarowe C umożliwia definiowanie tablic wielowymiarowych najczęściej stosowane

Bardziej szczegółowo

0.1 Lewostronna rekurencja

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

Bardziej szczegółowo

Efektywna analiza składniowa GBK

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

Bardziej szczegółowo

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur. Języki i paradygmaty programowania 1 studia stacjonarne 2018/19 Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur. 1. Identyfikator funkcji,

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

Słowem wstępu. Część rodziny języków XSL. Standard: W3C XSLT razem XPath 1.0 XSLT Trwają prace nad XSLT 3.0

Słowem wstępu. Część rodziny języków XSL. Standard: W3C XSLT razem XPath 1.0 XSLT Trwają prace nad XSLT 3.0 Słowem wstępu Część rodziny języków XSL Standard: W3C XSLT 1.0-1999 razem XPath 1.0 XSLT 2.0-2007 Trwają prace nad XSLT 3.0 Problem Zakładane przez XML usunięcie danych dotyczących prezentacji pociąga

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

Semantyka i Weryfikacja Programów - Laboratorium 6

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

Bardziej szczegółowo

TEMAT : KLASY DZIEDZICZENIE

TEMAT : KLASY DZIEDZICZENIE TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą

Bardziej szczegółowo

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II Algorytmy Równoległe i Rozproszone Część V - Model PRAM II Łukasz Kuszner pokój 209, WETI http://www.sphere.pl/ kuszner/ kuszner@sphere.pl Oficjalna strona wykładu http://www.sphere.pl/ kuszner/arir/ 2005/06

Bardziej szczegółowo

Podstawy Kompilatorów

Podstawy Kompilatorów Podstawy Kompilatorów Laboratorium 3 Uwaga: Do wykonania poniższych zadań związanych z implementacją niezbędny jest program LEX oraz kompilator. Dla środowiska Linux mogą to być: Darmowa wersja generatora

Bardziej szczegółowo

Analiza leksykalna i generator LEX

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Obliczenia iteracyjne

Obliczenia iteracyjne Lekcja Strona z Obliczenia iteracyjne Zmienne iteracyjne (wyliczeniowe) Obliczenia iteracyjne wymagają zdefiniowania specjalnej zmiennej nazywanej iteracyjną lub wyliczeniową. Zmienną iteracyjną od zwykłej

Bardziej szczegółowo

Matematyczne Podstawy Informatyki

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

Bardziej szczegółowo

Reprezentacje grafów nieskierowanych Reprezentacje grafów skierowanych. Wykład 2. Reprezentacja komputerowa grafów

Reprezentacje grafów nieskierowanych Reprezentacje grafów skierowanych. Wykład 2. Reprezentacja komputerowa grafów Wykład 2. Reprezentacja komputerowa grafów 1 / 69 Macierz incydencji Niech graf G będzie grafem nieskierowanym bez pętli o n wierzchołkach (x 1, x 2,..., x n) i m krawędziach (e 1, e 2,..., e m). 2 / 69

Bardziej szczegółowo

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

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

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

Analiza i projektowanie obiektowe 2016/2017. Wykład 10: Tworzenie projektowego diagramu klas

Analiza i projektowanie obiektowe 2016/2017. Wykład 10: Tworzenie projektowego diagramu klas Analiza i projektowanie obiektowe 2016/2017 Wykład 10: Tworzenie projektowego diagramu klas Jacek Marciniak Wydział Matematyki i Informatyki Uniwersytet im. Adama Mickiewicza 1 Plan wykładu 1. Projektowy

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

Podstawy Programowania C++

Podstawy Programowania C++ Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:

Bardziej szczegółowo

Tworzenie języków specyfikacji dla zagadnień numerycznych

Tworzenie języków specyfikacji dla zagadnień numerycznych Tworzenie języków specyfikacji dla zagadnień numerycznych prof. dr hab. inż. Norbert Sczygiol dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska 11 września

Bardziej szczegółowo

Przyczyny dwustopniowego tłumaczenia

Przyczyny dwustopniowego tłumaczenia Generacja kodu pośredniego Teoria kompilacji Dr inŝ. Janusz Majewski Katedra Informatyki Przyczyny dwustopniowego tłumaczenia Łatwość generowania kompilatorów tego samego języka dla róŝnych platform systemowo-sprzętowych

Bardziej szczegółowo

Modelowanie diagramów klas w języku UML. Łukasz Gorzel 244631@stud.umk.pl 7 marca 2014

Modelowanie diagramów klas w języku UML. Łukasz Gorzel 244631@stud.umk.pl 7 marca 2014 Modelowanie diagramów klas w języku UML Łukasz Gorzel 244631@stud.umk.pl 7 marca 2014 Czym jest UML - Unified Modeling Language - Rodzina języków modelowania graficznego - Powstanie na przełomie lat 80

Bardziej szczegółowo

ZASADY PROGRAMOWANIA KOMPUTERÓW

ZASADY PROGRAMOWANIA KOMPUTERÓW POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.

Bardziej szczegółowo

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI Wprowadzenie do środowiska Matlab 1. Podstawowe informacje Przedstawione poniżej informacje maja wprowadzić i zapoznać ze środowiskiem

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

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

Definiowanie języka przez wyrażenie regularne(wr)

Definiowanie języka przez wyrażenie regularne(wr) Wykład3,str1 Definiowanie języka przez wyrażenie regularne(wr) DEFINICJA: (wyrażenia regularne) M(specjalneznakinienależącedoalfabetu:{,},, ) literyalfabetusąwr złożeniawrsąwr: jeśliw 1 iw 2 sąwr,to{w

Bardziej szczegółowo

Zmienne, stałe i operatory

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

Bardziej szczegółowo

Gramatyki regularne i automaty skoczone

Gramatyki regularne i automaty skoczone Gramatyki regularne i automaty skoczone Alfabet, jzyk, gramatyka - podstawowe pojcia Co to jest gramatyka regularna, co to jest automat skoczony? Gramatyka regularna Gramatyka bezkontekstowa Translacja

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

Klasy abstrakcyjne i interfejsy

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

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

Temat: Zastosowanie wyrażeń regularnych do syntezy i analizy automatów skończonych

Temat: Zastosowanie wyrażeń regularnych do syntezy i analizy automatów skończonych Opracował: dr inż. Zbigniew Buchalski KATEDRA INFORMATYKI TECHNICZNEJ Ćwiczenia laboratoryjne z Logiki Układów Cyfrowych ćwiczenie Temat: Zastosowanie wyrażeń regularnych do syntezy i analizy automatów

Bardziej szczegółowo

Wstęp do programowania. Wykład 1

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

Bardziej szczegółowo

Programowanie komputerów

Programowanie komputerów Programowanie komputerów Wykład 1-2. Podstawowe pojęcia Plan wykładu Omówienie programu wykładów, laboratoriów oraz egzaminu Etapy rozwiązywania problemów dr Helena Dudycz Katedra Technologii Informacyjnych

Bardziej szczegółowo

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA Bieżący sylabus w semestrze zimowym roku 2016/17

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA Bieżący sylabus w semestrze zimowym roku 2016/17 Załącznik nr 4 do Uchwały Senatu nr 430/01/2015 SYLABUS DOTYCZY CYKLU KSZTAŁCENIA 2016-2018 Bieżący sylabus w semestrze zimowym roku 2016/17 1.1. PODSTAWOWE INFORMACJE O PRZEDMIOCIE/MODULE Nazwa przedmiotu/

Bardziej szczegółowo

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++ Programowanie Wstęp p do programowania Klasa 3 Lekcja 9 PASCAL & C++ Język programowania Do przedstawiania algorytmów w postaci programów służą języki programowania. Tylko algorytm zapisany w postaci programu

Bardziej szczegółowo

Podstawy programowania w C++

Podstawy programowania w C++ Podstawy programowania w C++ Strumienie wejścia cin>> i wyjścia cout

Bardziej szczegółowo

Typy sparametryzowane

Typy sparametryzowane Typy sparametryzowane Streszczenie Celem wykładu jest zaprezentowanie typów sparametryzowanych. Czas wykładu 90 minut. Istnieją algorytmy, których zasada działania nie zależy od typu danych wejściowych.

Bardziej szczegółowo

1 Wprowadzenie do algorytmiki

1 Wprowadzenie do algorytmiki Teoretyczne podstawy informatyki - ćwiczenia: Prowadzący: dr inż. Dariusz W Brzeziński 1 Wprowadzenie do algorytmiki 1.1 Algorytm 1. Skończony, uporządkowany ciąg precyzyjnie i zrozumiale opisanych czynności

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

Warsztaty dla nauczycieli

Warsztaty dla nauczycieli WPROWADZENIE Wyprowadzanie danych: Wyprowadzanie na ekran komunikatów i wyników umożliwia instrukcja wyjścia funkcja print(). Argumentami funkcji (podanymi w nawiasach) mogą być teksty, wyrażenia arytmetyczne

Bardziej szczegółowo

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI Dr inż. Grażyna KRUPIŃSKA Grazyna.Krupinska@fis.agh.edu.pl D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI Wyrażenia 2 Wyrażenia w języku C są bardziej elastyczne niż wyrażenia w jakimkolwiek innym języku

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 1. Programowanie komputerowe

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 1. Programowanie komputerowe Wydział Zarządzania AGH Katedra Informatyki Stosowanej Podstawy VBA cz. 1 Programowanie 1 Program wykładu Struktura programu Instrukcja przypisania Wprowadzanie danych Wyprowadzanie wyników Instrukcja

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