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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Podstawy JavaScript ćwiczenia

Podstawy JavaScript ćwiczenia Podstawy JavaScript ćwiczenia Kontekst:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych: Zmienna i typ Pascal typy danych Zmienna to obiekt, który może przybierać różne wartości. Typ zmiennej to zakres wartości, które może przybierać zmienna. Deklarujemy je w nagłówku poprzedzając słowem kluczowym

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

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

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

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

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

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

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

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

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

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

Podstawy programowania C. dr. Krystyna Łapin http://www.mif.vu.lt/~moroz/c/

Podstawy programowania C. dr. Krystyna Łapin http://www.mif.vu.lt/~moroz/c/ Podstawy programowania C dr. Krystyna Łapin http://www.mif.vu.lt/~moroz/c/ Tematy Struktura programu w C Typy danych Operacje Instrukcja grupująca Instrukcja przypisania Instrukcja warunkowa Struktura

Bardziej szczegółowo

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych 1 Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych 1. Podstawowe operacje logiczne dla cyfr binarnych Jeśli cyfry 0 i 1 potraktujemy tak, jak wartości logiczne fałsz i prawda, to działanie

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

Ć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

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

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

Programowanie komputerów

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

Bardziej szczegółowo

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

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

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

Metody Metody, parametry, zwracanie wartości

Metody Metody, parametry, zwracanie wartości Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Metody Metody, parametry, zwracanie wartości Metody - co to jest i po co? Metoda to wydzielona część klasy, mająca

Bardziej szczegółowo

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Program, to lista poleceń zapisana w jednym języku programowania zgodnie z obowiązującymi w nim zasadami. Celem programu jest przetwarzanie

Bardziej szczegółowo

Laboratorium 6: Dynamiczny przydział pamięci. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Laboratorium 6: Dynamiczny przydział pamięci. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski Laboratorium 6: Dynamiczny przydział pamięci dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski 15 maja 2015 1. Wprowadzenie Instrukcja poświęcona jest dynamicznemu przydziałowi i zwalnianiu pamięci w

Bardziej szczegółowo

Rozdział ten zawiera informacje o sposobie konfiguracji i działania Modułu OPC.

Rozdział ten zawiera informacje o sposobie konfiguracji i działania Modułu OPC. 1 Moduł OPC Moduł OPC pozwala na komunikację z serwerami OPC pracującymi w oparciu o model DA (Data Access). Dzięki niemu można odczytać stan obiektów OPC (zmiennych zdefiniowanych w programie PLC), a

Bardziej szczegółowo

Jerzy Nawrocki, Wprowadzenie do informatyki

Jerzy Nawrocki, Wprowadzenie do informatyki Jerzy Nawrocki, Jerzy Nawrocki Wydział Informatyki Politechnika Poznańska jerzy.nawrocki@put.poznan.pl Przetwarzanie tekstów i AWK Problem konwersji plików FName:Jurek SName:Busz Salary 585 FName:Alek

Bardziej szczegółowo

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI Arytmetyka komputera Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka Opracował: Kamil Kowalski klasa III TI Spis treści 1. Jednostki informacyjne 2. Systemy liczbowe 2.1. System

Bardziej szczegółowo

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Programowanie obiektowe, wykład nr 6. Klasy i obiekty Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 6 Klasy i obiekty W programowaniu strukturalnym rozwój oprogramowania oparto

Bardziej szczegółowo

Podstawowym zadaniem, które realizuje

Podstawowym zadaniem, które realizuje Funkcje wyszukiwania i adresu INDEKS Mariusz Jankowski autor strony internetowej poświęconej Excelowi i programowaniu w VBA; Bogdan Gilarski właściciel firmy szkoleniowej Perfect And Practical; Pytania:

Bardziej szczegółowo

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody Obiektowy PHP Czym jest obiekt? W programowaniu obiektem można nazwać każdy abstrakcyjny byt, który programista utworzy w pamięci komputera. Jeszcze bardziej upraszczając to zagadnienie, można powiedzieć,

Bardziej szczegółowo

Wymagania eduka cyjne z matematyki

Wymagania eduka cyjne z matematyki Wymagania eduka cyjne z matematyki Klasa I - program Matematyka z plusem" Dział: LICZ B Y I DZIAŁANIA porównywać liczby wymierne, zaznaczać liczby wymierne na osi liczbowej, zamieniać ułamki zwykłe na

Bardziej szczegółowo

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

Ćwiczenia nr 2. Edycja tekstu (Microsoft Word)

Ćwiczenia nr 2. Edycja tekstu (Microsoft Word) Dostosowywanie paska zadań Ćwiczenia nr 2 Edycja tekstu (Microsoft Word) Domyślnie program Word proponuje paski narzędzi Standardowy oraz Formatowanie z zestawem opcji widocznym poniżej: Można jednak zmodyfikować

Bardziej szczegółowo

1 Rejestrator czasu pracy

1 Rejestrator czasu pracy 1 Rejestrator czasu pracy Rejestrator Czasu Pracy (określany również skrótowo RCP) pozwala na zbieranie i prezentowanie informacji o godzinach przepracowanych przez wybranych użytkowników systemu. Rejestrator

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

Generator skanerów Flex

Generator skanerów Flex Grzegorz Jacek Nalepa 17.7.2000, Kraków, Revision : 1.5 Streszczenie Artykuł prezentuje generator skanerów leksykalnych Flex, będący implementacją standardowego pakietu Lex. Zawarte jest krótkie wprowadzenie

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

Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python

Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python Język PYTHON Podstawowe informacje Python to język skryptowy, interpretowany - co oznacza, że piszemy skrypt, a następnie wykonujemy go za

Bardziej szczegółowo

Wymagania edukacyjne z matematyki

Wymagania edukacyjne z matematyki Wymagania edukacyjne z matematyki Klasa I - program Matematyka z plusem" Dział: LICZBY I DZIAŁANIA Poziom konieczny - ocena dopuszczająca porównywać liczby wymierne, zaznaczać liczby wymierne na osi liczbowej,

Bardziej szczegółowo

Kompilator języka C na procesor 8051 RC51 implementacja

Kompilator języka C na procesor 8051 RC51 implementacja Kompilator języka C na procesor 8051 RC51 implementacja Implementowane typy danych bit 1 bit char lub char signed 8 bitów char unsigned 8 bitów int lub signed int 16 bitów unsigned int 16 bitów long lub

Bardziej szczegółowo

Systemy operacyjne. System operacyjny Linux - wstęp. Anna Wojak

Systemy operacyjne. System operacyjny Linux - wstęp. Anna Wojak Systemy operacyjne System operacyjny Linux - wstęp Anna Wojak 1 1 Wstęp Linux jest systemem z rodziny Unix. Pierwsza wersja systemu została opracowana w 1969 roku przez K.Thompsona i D.Ritchie Jest to

Bardziej szczegółowo

Ćwiczenie: JavaScript Cookies (3x45 minut)

Ćwiczenie: JavaScript Cookies (3x45 minut) Ćwiczenie: JavaScript Cookies (3x45 minut) Cookies niewielkie porcje danych tekstowych, które mogą być przesyłane między serwerem a przeglądarką. Przeglądarka przechowuje te dane przez określony czas.

Bardziej szczegółowo

1 Wskaźniki i listy jednokierunkowe

1 Wskaźniki i listy jednokierunkowe 1 Wskaźniki i listy jednokierunkowe 1.1 Model pamięci komputera Pamięć komputera możemy wyobrażać sobie tak, jak na rysunku: Zawartość:... 01001011 01101010 11100101 00111001 00100010 01110011... adresy:

Bardziej szczegółowo

WYMAGANIA EDUKACYJNE

WYMAGANIA EDUKACYJNE GIMNAZJUM NR 2 W RYCZOWIE WYMAGANIA EDUKACYJNE niezbędne do uzyskania poszczególnych śródrocznych i rocznych ocen klasyfikacyjnych z INFORMATYKI w klasie II gimnazjum str. 1 1. Algorytmika i programowanie

Bardziej szczegółowo

Pierwsze kroki z easy Soft CoDeSys. 2009 Eaton Corporation. All rights reserved.

Pierwsze kroki z easy Soft CoDeSys. 2009 Eaton Corporation. All rights reserved. Pierwsze kroki z easy Soft CoDeSys Tworzenie prostego programu Rozpoczęcie pracy 2 Tworzenie prostego programu Wybór aparatu 3 Tworzenie prostego programu Wybór języka programowania Do wyboru jest sześć

Bardziej szczegółowo

Polcode Code Contest PHP-10.09

Polcode Code Contest PHP-10.09 Polcode Code Contest PHP-10.09 Przedmiotem konkursu jest napisanie w języku PHP programu, którego wykonanie spowoduje rozwiązanie zadanego problemu i wyświetlenie rezultatu. Zadanie konkursowe Celem zadania

Bardziej szczegółowo

Programowanie strukturalne i obiektowe

Programowanie strukturalne i obiektowe Programowanie strukturalne i obiektowe Język C część I Opracował: Grzegorz Flesik Literatura: A. Majczak, Programowanie strukturalne i obiektowe, Helion, Gliwice 2010 P. Domka, M. Łokińska, Programowanie

Bardziej szczegółowo

1 Moduł Modbus ASCII/RTU

1 Moduł Modbus ASCII/RTU 1 Moduł Modbus ASCII/RTU Moduł Modbus ASCII/RTU daje użytkownikowi Systemu Vision możliwość komunikacji z urządzeniami za pomocą protokołu Modbus. Moduł jest konfigurowalny w taki sposób, aby umożliwiał

Bardziej szczegółowo