Translacja sterowana składnią w generatorze YACC

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

Download "Translacja sterowana składnią w generatorze YACC"

Transkrypt

1 Translacja sterowana składnią w generatorze YACC Wojciech Complak 1

2 Plan wykładu zasady implementacji translacji sterowanej składnią w generatorze YACC korzystanie z atrybutów syntetyzowanych typy atrybutów korzystanie z atrybutów dziedziczonych akcje wielokrotne akcja domyślna Translacja sterowana składnią w generatorze YACC (2) W ramach wykładu zostaną przedstawione następujące zagadnienia: zasady implementacji translacji sterowanej składnią w generatorze YACC, korzystanie z atrybutów syntetyzowanych, definiowanie i posługiwanie się typami atrybutów, korzystanie z atrybutów dziedziczonych, konsekwencje wykorzystania akcji wielokrotnych, sytuacje, gdy jawne użycie akcji domyślnej jest konieczne. 2

3 Implementacja translacji sterowanej składnią w YACCu reguły semantyczne w YACCu są obliczane w trakcie translacji drzewo rozbioru nie jest jawnie konstruowane, porządek ewaluacji atrybutów jest narzucony przez samą metodę analizy składniowej 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ą Translacja sterowana składnią w generatorze YACC (3) W YACCu reguły semantyczne są obliczane w trakcie przetwarzania wejścia. Samo drzewo nie jest konstruowane jawnie, a kolejność obliczania atrybutów wynika z zasady działania LR-parsera akcje są wykonywane tylko w trakcie redukcji. Dzięki tym regułom wygenerowane analizatory są relatywnie proste i efektywne. Z początku 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 jednak definicja sterowana składnią nie jest L-atrybutowa, a chcemy taki translator skonstruować w YACCu mamy dwa rozwiązania: -przepisać definicję tak, aby była L-atrybutowa, czasami definicję sterowaną składnią można łatwo zmodyfikować tak, żeby była L-atrybutowa (a nawet S-atrybutowa), w niektórych przypadkach konieczne może być jednak znaczące przebudowanie gramatyki i wtedy warto rozważyć drugie rozwiązanie, - samodzielnie skonstruować niezbędną część (albo całe) drzewo rozbioru i dokonać ewaluacji wtedy, gdy znane będą już konieczne wartości atrybutów 3

4 Dlaczego nie używać zmiennych globalnych w YACCu? realizując translację sterowaną składnią w YACCu bezpieczniej jest korzystać z mechanizmu atrybutów wbudowanego w generator używanie, nawet w przypadku prostych analizatorów, zmiennych globalnych obok tradycyjnych zagrożeń związanych z ich użyciem zmusza również do uwzględnienia efektów ubocznych kolejności wykonywania akcji przez LR-parser Translacja sterowana składnią w generatorze YACC (4) Translację sterowaną składnią można w YACCu realizować w oparciu o zmienne globalne albo wbudowany mechanizm atrybutów. Można także stosować kombinację obu podejść. Wydaje się jednak, że 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żenie stanowi ścisłe kontrolowanie kolejności wykonywania obliczeń związanej z działaniem LR-parsera. Lepiej więc nie korzystać ze zmiennych globalnych ani w samym analizatorze składniowym, ani pośredniczących w przekazywaniu wartości między skanerem a parserem. 4

5 Zmienne globalne na wejściu dany jest ciąg liczb naturalnych rozdzielonych znakami dodawania i ewentualnie ciągami spacji i/lub tabulatorów. Ciąg zakończony jest znakiem równości. Po natrafieniu na znak równości należy wypisać sumę wszystkich dotychczas rozpoznanych liczb. Na przykład, dla ciągu: = powinniśmy otrzymać rezultat: 6 Translacja sterowana składnią w generatorze YACC (5) Jako przykład niebezpieczeństwa związanego z użyciem zmiennych globalnych rozważmy implementację prostego kalkulatora. Jego zadaniem jest obliczenie sumy liczb całkowitych napotkanych na wejściu, a w momencie napotkania znaku równości wydrukowanie tej sumy na standardowym wyjściu. 5

6 Zmienne globalne analizator leksykalny: globalna zmienna x %{ extern int x; %} %% [0-9]+ { x = atoi(yytext); return ; } "+" { return ; } "=" { return '='; } " " { ; } Translacja sterowana składnią w generatorze YACC (6) Analizator leksykalny implementujemy z wykorzystaniem generatora LEX. Analizator rozpoznaje liczby całkowite (zgodne z wzorcem [0-9]+), konwertuje je do postaci binarnej i przekazuje jako atrybut jednostki leksykalnej. Do przekazywania wartości atrybutu do analizatora składniowego najprościej (co nie znaczy najbezpieczniej) jest użyć globalnej zmiennej typu całkowitego (int). Zmienna globalna może zostać zdefiniowana w: - analizatorze leksykalnym - analizatorze składniowym (tak jak w przykładzie) - pliku pomocniczym. Na marginesie, warto zwrócić uwagę na to, że nazwy niektórych zmiennych mogą kolidować z wewnętrznymi zmiennymi wykorzystywanymi w wygenerowanym analizatorze (tak jest np. ze zmienną i w MKS LEX & YACC). Należy także unikać nadawania własnym zmiennym nazw zaczynających się od prefiksu yy. Analizator rozpoznaje również znaki dodawania i równości, tym razem jednak nie przypisując żadnej wartości atrybutu. Znaki spacji na wejściu są ignorowane. 6

7 Zmienne globalne do opisania powtarzania się na wejściu kolejnych liczb i znaków dodawania możemy użyć rekurencji lewostronnej bądź prawostronnej %{ int x, y = 0; %} %token %% L : E '=' { printf("%d",y); } ; E : E { y += x; } { y = x; } ; rekurencja lewostronna %{ int x, y = 0; %} %token %% L : E '=' { printf("%d",y); } ; E : E { y += x; } { y = x; } ; rekurencja prawostronna Translacja sterowana składnią w generatorze YACC (7) Analizator składniowy tworzony z wykorzystaniem YACCa można oczywiście zapisać na różne sposoby. Sam fakt powtarzania się liczb i znaków dodawania możemy opisać za pomocą rekurencji lewostronnej bądź prawostronnej. Obie przedstawione w przykładzie gramatyki poprawnie opisują język wejściowy i bez problemów można je wykorzystać w metodzie LR (co nie znaczy, że definicje sterowane składnią wykorzystujące zmienne globalne będą dawać poprawne rezultaty). W obu przykładowych rozwiązaniach do akumulowania wartości sumy w trakcie obliczeń wykorzystamy zmienną globalną y typu całkowitego (int). W obu rozwiązaniach rekurencyjny opis wejścia składa się z przypadku bazowego pojedynczej liczby oraz z przypadku ogólnego (w rekurencji lewostronnej: przetworzone wyrażenie, znak + i kolejna liczba; w rekurencji prawostronnej: liczba, znak + i przetworzone wyrażenie). Akcje związane z produkcjami mają za zadanie: -w przypadku ogólnym zwiększyć zakumulowaną w zmiennej y sumę o atrybut bieżącej jednostki leksykalnej (czyli wartość liczby), -w przypadku bazowym zainicjalizować zmienną y wartością rozpoznanej pojedynczej liczby, -po rozpoznaniu ciągu liczb rozdzielonych znakami dodawania i napotkaniu na wejściu znaku równości wypisać na wyjście rezultat znajdujący się w zmiennej y. Na marginesie warto zwrócić uwagę, że jeżeli nie ma innych istotnych powodów do wymuszenia określonej sekwencji ewaluacji atrybutów efektywniej jest wykorzystać lewostronną rekurencję ze względu na mniejszą zajętość stosu oraz mniejszą wrażliwość na ograniczenia konkretnej implementacji (zazwyczaj wygenerowane analizatory składniowe mają statycznie ograniczoną wielkość stosu) 7

8 Zmienne globalne kompilujemy i uruchamiamy obie wersje: Wyjście wersji z lewostronną rekurencją: Wyjście wersji z prawostronną rekurencją: = 6 9 dlaczego wersja z prawostronną rekurencją mimo poprawnej gramatyki daje zły rezultat? Translacja sterowana składnią w generatorze YACC (8) Obydwie wersje analizatora składniowego kompilujemy i testujemy za pomocą przykładowego wejścia "1+2+3=". Jak nietrudno sprawdzić poprawną odpowiedzią jest 6. Taką odpowiedź rzeczywiście podaje analizator wykorzystujący lewostronną rekurencję. Analizator zaimplementowany z wykorzystaniem prawostronnej rekurencji daje jednak odpowiedź 9. Jak już było zasugerowane wcześniej błąd nie leży w gramatyce. Problem polega na ścisłym uwzględnieniu kolejności wykonywania akcji przez analizator LR w sposobie ewaluacji atrybutów przechowywanych w zmiennych globalnych. Prześledźmy teraz w jaki sposób obydwie wersje analizowały wejście. Zacznijmy od wersji z rekurencję lewostronną. 8

9 Zmienne globalne przesunięcie symbolu (1) Zmienne przesunięcie (1) Zmienne y=0, x=1 y=0, x=? = = Translacja sterowana składnią w generatorze YACC (9) Analizator składniowy rozpoczyna przetwarzanie tekstu wejściowego w konfiguracji początkowej z pustym stosem symboli. Zmienna y początkowo zgodnie z inicjalizacją -ma wartość 0. Początkowa wartość zmiennej x jest w przedstawionym analizatorze nieistotna (w ANSI C będzie to 0, ponieważ jest to zmienna statyczna). Analizator rozpoczyna działanie od przesunięcia z wejścia pierwszej liczby (1) na stos, zmienna x (zgodnie z instrukcją przypisania w skanerze) przyjmuje wartość 1. 9

10 Zmienne globalne redukcja zgodnie z produkcją E Zmienne y=0, x=1 redukcja E : {y=x;} E Zmienne y=1, x= = = Translacja sterowana składnią w generatorze YACC (10) Symbol jest redukowany do nieterminala E zgodnie z produkcją E >. Jednocześnie (zgodnie z zasadami działania LR-parsera) wykonywana jest akcja skojarzona z tą produkcją, czyli przypisanie zmiennej y bieżącej wartości zmiennej x (y=x). 10

11 Zmienne globalne przesunięcie symbolu + Zmienne E Zmienne y=1, x=1 przesunięcie E y=1, x=1 Wejście : = Wejście : = Translacja sterowana składnią w generatorze YACC (11) Z wejścia przesuwany na stos jest teraz znak dodawania (). Bieżące wartości zmiennych nie ulegają zmianie, ponieważ w skanerze z akcją rozpoznania znaku dodawania nie jest skojarzona żadna instrukcja obliczania atrybutu. 11

12 Zmienne globalne przesunięcie symbolu (2) Zmienne Zmienne y=1, x=2 E y=1, x=1 przesunięcie (2) E Wejście : = Wejście : + 3 = Translacja sterowana składnią w generatorze YACC (12) Na stos przesuwana jest kolejna liczba (2) z wejścia. Zmienna x (zgodnie z instrukcją przypisania w skanerze) przyjmuje wartość 2. Przy okazji warto zauważyć, że osiągnęliśmy maksymalną zajętość stosu dla tej gramatyki (z lewostronną rekurencją) i niezależnie od rozmiaru wejścia (liczby liczb na wejściu) są to 3 komórki 12

13 Zmienne globalne redukcja zgodnie z produkcją E E + E Wejście : + 3 = Zmienne y=1, x=2 redukcja E : E Zmienne {y+=x;} E y=3, x=2 Wejście : + 3 = Translacja sterowana składnią w generatorze YACC (13) Następuje teraz redukcja zgodnie z produkcją E > E + Jednocześnie wykonywana jest akcja skojarzona z tą produkcją polegająca na powiększeniu wartości zmiennej y o bieżącą wartość zmiennej x (y+=x). Zmienna y ma teraz wartość 3. 13

14 Zmienne globalne przesunięcie symbolu + Zmienne E Zmienne y=3, x=2 przesunięcie E y=3, x=2 Wejście : + 3 = Wejście : 3 = Translacja sterowana składnią w generatorze YACC (14) Z wejścia przesuwany na stos jest kolejny znak dodawania (), a bieżące wartości zmiennych nie ulegają zmianie. 14

15 Zmienne globalne przesunięcie symbolu (3) Zmienne Zmienne y=3, x=3 E y=3, x=2 przesunięcie (3) E Wejście : 3 = Wejście : = Translacja sterowana składnią w generatorze YACC (15) Na stos przesuwana jest ostatnia liczba (3) z wejścia. Zmiennej x skaner nadaje wartość 3. 15

16 Zmienne globalne redukcja zgodnie z produkcją E E + Zmienne E y=3, x=3 redukcja E : E {y+=x;} E Zmienne y=6, x=3 Wejście : = Wejście : = Translacja sterowana składnią w generatorze YACC (16) Następuje redukcja zgodnie z produkcją E > E + i wykonywana jest akcja y+=x. Zmienna y ma teraz wartość 6. 16

17 Zmienne globalne przesunięcie symbolu = Zmienne E Zmienne y=6, x=3 przesunięcie '=' '=' E y=6, x=2 Wejście : Wejście : 3 = Translacja sterowana składnią w generatorze YACC (17) Na stos przesuwany jest znak równości. Wartości zmiennych x i y nie ulegają zmianie. 17

18 Zmienne globalne redukcja zgodnie z L E = '=' E Zmienne y=6, x=2 redukcja L : E '=' {printf("%d",y);} OK L Wejście : Wejście : 6 Zmienne y=6, x=3 Translacja sterowana składnią w generatorze YACC (18) Następuje redukcja zgodnie z produkcją L > E =. Wykonywana jest akcja wypisania wartości zmiennej y za pomocą funkcji printf. Na wyjście zostaje wypisana poprawna wartość -6. Analizator składniowy pomyślnie zakończył akceptację zdania, na stosie jest tylko aksjomat gramatyki a na wejściu koniec pliku. Dlaczego w takim razie analizator oparty o prawostronną rekurencję wykonał obliczenia błędnie? 18

19 Zmienne globalne przesunięcie symbolu (1) Zmienne przesunięcie (1) Zmienne y=0, x=1 y=0, x=? Wejście : = Wejście : = Translacja sterowana składnią w generatorze YACC (19) Analizator składniowy rozpoczyna przetwarzanie tekstu wejściowego w konfiguracji początkowej z pustym stosem symboli. Analogicznie, jak w przypadku analizatora wykorzystującego lewostronną rekurencję wartość zmiennej x jest nieistotna. Analizator rozpoczyna działanie od przesunięcia z wejścia pierwszej liczby (1) na stos, zmienna x (zgodnie z instrukcją przypisania w skanerze) przyjmuje wartość 1. 19

20 Zmienne globalne przesunięcie symbolu + Zmienne Zmienne y=0, x=1 przesunięcie y=0, x= = = Translacja sterowana składnią w generatorze YACC (20) Z wejścia przesuwany na stos jest teraz znak dodawania. Bieżące wartości zmiennych nie ulegają zmianie, ponieważ w skanerze z akcją rozpoznania znaku dodawania nie jest skojarzona żadna instrukcja obliczania atrybutu. 20

21 Zmienne globalne przesunięcie symbolu (2) Zmienne Zmienne y=0, x=2 y=0, x=1 przesunięcie (2) = + 3 = Translacja sterowana składnią w generatorze YACC (21) Na stos przesuwana jest druga liczba (2) z wejścia. Zmienna x (zgodnie z instrukcją przypisania w skanerze) przyjmuje wartość 2. 21

22 Zmienne globalne przesunięcie symbolu + Zmienne Zmienne y=0, x=2 y=0, x=2 przesunięcie + 3 = 3 = Translacja sterowana składnią w generatorze YACC (22) Z wejścia przesuwany na stos jest kolejny znak dodawania (), a bieżące wartości zmiennych nie ulegają zmianie. 22

23 Zmienne globalne przesunięcie symbolu (3) Zmienne Zmienne y=0, x=3 y=0, x=2 przesunięcie (3) 3 = = Translacja sterowana składnią w generatorze YACC (23) Na stos przesuwana jest kolejna liczba (3) z wejścia. Zmienna x przyjmuje wartość 3. Ta wersja analizatora składniowego (z prawostronną rekurencją) osiągnęła teraz maksymalną zajętość stosu dla przykładowego wejścia 5 komórek. Warto zauważyć, że zajętość stosu przy prawostronnej rekurencji jest większa i liniowo zależna od liczby liczb na wejściu (w analizatorze opartym o lewostronną rekurencję maksymalna zajętość stosu była stała i nie zależała od rozmiaru wejścia). Na przykład dla 100 liczb na wejściu zajętość stosu wzrosłaby do 199 symboli (100 liczb + 99 znaków). Jeżeli koniecznie chcemy użyć prawostronnej rekurencji i zredukować zajętość stosu można modyfikować gramatykę, na przykład w następujący sposób: Zastąpić w produkcji E n + E dwie jednostki leksykalne pomocniczym nieterminalem o nazwie np. Nplus co pozwoli LR-parserowi wykonać redukcję po każdym przesunięciu znaku dodawania i zaoszczędzić prawie połowę stosu. Zmodyfikowany fragment gramatyki będzie miał wówczas następującą postać: Nplus > n + ; E : Nplus E n ; 23

24 Zmienne globalne redukcja zgodnie z produkcją E Zmienne Zmienne y=0, x=3 E y=3, x=3 redukcja E : {y=x;} = = Translacja sterowana składnią w generatorze YACC (24) Symbol jest redukowany do nieterminala E zgodnie z produkcją E >. Jednocześnie (zgodnie z zasadami działania LR-parsera) wykonywana jest akcja skojarzona z tą produkcją, czyli przypisanie zmiennej y bieżącej wartości zmiennej x (y=x). Widać już pierwsze znamiona problemu - wartość zmiennej globalnej x zawiera atrybut ostatniego rozpoznanego symbolu. Poprzednie wartości zostały zamazane i bez ponownego przetworzenia wejścia nie ma już możliwości ich odtworzenia. 24

25 Zmienne globalne redukcja zgodnie z produkcją E + E Zmienne E y=3, x=3 Zmienne redukcja E : E {y+=x;} E y=6, x=3 = = Translacja sterowana składnią w generatorze YACC (25) Następuje teraz redukcja zgodnie z produkcją E > + E. Jednocześnie wykonywana jest akcja skojarzona z tą produkcją polegająca na powiększeniu wartości zmiennej y o bieżącą wartość zmiennej x (y+=x). Zmienna y ma teraz (błędną) wartość 6. 25

26 Zmienne globalne redukcja zgodnie z produkcją E + E Zmienne E y=6, x=3 redukcja E : E {y+=x;} E Zmienne y=9, x=3 = = Translacja sterowana składnią w generatorze YACC (26) Następuje kolejna redukcja zgodnie z produkcją E > + E. Jednocześnie wykonywana jest akcja skojarzona z tą produkcją polegająca na powiększeniu wartości zmiennej y o bieżącą wartość zmiennej x (y+=x). Zmienna y przyjmuje teraz (błędną) wartość 9. 26

27 Zmienne globalne przesunięcie symbolu = Zmienne E Zmienne y=9, x=3 przesunięcie '=' '=' E y=9, x=3 = Translacja sterowana składnią w generatorze YACC (27) Na stos przesuwany jest znak równości. Wartości globalnych zmiennych x i y nie ulegają zmianie. 27

28 Zmienne globalne redukcja zgodnie z L E = '=' E Zmienne y=9, x=3 redukcja L : E '=' {printf("%d",y);} L Zmienne y=9, x=3? 9 Translacja sterowana składnią w generatorze YACC (28) Następuje redukcja zgodnie z produkcją L > E =. Wykonywana jest akcja wypisania wartości zmiennej y za pomocą funkcji printf. Na wyjście zostaje wypisana błędna wartość -9. Analizator składniowy pomyślnie zakończył akceptację zdania, na stosie jest tylko aksjomat gramatyki a na wejściu koniec pliku. Natomiast akcje zostały wykonane w innej kolejności niż przewidział to programista i obliczony wynik jest błędny. 28

29 Atrybuty ogólne reguły atrybuty w specyfikacjach YACCa z każdym symbolem w produkcji związany jest atrybut: A : X1 X2 X3 Xn : n indeks w wyrażeniu n nie może być zmienną Translacja sterowana składnią w generatorze YACC (29) Problemów związanych z użyciem zmiennych globalnych można uniknąć stosując wbudowany w YACCa system atrybutów. W YACCu z każdym symbolem w produkcji (zarówno terminalnym, jak i nieterminalnym) jest związany atrybut. Atrybut nieterminala po lewej stronie produkcji oznaczany jest przez. Atrybuty symboli po prawej stronie produkcji erowane są kolejnymi liczbami naturalnymi (1, 2,..., n). Przy odwoływaniu się do symboli po prawej stronie produkcji nie można jednak posłużyć się zmienną, er w wyrażeniu er musi być stałą. 29

30 Atrybuty - analizator leksykalny wartość atrybutu jednostki leksykalnej jest nadawana w analizatorze leksykalnym za pomocą zmiennej yylval zmienna yylval domyślnie jest typu całkowitego (w języku C - int) %% [0-9]+ { yylval = atoi(yytext); return ; } "+" { return ; } "=" { return '='; }. { ; } Translacja sterowana składnią w generatorze YACC (30) Atrybuty jednostek leksykalnych są obliczane przez analizator leksykalny. Do przekazania obliczonej wartości do analizatora leksykalnego służy predefiniowana zmienna yylval. Domyślnie jest ona typu całkowitego (int), ale może zostać inaczej zdefiniowana w analizatorze składniowym. 30

31 Atrybuty - analizator składniowy akcje zapisujemy z wykorzystaniem atrybutów %token %% L : E '=' {printf("%d",1);} ; E : E { =1+3; } { =1; } ; rekurencja lewostronna %token %% L : E '=' {printf("%d",1);} ; E : E { =1+3; } { =1; } ; rekurencja prawostronna Translacja sterowana składnią w generatorze YACC (31) Wartości atrybutów symboli nieterminalnych są natomiast obliczane w trakcie redukcji przy pomocy akcji semantycznych wpisywanych na końcu prawej strony produkcji. W przypadku braku akcji wykonywana jest akcja domyślna - kopiowanie =1. Taka postać akcji wynika z samej zasady wykorzystywania stosu w parserze w trakcie redukcji zastępujemy prawą stronę produkcji symbolem z lewej strony, a zatem przy braku innych instrukcji atrybut nieterminala po lewej stronie () wypada w tej samej komórce stosu co atrybut najbardziej lewego symbolu znajdującego się po prawej stronie produkcji (1). Akcje są modyfikowane przez YACCa w trakcie generowania parsera, wszystkie odwołania do atrybutów przeliczane są na odpowiednie odwołania do stosu atrybutów. Szczegóły implementacyjne są w zasadzie (poza zaawansowanym debugowaniem parsera) nieistotne dla użytkownika i należy unikać polegania na nich skorzystanie z nich wiąże nas z konkretną implementacją YACCa (a czasami nawet konkretną wersją). Z punktu widzenia użytkownika ważne jest jednak, że stos jest implementowany zwykle jako tablica (np. MKS LEX & YACC, Bison) o statycznym rozmiarze (MKS 150, Bison 200) a w razie konieczności modyfikując szkielet parsera można te wartości zmienić. Domyślne wartości zazwyczaj wystarczają do przetworzenia typowych gramatyk (należy zwrócić uwagę na długość form zdaniowych, a w szczególności na prawostronną rekurencję). Niektóre analizatory (np. BYACC) pewnym kosztem wydajności są w stanie dynamicznie zwiększyć rozmiar stosu w trakcie działania programu. 31

32 Atrybuty drzewo składniowe drzewo składniowe i ewaluacja atrybutów w rekurencji lewostronnej E E E E = E = 1 Translacja sterowana składnią w generatorze YACC (32) Zasady ewaluacji atrybutów w obu wersjach specyfikacji widać wyraźnie w drzewach składniowych. W przypadku rekurencji lewostronnej mamy do czynienia z dwoma przypadkami: -wywiedzeniem symbolu z nieterminala E, wówczas podczas redukcji atrybut symbolu (1 w zapisie YACCa) powinien zostać skopiowany do atrybutu rodzica ( w notacji YACCa) -wywiedzeniem ciągu E z symbolu E, w tym przypadku w atrybucie symbolu E (1) znajduje się obliczony już atrybut (suma liczb) całego poddrzewa, w atrybucie symbolu (2) nie ma żadnej użytecznej informacji, a w atrybucie symbolu (3) znajduje się wartość kolejnej liczby, należy więc nadać rodzicowi () wartość sumy atrybutów symbolu E (1) i symbolu (3) 32

33 Atrybuty drzewo składniowe drzewo składniowe i ewaluacja atrybutów w rekurencji prawostronnej E 1 2 E 3 E E = E = 1 Translacja sterowana składnią w generatorze YACC (33) W przypadku rekurencji prawostronnej mamy również do czynienia z dwoma przypadkami: -wywiedzeniem symbolu z nieterminala E, wówczas podczas redukcji atrybut symbolu (1) powinien zostać skopiowany do atrybutu rodzica () -wywiedzeniem ciągu E z symbolu E, drzewo wygląda teraz nieco inaczej, jednak zasada obliczeń pozostaje bez zmian, atrybut symbolu E (3) zawiera obliczony już do tej pory atrybut (sumę liczb) w całym poddrzewie, w atrybucie symbolu (2) nie ma żadnej użytecznej informacji, a w atrybucie symbolu (1) znajduje się wartość kolejnej liczby, nadajemy więc rodzicowi () wartość sumy atrybutów symbolu E (3) i symbolu (1) 33

34 Korzystanie z atrybutów syntetyzowanych przesunięcie symbolu (1) Atrybut przesunięcie (1) Atrybut = = Translacja sterowana składnią w generatorze YACC (34) W rzeczywistej implementacji parsera potrzebne są dwa równolegle działające stosy stos stanów i stos atrybutów. symboli nie jest konieczny do działania analizatora składniowego wykorzystywany jest tylko do zobrazowania przetwarzania tekstu wejściowego lub uruchamiania analizatora za pomocą debuggera. Analizator składniowy rozpoczyna przetwarzanie tekstu wejściowego w konfiguracji początkowej z pustym stosem symboli. Akcja przesunięcia powoduje umieszczenie na stosie symboli symbolu, na stosie wartości - wartości przekazanej za pomocą zmiennej yylval z analizatora leksykalnego - w tym przypadku jest to 1. 34

35 Korzystanie z atrybutów syntetyzowanych przesunięcie symbolu + Atrybut Atrybut 1 przesunięcie? = = Translacja sterowana składnią w generatorze YACC (35) Akcja przesunięcia umieszcza na stosie symboli terminal +. W przypadku znaku dodawania nie są nam potrzebne żadne atrybuty jednostki leksykalnej, ale bieżąca wartość yylval jest i tak w trakcie każdej akcji przesunięcia - zawsze odkładana na stos (jeżeli nie nadaliśmy jej konkretnej wartości atrybut będzie zależał od przebiegu programu). 35

36 Korzystanie z atrybutów syntetyzowanych przesunięcie symbolu (2) Atrybut Atrybut 2? 1 przesunięcie (2)? = + 3 = Translacja sterowana składnią w generatorze YACC (36) Na stos symboli odkładany jest symbol, na stos wartości liczba 2. 36

37 Korzystanie z atrybutów syntetyzowanych przesunięcie symbolu + Atrybut Atrybut 2? 1 przesunięcie? 2? = 3 = Translacja sterowana składnią w generatorze YACC (37) Na stos symboli odkładany jest symbol +. 37

38 Korzystanie z atrybutów syntetyzowanych przesunięcie symbolu (3) Atrybut Atrybut 3? 2? 1 przesunięcie (3)? 2? 1 3 = = Translacja sterowana składnią w generatorze YACC (38) Na stos symboli odkładany jest symbol, na stos wartości liczba 3. 38

39 Korzystanie z atrybutów syntetyzowanych redukcja zgodnie z produkcją E Atrybut Atrybut 3 E 3?? 2 2? 1 redukcja E : { =1;}? 1 = = Translacja sterowana składnią w generatorze YACC (39) Terminal jest redukowany do nieterminala E. Jednocześnie wykonywana jest akcja =1 skojarzona z produkcją E > nadająca wartość atrybutu symbolu nieterminalnego E. 39

40 Korzystanie z atrybutów syntetyzowanych redukcja zgodnie z produkcją E + E Atrybut E 3? Atrybut 2? 1 redukcja E : E { = 1 + 3;} E 5? 1 = = Translacja sterowana składnią w generatorze YACC (40) Wykonywana jest redukcja zgodnie z produkcją E > + E. Atrybutem symbolu E stojącego po lewej stronie produkcji (wynikiem redukcji) będzie zgodnie z akcją: =1+3 suma wartości kolejnej liczby (2) i dotychczas zredukowanego wyrażenia (poddrzewa) E (3). 40

41 Korzystanie z atrybutów syntetyzowanych redukcja zgodnie z produkcją E + E Atrybut E 5? 1 redukcja E : E { = 1 + 3;} E Atrybut 6 = = Translacja sterowana składnią w generatorze YACC (41) Ponownie wykonywana jest redukcja zgodnie z produkcją E > + E. Atrybutem symbolu E stojącego po lewej stronie produkcji (wartością redukcji) będzie teraz suma wartości kolejnej liczby (1) i dotychczas zredukowanego wyrażenia E (5). 41

42 Korzystanie z atrybutów syntetyzowanych przesunięcie symbolu = Atrybut E Atrybut 6 przesunięcie '=' '=' E? 6 = Translacja sterowana składnią w generatorze YACC (42) Na stos symboli odkładany jest symbol =. 42

43 Korzystanie z atrybutów syntetyzowanych redukcja zgodnie z produkcją L E '=' akcja domyślna: = 1 Atrybut '='? E 6 redukcja L : E '=' {printf("%d",1);} OK 6 Atrybut L 6 Translacja sterowana składnią w generatorze YACC (43) Wykonana zostaje kolejna redukcja tym razem zgodnie z produkcją L > E = i skojarzona z nią akcja wypisania atrybutu dziedziczonego symbolu E, w którym znajduje się obliczona wartość sumy. Dzięki przechowywaniu wartości atrybutów na stosie udało się uniknąć efektów ubocznych wynikających ze stosowania zmiennych globalnych i obliczona wartość jest poprawna. W wyniku redukcji na stosie symboli znajdzie się aksjomat gramatyki, wejście jest puste, a zatem analizator pomyślnie kończy przetwarzanie tekstu wejściowego. Oczywiście zgodnie z domyślnymi zasadami ewaluacji atrybutów (=1) nieterminal L otrzyma również atrybut o wartości 6, ale z wartości tej nie będziemy już korzystać. 43

44 Typy atrybutów domyślny typ atrybutów można zmodyfikować za pomocą słowa kluczowego %union umieszczanego w specyfikacji parsera wewnątrz deklaracji %union należy określić wszystkie potrzebne typy atrybutów wywołując YACCa należy użyć opcji d w celu wygenerowania definicji interfejsu (y.tab.h) %union { char *text; int int_val; } yacc d typedef union { char *text; int int_val; } YYSTYPE; y.tab.h Translacja sterowana składnią w generatorze YACC (44) Jak już wspomniano wcześniej domyślnie wszystkie symbole mają atrybuty typu całkowitego (int). Często jednak zachodzi potrzeba zmiany domyślnego typu atrybutów. Do tego celu służy słowo kluczowe %union umieszczane w specyfikacji YACCa. Po nim należy wyspecyfikować wszystkie typy jakie będą potrzebne dla wszystkich symboli w całej gramatyce. Na podstawie tej deklaracji YACC generuje definicję unii, która umieszczana jest w pliku y.tab.h (w niektórych implementacjach plik ten ze względu na ograniczenia systemu plików może nosić inną, podobną nazwę). Każdy symbol ma więc atrybut będący na poziomie implementacji unią. Symbol może więc mieć atrybut tylko jednego z zadeklarowanych wcześniej typów. Jednakowy rozmiar wszystkich atrybutów istotnie upraszcza zarządzanie stosem symboli w analizatorze składniowym (w przeciwnym wypadku musiałaby to być lista), ale co zrobić jeśli dla danego symbolu potrzebnych jest więcej atrybutów? Najprostszym (ale nieefektywnym rozwiązaniem) jest umieszczenie w unii struktury lub tablicy. Automatycznie powoduje jednak to, że atrybuty wszystkich symboli, niezależnie od tego czy jest to potrzebne, czy nie, będą miały ten sam rozmiar niepotrzebnie zajmując stos atrybutów. Lepiej jest więc definiując unię nie umieszczać bezpośrednio w niej dużych struktur danych, ale użyć raczej wskaźnika do odpowiednich obiektów alokowanych np. ze sterty. Wygenerowany przez YACCa plik interfejsu y.tab.h, należy koniecznie włączyć do specyfikacji analizatora leksykalnego. Dzięki temu definicja unii będzie dostępna w akcjach skanera. 44

45 Typy atrybutów deklaracje w parserze w celu zadeklarowania typów symboli należy najpierw zdefiniować typ atrybutów za pomocą %union, np.: %union { char *text; int ival; } a następnie na podstawie tej definicji przypisać typy symbolom: dla symboli terminalnych: %token <text> str ident dla symboli nieterminalnych: %type <ival> R A Translacja sterowana składnią w generatorze YACC (45) Po zdefiniowaniu typów atrybutów za pomocą %union konieczne jest wskazanie typów wszystkich symboli gramatyki, na których będziemy operować w akcjach semantycznych. W celu przypisania typów symbolom nieterminalnym należy użyć słowa kluczowego %type. Za %type należy wskazać - w nawiasach trójkątnych pole unii odpowiedniego typu, a następnie wymienić nieterminal lub nieterminale, których atrybuty mają być tego typu. W przypadku symboli terminalnych przypisywanie typów odbywa się podobnie. Zamiast słowa kluczowego %type używamy %token (tak jak do deklarowania jednostek leksykalnych). Niektóre (starsze) wersje YACCów dopuszczały również korzystanie z atrybutów bez deklaracji typów za pomocą bezpośrednich odwołań do pól unii (w C za pomocą. lub -> ). Jest to jednak metoda nieprzenośna i merytorycznie niewskazana. 45

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

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

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

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

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

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

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

Bardziej szczegółowo

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

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

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 2. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno Instrukcja laboratoryjna 2 Podstawy programowania 2 Temat: Zmienne dynamiczne tablica wskaźników i stos dynamiczny Przygotował: mgr inż. Tomasz Michno 1 Wstęp teoretyczny 1.1 Tablice wskaźników Tablice

Bardziej szczegółowo

Rekurencja (rekursja)

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

Bardziej szczegółowo

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

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

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec PROE wykład 3 klasa string, przeciążanie funkcji, operatory dr inż. Jacek Naruniec Przypomnienie z ostatnich wykładów Konstruktory/destruktory i kolejność ich wywołania w złożonej klasie. Referencja Obiekty

Bardziej szczegółowo

2 Przygotował: mgr inż. Maciej Lasota

2 Przygotował: mgr inż. Maciej Lasota Laboratorium nr 2 1/7 Język C Instrukcja laboratoryjna Temat: Wprowadzenie do języka C 2 Przygotował: mgr inż. Maciej Lasota 1) Wprowadzenie do języka C. Język C jest językiem programowania ogólnego zastosowania

Bardziej szczegółowo

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki Konwersje napis liczba Struktury, unie Scanf / printf Wskaźniki Konwersje liczba napis Ćwiczenia 1. Napisz aplikację, która na wejściu dostaje napis postaci W Roku Pańskim 1345, władca Henryk 12,

Bardziej szczegółowo

Język C zajęcia nr 11. Funkcje

Język C zajęcia nr 11. Funkcje Język C zajęcia nr 11 Funkcje W języku C idea podprogramów realizowana jest wyłącznie poprzez definiowanie i wywołanie funkcji. Każda funkcja musi być przed wywołaniem zadeklarowana. Deklaracja funkcji

Bardziej szczegółowo

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane Stałe Oprócz zmiennych w programie mamy też stałe, które jak sama nazwa mówi, zachowują swoją wartość przez cały czas działania programu. Można

Bardziej szczegółowo

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki Typy wyliczeniowe Konwersje napis liczba Struktury, unie Scanf / printf Wskaźniki Typy wyliczeniowe Służą do łatwiejszej kontroli nad stałymi Ustawianie parametrów o ściśle określonym zbiorze wartości

Bardziej szczegółowo

Język C, tablice i funkcje (laboratorium, EE1-DI)

Język C, tablice i funkcje (laboratorium, EE1-DI) Język C, tablice i funkcje (laboratorium, EE1-DI) Opracował: Tomasz Mączka (tmaczka@kia.prz.edu.pl) Wstęp (tablice) Tablica to uporządkowany ciąg elementów tego samego typu, zajmujących ciągły obszar pamięci.

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

1. Wprowadzanie danych z klawiatury funkcja scanf

1. Wprowadzanie danych z klawiatury funkcja scanf 1. Wprowadzanie danych z klawiatury funkcja scanf Deklaracja int scanf ( const char *format, wskaźnik, wskaźnik,... ) ; Biblioteka Działanie stdio.h Funkcja scanf wczytuje kolejne pola (ciągi znaków),

Bardziej szczegółowo

Ćwiczenia nr 11. Translatory. Wprowadzenie teoretyczne

Ćwiczenia nr 11. Translatory. Wprowadzenie teoretyczne J.Nawrocki, M. Antczak, A. Hoffa, S. Wąsik Plik źródłowy: 08cw11-tr.doc; Data: 2009-01-15 09:47:00 Ćwiczenia nr 11 Translatory Wprowadzenie teoretyczne Wiele dokumentów wprowadzających do języków Lex oraz

Bardziej szczegółowo

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

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

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

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

Bardziej szczegółowo

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu. Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą

Bardziej szczegółowo

asix4 Podręcznik użytkownika Drajwer OPC Podręcznik użytkownika

asix4 Podręcznik użytkownika Drajwer OPC Podręcznik użytkownika Podręcznik użytkownika Drajwer OPC Podręcznik użytkownika Dok. Nr PLP4048 Wersja: 13-12-2005 Podręcznik użytkownika asix4 ASKOM i asix to zastrzeżone znaki firmy ASKOM Sp. z o. o., Gliwice. Inne występujące

Bardziej szczegółowo

Języki i metodyka programowania. Wprowadzenie do języka C

Języki i metodyka programowania. Wprowadzenie do języka C Literatura: Brian W. Kernighan, Dennis M. Ritchie Język Ansi C, Wydawnictwa Naukowo - Techniczne, 2007 http://cm.bell-labs.com/cm/cs/cbook/index.html Scott E. Gimpel, Clovis L. Tondo Język Ansi C. Ćwiczenia

Bardziej szczegółowo

Języki formalne i gramatyki

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

Bardziej szczegółowo

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST)

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST) Drzewa ST i VL Drzewa poszukiwań binarnych (ST) Drzewo ST to dynamiczna struktura danych (w formie drzewa binarnego), która ma tą właściwość, że dla każdego elementu wszystkie elementy w jego prawym poddrzewie

Bardziej szczegółowo

Język ludzki kod maszynowy

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

Bardziej szczegółowo

Wstęp do Programowania, laboratorium 02

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

Bardziej szczegółowo

Pakiety i interfejsy. Tomasz Borzyszkowski

Pakiety i interfejsy. Tomasz Borzyszkowski Pakiety i interfejsy Tomasz Borzyszkowski Pakiety podstawy W dotychczasowych przykładach nazwy klas musiały pochodzić z jednej przestrzeni nazw, tj. być niepowtarzalne tak, by nie doprowadzić do kolizji

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

Wstęp do wskaźników w języku ANSI C

Wstęp do wskaźników w języku ANSI C Wstęp do wskaźników w języku ANSI C / Materiał dydaktyczny pomocniczy do przedmiotu Informatyka sem.iii kier. Elektrotechnika/ 1. Wprowadzenie W języku ANSI C dla każdego typu X (wbudowanego, pochodnego,

Bardziej szczegółowo

Programowanie strukturalne i obiektowe. Funkcje

Programowanie strukturalne i obiektowe. Funkcje Funkcje Często w programach spotykamy się z sytuacją, kiedy chcemy wykonać określoną czynność kilka razy np. dodać dwie liczby w trzech miejscach w programie. Oczywiście moglibyśmy to zrobić pisząc trzy

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski 7 kwietnia 2014 1. Wprowadzenie Pierwsza część instrukcji zawiera informacje

Bardziej szczegółowo

Języki formalne i automaty Ćwiczenia 1

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

Bardziej szczegółowo

Podstawy Kompilatorów

Podstawy Kompilatorów Podstawy Kompilatorów Laboratorium 9 Uwaga: Do wykonania poniższych zadań związanych z implementacją niezbędny jest program LEX, program YACC oraz kompilator języka C. Dla środowiska Linux mogą to być:

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziewiąta Tablice a zmienne wskaźnikowe Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie

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

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

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

Bardziej szczegółowo

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Jak napisać program obliczający pola powierzchni różnych figur płaskich? Część IX C++ Jak napisać program obliczający pola powierzchni różnych figur płaskich? Na początku, przed stworzeniem właściwego kodu programu zaprojektujemy naszą aplikację i stworzymy schemat blokowy

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Arytmetyka liczb binarnych

Arytmetyka liczb binarnych Wartość dwójkowej liczby stałoprzecinkowej Wartość dziesiętna stałoprzecinkowej liczby binarnej Arytmetyka liczb binarnych b n-1...b 1 b 0,b -1 b -2...b -m = b n-1 2 n-1 +... + b 1 2 1 + b 0 2 0 + b -1

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 4 PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej

Bardziej szczegółowo

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class). Wprowadzenie w dziedziczenie Klasa D dziedziczy klasę B: B klasa bazowa D klasa pochodna Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class). Najpierw jest tworzona klasa bazowa,

Bardziej szczegółowo

Stałe i zmienne znakowe. Stała znakowa: znak

Stałe i zmienne znakowe. Stała znakowa: znak Stałe i zmienne znakowe. Stała znakowa: znak Na przykład: a, 1, 0 c Każdy znak jest reprezentowany w pamięci przez swój kod. Kody alfanumerycznych znaków ASCII to liczby z przedziału [32, 127]. Liczby

Bardziej szczegółowo

Zapisywanie algorytmów w języku programowania

Zapisywanie algorytmów w języku programowania Temat C5 Zapisywanie algorytmów w języku programowania Cele edukacyjne Zrozumienie, na czym polega programowanie. Poznanie sposobu zapisu algorytmu w postaci programu komputerowego. Zrozumienie, na czym

Bardziej szczegółowo

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

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

Bardziej szczegółowo

TABLICA (ang. array) pojedyncza zmienna z wieloma komórkami, w których można zapamiętać wiele wartości tego samego typu danych.

TABLICA (ang. array) pojedyncza zmienna z wieloma komórkami, w których można zapamiętać wiele wartości tego samego typu danych. Złożone typy danych - TABLICE TABLICA (ang. array) pojedyncza zmienna z wieloma komórkami, w których można zapamiętać wiele wartości tego samego typu danych. * Może przechowywać dowolny typ danych, typ

Bardziej szczegółowo

Wykład 4: Klasy i Metody

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

Bardziej szczegółowo

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

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część ósma Zmienne wskaźnikowe koncepcja, podstawowe zastosowania Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski

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

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

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

2. Łańcuchy tekstowe w PHP

2. Łańcuchy tekstowe w PHP 2. Łańcuchy tekstowe w PHP 2.1 Apostrofy i cudzysłowy Łańcuch tekstowy w języku PHP to ciąg znaków ograniczony apostrofami (') lub cudzysłowami ("). Te znaki ograniczające nie powinny być traktowane wymiennie,

Bardziej szczegółowo

Podstawy programowania

Podstawy programowania Podstawy programowania I rok Automatyka i Robotyka Eka PWr Ćwiczenia Zestaw 4 Zakres materiału Analiza poprawności konstrukcji, wyliczanie wyrażeń z wskaźnikami i tablicami, ręczna symulacja, opracowywanie

Bardziej szczegółowo

Ogranicz listę klasyfikacji budżetowych do powiązanych z danym kontem księgowym

Ogranicz listę klasyfikacji budżetowych do powiązanych z danym kontem księgowym Zależności i kontrola danych budżetowych w systemie Sz@rk FK 1. Wstęp Począwszy od wersji Sz@rk FK 2011 (11.03.30) wprowadzono do programu finansowoksięgowego nowe możliwości dotyczące kontrolowania poprawności

Bardziej szczegółowo

1. Wprowadzenie do języka PHP

1. Wprowadzenie do języka PHP 1. Wprowadzenie do języka PHP Język PHP jest generalnie w swojej składni podobny do języka C, chociaż występuje tu szereg różnic. 1.1. Zmienne W PHP nazwy zmiennych poprzedzamy znakiem dolara ($). Nie

Bardziej szczegółowo

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści Język programowania DELPHI / Andrzej Marciniak. Poznań, 2012 Spis treści Przedmowa 11 Przyjęta notacja 13 Rozdział 1. Wprowadzenie 15 1.1. Ogólne zasady programowania zorientowanego obiektowo 15 1.2. Historia

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Zmienne i struktury dynamiczne

Zmienne i struktury dynamiczne Zmienne i struktury dynamiczne Zmienne dynamiczne są to zmienne, które tworzymy w trakcie działania programu za pomocą operatora new. Usuwa się je operatorem delete. Czas ich występowania w programie jest

Bardziej szczegółowo

Systemy operacyjne. Laboratorium 8. Perl find

Systemy operacyjne. Laboratorium 8. Perl find Systemy operacyjne Laboratorium 8 Perl find Temat obejmuje przeszukiwanie drzew katalogowych z użyciem perla oraz podstawowe zdolności w używaniu referencji, tablic asocjacyjnych i mechanizmów typu stat.

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

Wykład nr 3. Temat: Wskaźniki i referencje. Edward Morgan Forster

Wykład nr 3. Temat: Wskaźniki i referencje. Edward Morgan Forster Wykład nr 3 Temat: Wskaźniki i referencje. Cytaty: Mylić się jest rzeczą ludzką, ale żeby coś naprawdę spaprać potrzeba komputera. Edward Morgan Forster Gdyby murarze budowali domy tak, jak programiści

Bardziej szczegółowo

Typy danych, zmienne i tablice. Tomasz Borzyszkowski

Typy danych, zmienne i tablice. Tomasz Borzyszkowski Typy danych, zmienne i tablice Tomasz Borzyszkowski Silne typy Javy Java jest językiem wyposażonym w silny system typów. Wywodzi się stąd siła i bezpieczeństwo tego języka. Co to znaczy silny system typów?

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 2

Podstawy Programowania 2 Podstawy Programowania 2 Laboratorium 7 Instrukcja 6 Object Pascal Opracował: mgr inż. Leszek Ciopiński Wstęp: Programowanie obiektowe a programowanie strukturalne. W programowaniu strukturalnym, któremu

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for. Zadania do wykonania Rozwiązując poniższe zadania użyj pętlę for. 1. apisz program, który przesuwa w prawo o dwie pozycje zawartość tablicy 10-cio elementowej liczb całkowitych tzn. element t[i] dla i=2,..,9

Bardziej szczegółowo

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje Opracował: Zbigniew Rudnicki Powtórka z poprzedniego wykładu 2 1 Dokument, regiony, klawisze: Dokument Mathcada realizuje

Bardziej szczegółowo

Paradygmaty programowania

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

Bardziej szczegółowo

Nowe funkcje w programie SYMFONIA Faktura Premium w wersji 2009

Nowe funkcje w programie SYMFONIA Faktura Premium w wersji 2009 SYMFONIA Faktura Premium Strona 1 Nowe funkcje w programie SYMFONIA Faktura Premium w wersji 2009 Dodatkowe pola tekstowe w danych kontrahenta i towaru W celu umożliwienia użytkownikom przechowywania dodatkowych

Bardziej szczegółowo

Programowanie w języku C++

Programowanie w języku C++ Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi

Bardziej szczegółowo

Algorytmika i pseudoprogramowanie

Algorytmika i pseudoprogramowanie Przedmiotowy system oceniania Zawód: Technik Informatyk Nr programu: 312[ 01] /T,SP/MENiS/ 2004.06.14 Przedmiot: Programowanie Strukturalne i Obiektowe Klasa: druga Dział Dopuszczający Dostateczny Dobry

Bardziej szczegółowo

Laboratorium 6: Ciągi znaków. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Laboratorium 6: Ciągi znaków. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski Laboratorium 6: Ciągi znaków mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski 17 listopada 2016 1. Wprowadzenie Instrukcja poświęcona jest zmiennym, które służą do przechowywania

Bardziej szczegółowo

Ćwiczenie rozpocznie się od wprowadzenia do laboratorium, po którym omówimy składnię ę polecenia INSERT pozwalającego ą na wstawianie krotek do

Ćwiczenie rozpocznie się od wprowadzenia do laboratorium, po którym omówimy składnię ę polecenia INSERT pozwalającego ą na wstawianie krotek do Na dotychczasowych zajęciach zapoznaliście się Państwo z poleceniem SELECT pozwalającym ą na wykonywanie zapytań ń do bazy danych i odczytywanie danych zawartych w relacjach. Celem tego ćwiczenia jest

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Zaawansowane programowanie w C++ (PCP) Wykład 6 - szablony. dr inż. Robert Nowak - p. 1/15 Kolekcje i algorytmy» Deklaracja szablonu y Pojęcia niezależne od typu: kolekcje (np. listy) algorytmy (np. znajdowania

Bardziej szczegółowo

Przykłady zastosowań funkcji tekstowych w arkuszu kalkulacyjnym

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program. PYTHON Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program. Aby program napisany w danym języku mógł być wykonany, niezbędne

Bardziej szczegółowo

FUNKCJE TEKSTOWE W MS EXCEL

FUNKCJE TEKSTOWE W MS EXCEL FUNKCJE TEKSTOWE W MS EXCEL ASC W językach korzystających z dwubajtowego zestawu znaków (DBCS) zmienia znaki o pełnej szerokości (dwubajtowe) na znaki o połówkowej szerokości (jednobajtowe). : ASC(tekst)

Bardziej szczegółowo

Java EE produkcja oprogramowania

Java EE produkcja oprogramowania Java EE produkcja oprogramowania PPJ PODSTAWY PROGRAMOWANIA W JAVIE PODSTAWY JĘZYKA JAVA 1 Warszawa, 2016Z 2 Ogólna charakterystyka języka Java 3 Java 1/2 Język programowania Java został opracowany przez

Bardziej szczegółowo

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE 1. Proste typy danych- ciąg dalszy 2. Typy złożone danych : TABLICE Wykład 3 ZMIENNE PROSTE: TYPY WBUDOWANE Typy zmiennoprzecinkowe: float double long double Różne rozmiary bajtowe. W konsekwencji różne

Bardziej szczegółowo

Import danych z plików Excel. (pracownicy, limity urlopowe i inne)

Import danych z plików Excel. (pracownicy, limity urlopowe i inne) Import danych z plików Excel (pracownicy, limity urlopowe i inne) 1. Wstęp BeeOffice umożliwia import z plików Excel kilku rodzajów danych, najczęściej wykorzystywanych podczas tworzenia nowego systemu

Bardziej szczegółowo

Podstawy programowania komputerów

Podstawy programowania komputerów Podstawy programowania komputerów Wykład 10: Sterowanie pamięcią w C Pamięć na stosie!każdy program napisany w języku C ma dostęp do dwóch obszarów pamięci - stosu i sterty, w których może być przechowywana

Bardziej szczegółowo

Podstawy JavaScript ćwiczenia

Podstawy JavaScript ćwiczenia Podstawy JavaScript ćwiczenia Kontekst:

Bardziej szczegółowo

Skanowanie OCR w aplikacji Kancelaria Komornika. Instrukcja dla użytkownika

Skanowanie OCR w aplikacji Kancelaria Komornika. Instrukcja dla użytkownika Skanowanie OCR w aplikacji Kancelaria Komornika Instrukcja dla użytkownika Spis treści 1. Zakładka Wyrażenia... 3 2. Zakładka Grupy wyrażeń... 5 3. Opcje Skanowania / OCR... 7 4. Rozpoznawanie Danych...

Bardziej szczegółowo

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu Programowanie strukturalne Opis ogólny programu w Turbo Pascalu STRUKTURA PROGRAMU W TURBO PASCALU Program nazwa; } nagłówek programu uses nazwy modułów; } blok deklaracji modułów const } blok deklaracji

Bardziej szczegółowo

Wymagania edukacyjne z informatyki dla klasy szóstej szkoły podstawowej.

Wymagania edukacyjne z informatyki dla klasy szóstej szkoły podstawowej. Wymagania edukacyjne z informatyki dla klasy szóstej szkoły podstawowej. Dział Zagadnienia Wymagania podstawowe Wymagania ponadpodstawowe Arkusz kalkulacyjny (Microsoft Excel i OpenOffice) Uruchomienie

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

Numeracja dla rejestrów zewnętrznych

Numeracja dla rejestrów zewnętrznych Numeracja dla rejestrów zewnętrznych System ZPKSoft Doradca udostępnia możliwość ręcznego nadawania numerów dla procedur i dokumentów zgodnie z numeracją obowiązującą w rejestrach zewnętrznych, niezwiązanych

Bardziej szczegółowo

Programowanie Niskopoziomowe

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

Bardziej szczegółowo

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

Programowanie w języku C++ Grażyna Koba

Programowanie w języku C++ Grażyna Koba Programowanie w języku C++ 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 zasad

Bardziej szczegółowo

Dodatkowe możliwości RDF. Seminarium magisterskie Paweł Chrząszczewski

Dodatkowe możliwości RDF. Seminarium magisterskie Paweł Chrząszczewski Dodatkowe możliwości RDF Seminarium magisterskie Paweł Chrząszczewski Inne możliwości RDF RDF posiada szereg dodatkowych funkcji, takich jak wbudowane typy i właściwości reprezentujące grupy zasobów i

Bardziej szczegółowo

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Ćwiczenie 1 Podstawy Wprowadzenie do programowania w języku C Kraków 2010 Twój pierwszy program w C Program w języku C, jak i w wielu innych językach

Bardziej szczegółowo