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

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

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

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

Rekurencja (rekursja)

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

Bardziej szczegółowo

Podstawy 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Bardziej szczegółowo

Podstawy 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Podstawy JavaScript ćwiczenia

Podstawy JavaScript ćwiczenia Podstawy JavaScript ćwiczenia Kontekst:

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

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

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

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

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

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

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

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

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

Wykład 2: Arkusz danych w programie STATISTICA

Wykład 2: Arkusz danych w programie STATISTICA Wykład 2: Arkusz danych w programie STATISTICA Nazwy przypadków Numer i nazwa zmiennej Elementy arkusza danych Cechy statystyczne Zmienne (kolumny) Jednostki statystyczne Przypadki (wiersze) Tworzenie

Bardziej szczegółowo

Opis protokołu komunikacji programu mpensjonat z systemami zewnętrznymi (np. rezerwacji online)

Opis protokołu komunikacji programu mpensjonat z systemami zewnętrznymi (np. rezerwacji online) Opis protokołu komunikacji programu mpensjonat z systemami zewnętrznymi (np. rezerwacji online) Spis treści Opis protokołu komunikacji programu mpensjonat z systemami zewnętrznymi (np. rezerwacji online)...1

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

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

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

WYRAŻENIA ALGEBRAICZNE

WYRAŻENIA ALGEBRAICZNE WYRAŻENIA ALGEBRAICZNE Wyrażeniem algebraicznym nazywamy wyrażenie zbudowane z liczb, liter, nawiasów oraz znaków działań, na przykład: Symbole literowe występujące w wyrażeniu algebraicznym nazywamy zmiennymi.

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

wagi cyfry 7 5 8 2 pozycje 3 2 1 0

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

Bardziej szczegółowo

KURS C/C++ WYKŁAD 6. Wskaźniki

KURS C/C++ WYKŁAD 6. Wskaźniki Wskaźniki KURS C/C++ WYKŁAD 6 Każda zmienna ma unikalny adres wskazujący początkowy obszar pamięci zajmowany przez tą zmienną. Ilość pamięci zajmowanej przez zmienną zależy od typu zmiennej. Adres można

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

Pliki. Informacje ogólne. Obsługa plików w języku C

Pliki. Informacje ogólne. Obsługa plików w języku C Pliki Informacje ogólne Plik jest pewnym zbiorem danych, zapisanym w systemie plików na nośniku danych (np. dysku twardym, pendrive, płycie DVD itp.). Może posiadać określone atrybuty, a odwołanie do niego

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

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

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

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32 Analiza i projektowanie oprogramowania Analiza i projektowanie oprogramowania 1/32 Analiza i projektowanie oprogramowania 2/32 Cel analizy Celem fazy określania wymagań jest udzielenie odpowiedzi na pytanie:

Bardziej szczegółowo

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik Wykład VII Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Kompilacja Kompilator C program do tłumaczenia kodu źródłowego na język maszynowy. Preprocesor

Bardziej szczegółowo

Definicje. Algorytm to:

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

Bardziej szczegółowo

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje. Podstawowe elementy proceduralne w C++ Program i wyjście Zmienne i arytmetyka Wskaźniki i tablice Testy i pętle Funkcje Pierwszy program // Niezbędne zaklęcia przygotowawcze ;-) #include using

Bardziej szczegółowo

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

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

Bardziej szczegółowo

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE Studia podyplomowe dla nauczycieli INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE Przedmiot JĘZYKI PROGRAMOWANIA DEFINICJE I PODSTAWOWE POJĘCIA Autor mgr Sławomir Ciernicki 1/7 Aby

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Zarządzanie pamięcią w systemie operacyjnym

Zarządzanie pamięcią w systemie operacyjnym Zarządzanie pamięcią w systemie operacyjnym Cele: przydział zasobów pamięciowych wykonywanym programom, zapewnienie bezpieczeństwa wykonywanych procesów (ochrona pamięci), efektywne wykorzystanie dostępnej

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Tablice wielowymiarowe. Przykład tablica 2-wymiarowa. Przykład. Przykład 3-wymiarowy. Tak naprawdę nie istnieją w C! Rozważmy tablicę o rozmiarze 3x2

Tablice wielowymiarowe. Przykład tablica 2-wymiarowa. Przykład. Przykład 3-wymiarowy. Tak naprawdę nie istnieją w C! Rozważmy tablicę o rozmiarze 3x2 Tablice wielowymiarowe Przykład tablica 2-wymiarowa Tak naprawdę nie istnieją w C! Tak naprawdę C i Java dopuszczają tworzenie tablic tablic tablica 2-wymiarowa = tablica (zwykłych) tablic tablica 3-wymiarowa

Bardziej szczegółowo

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java - tablice, konstruktory, dziedziczenie i hermetyzacja Java - tablice, konstruktory, dziedziczenie i hermetyzacja Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU zmienne tablicowe konstruktory klas dziedziczenie hermetyzacja

Bardziej szczegółowo

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych Ćwiczenie nr 3 Wyświetlanie i wczytywanie danych 3.1 Wstęp Współczesne komputery przetwarzają dane zakodowane za pomocą ciągów zerojedynkowych. W szczególności przetwarzane liczby kodowane są w systemie

Bardziej szczegółowo

Przed rozpoczęciem pracy otwórz nowy plik (Ctrl +N) wykorzystując szablon acadiso.dwt

Przed rozpoczęciem pracy otwórz nowy plik (Ctrl +N) wykorzystując szablon acadiso.dwt Przed rozpoczęciem pracy otwórz nowy plik (Ctrl +N) wykorzystując szablon acadiso.dwt Zadanie: Utwórz szablon rysunkowy składający się z: - warstw - tabelki rysunkowej w postaci bloku (według wzoru poniżej)

Bardziej szczegółowo

Elementy języków programowania

Elementy języków programowania Elementy języków programowania Olsztyn 2007-2012 Wojciech Sobieski Języki programowania wymyślono po to, by można było dzięki nim tworzyć różnorodne programy komputerowe. Oczekuje się również, że tworzone

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

Algorytmika i Programowanie VBA 1 - podstawy

Algorytmika i Programowanie VBA 1 - podstawy Algorytmika i Programowanie VBA 1 - podstawy Tomasz Sokół ZZI, IL, PW Czas START uruchamianie środowiska VBA w Excelu Alt-F11 lub Narzędzia / Makra / Edytor Visual Basic konfiguracja środowiska VBA przy

Bardziej szczegółowo

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład. Część XVII C++ Funkcje Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład. 2 3 Tworzymy deklarację i definicję funkcji o nazwie pobierzln() Funkcja

Bardziej szczegółowo

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float

Bardziej szczegółowo

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer Realizacja algorytmu przez komputer Wstęp do informatyki Wykład UniwersytetWrocławski 0 Tydzień temu: opis algorytmu w języku zrozumiałym dla człowieka: schemat blokowy, pseudokod. Dziś: schemat logiczny

Bardziej szczegółowo

Karty pracy. Ustawienia. W tym rozdziale została opisana konfiguracja modułu CRM Karty pracy oraz widoki i funkcje w nim dostępne.

Karty pracy. Ustawienia. W tym rozdziale została opisana konfiguracja modułu CRM Karty pracy oraz widoki i funkcje w nim dostępne. Karty pracy W tym rozdziale została opisana konfiguracja modułu CRM Karty pracy oraz widoki i funkcje w nim dostępne. Ustawienia Pierwszym krokiem w rozpoczęciu pracy z modułem Karty Pracy jest definicja

Bardziej szczegółowo

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij. Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice

Bardziej szczegółowo

Szablony funkcji i szablony klas

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

Bardziej szczegółowo

Z nowym bitem. Informatyka dla gimnazjum. Część II

Z nowym bitem. Informatyka dla gimnazjum. Część II Z nowym bitem. Informatyka dla gimnazjum. Część II Wymagania na poszczególne oceny szkolne Grażyna Koba Spis treści 1. Algorytmika i programowanie... 2 2. Obliczenia w arkuszu kalkulacyjnym... 4 3. Bazy

Bardziej szczegółowo