Języki formalne i kompilatory (15 wyk., 15 ćw. audyt., 15 ćw. lab.)

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

Download "Języki formalne i kompilatory (15 wyk., 15 ćw. audyt., 15 ćw. lab.)"

Transkrypt

1 Języki formalne i kompilatory (15 wyk., 15 ćw. audyt., 15 ćw. lab.) dr inŝ. Jolanta Cybulka Instytut Automatyki i InŜynierii Informatycznej, pok. 312a Wilda Jolanta.Cybulka@put.poznan.pl www:

2 Literatura 1. Aho A V., Sethi R., Ullman J.: Kompilatory. Reguły Metody i Narzędzia. WNT, Warszawa Cybulka J., Jankowska B., Nawrocki J. R.: Automatyczne przetwarzanie tekstów. AWK, Lex i YACC, Wyd. NAKOM, Poznań, Dembiński P., Małuszyński J.: Matematyczne metody definiowania języków programowania, WNT, Warszawa Hopcroft J.E., Ullman J.D.: Wprowadzenie do teorii automatów, języków i obliczeń, PWN, Warszawa, Révész G.E.: Introduction to Formal languages, McGraw-Hill, New York,

3 LITERATURA JĘZYKI FORMALNE PODSTAWOWE POJĘCIA TRANSLACJA I KOMPILACJA PODSTAWOWE POJĘCIA ELEMENTY TEORII JĘZYKÓW FORMALNYCH METODY DEFINIOWANIA SKŁADNI JĘZYKA <Σ, SYN> HIERARCHIA JĘZYKÓW WG N. CHOMSKY'EGO: FORMALNY SYSTEM GENERACJI SKŁADNI (PODEJŚCIE GENERACYJNE) FORMALNA DEFINICJA AUTOMATU (PODEJŚCIE AKCEPTOROWE) JĘZYKI REGULARNE (KLASA "3") WYRAśENIA REGULARNE JĘZYK AWK Schemat programu (ciąg reguł przetwarzania) i sposób przetwarzania Rodzaje wzorców Wzorzec z wyraŝeniem regularnym Wzorzec z operatorami relacyjnymi Wzorzec ze spójnikami logicznymi (przykłady programów) Wzorzec warunkowy Wzorzec zakresu Akcje w programach Przykłady programów

4 1. Języki formalne podstawowe pojęcia Język (symboliczny) Język naturalny (narodowy) Język sztuczny (formalny) rozwaŝamy języki symboliczne, skonstruowane z symboli naleŝących do zbioru (niepustego, skończonego), zwanego alfabetem, np.: D = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} B = {0,1} H = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F} Lat = {a, b, c,, z, A, B, C,, Z} Pol = {a, ą, b, c, ć,, Ŝ, dz, dź, dŝ, A, Ą, B, C, Ć,, Z, Dz, Dź, DŜ} S = {,,,,, p, f, (, )} i wiele innych (alfabet Morse a, Braille a, symbole nutowe, symbole chemiczne, znaki migowe, ); 4

5 z symboli alfabetu, zgodnie z zadanymi regułami składania symboli powstają napisy języka zbiór wszystkich napisów naleŝących do języka (i tylko takich) nazywamy jego składnią (syntaktyką, syntaksą); nad alfabetem D nad alfabetem B 0 123F 09A FFAA nad alfabetem H Fundamenta Informaticae Formal Language nad alfabetem Lat Ala mieć ma As Asa nad alfabetem Pol p f p (f p) p p nad alfabetem S 5

6 składnia moŝe mieć strukturę warstwową, tzn. z ciągu symboli powstają napisy elementarne, których zbiór staje się nowym alfabetem, z którego powstają nowe napisy: nad alfabetem L = {Ala, mieć, ma, As, Asa,\, \n, \t } moŝna zbudować napis Ala ma Asa nad alfabetem C = {if, else, (, ), {, },=, ;, ++, >, num, id, \, \n, \t } moŝna zbudować napis if (xsr >12) {y++;} else {y=xsr;} 6

7 w wypadku języków formalnych, na składni moŝna wykonywać operacje mnogościowe, jak: suma, róŝnica, przecięcie, dopełnienie do uniwersum, złoŝenie, potęgowanie, domknięcie; A = {a, b, c} alfabet potęgowanie: A 0, A 1, A 2, A 3, A 0 = {ε} słowo długości 0, słowo puste A 1 = { a, b, c } słowa długości 1 A 2 = { aa, ab, ac, ba, bb, bc, ca, cb, cc } słowa długości 2 A 3 = { aaa, aab, aac, aba, abb, abc, aca, acb, acc, baa, bab, bac, bba,bbb, bbc, bca, bcb, bcc, caa, cab, cac, cba, cbb, cbc, cca, ccb, ccc} słowa długości 3 domknięcie zwrotne i przechodnie operacji potęgowania: A * A * = A 0 A 1 A 2 A 3 = (i = 0, ) A i domknięcie przechodnie operacji potęgowania: A + A + = A 1 A 2 A 3 = (i = 1, ) A i 7

8 napisy (składnia) słuŝą do notowania znaczeń, zadaniem funkcji semantyki języka formalnego jest przypisanie kaŝdemu elementowi składniowemu (napisowi) znaczenia z pewnej dziedziny znaczeń: znaczeniem napisu (2+3)*4 nad alfabetem A n = {0,1,,9} A o ={+, * } { (,)} jest 20 o ile D = {1, 2, 3, } jest zbiorem wartości (liczb) naturalnych, F = {plus, times} jest zbiorem funkcji (dodawania i mnoŝenia), val n : A n D val o : A o F, val o (+)= plus, val o (*)= times value : (A n A o { (,)})* D (dla napisów poprawnych składniowo) 8

9 język formalny L definiujemy matematycznie jako: L = <Σ, Syn, DSem, Sem> Σ alfabet, skończony niepusty zbiór symboli (znaków), Syn syntaktyka (składnia, syntaksa), zbiór napisów języka, zbudowanych z symboli alfabetu, DSem dziedzina znaczeń, zbiór bytów semantycznych, przypisywanych napisom języka, Sem relacja semantyczna (Sem Syn DSem), definiująca związki między napisami języka a elementami dziedziny znaczeń (relacja ta w zastosowaniach praktycznych jest funkcją semantyki); dodatkowo, język zastosowany w pewnej dziedzinie moŝe wytwarzać odmiany pragmatyczne: L 1 = <Σ, Syn, DSem 1, Sem 1 > L 2 = <Σ, Syn, DSem 2, Sem 2 > 9

10 2. Translacja i kompilacja podstawowe pojęcia zagadnienie translacji: tekst wejściowy >TRANSLACJA >wynik translacji zajmiemy się tylko wybranymi aspektami translacji: dotyczącymi tekstów napisanych w językach formalnych (sztucznych, np. językach programowania, dostępu do baz danych, publikacji informacji w Internecie HTML, SGML, XML itd.) w modelu translacji sterowanej składnią (L = <Σ, Syn >) translacja sterowana składnią proces, w którym po przeanalizowaniu struktury składniowej tekstu wejściowego jest on interpretowany lub na jego podstawie generowany jest tekst wyjściowy narzędzia programistyczne realizujące translacje sterowane składnią to np.: AWK, Lex, YACC, sed, PERL i wiele innych, w tym języki programowania 10

11 wyróŝniamy dwie techniki translacji: interpretację i kompilację proces kompilacji realizuje program zwany kompilatorem: tekst wejściowy --> kompilator --> tekst wyjściowy kompilacja przebiega w dwóch etapach: a) analizy tekstu wejściowego i b) syntezy tekstu wyjściowego, które rozpadają się na fazy (kaŝda faza przetwarza tekst wejściowy lub jego reprezentację): 11

12 tekst wejściowy tabela symboli, reprezentacje pośrednie tekstu analizator leksykalny analizator składniowy analizator zaleŝności kontekstowych generator kodu pośredniego etap analizy tekstu wejściowego optymalizator kodu generator kodu wynikowego etap syntezy (tekstu) kodu wynikowego 12 tekst wyjściowy

13 kompilacja moŝe być jedno- lub wieloprzebiegowa przykład kompilacji: program p1; var x: real; i: integer; begin x:=i+1; end. Analizator leksykalny wyodrębni następujący zbiór jednostek leksykalnych: program p1 var x : real ; i : integer begin := + 1 end. Analizator składniowy utworzy drzewo rozbioru składniowego, a informacje o identyfikatorach zmiennych umieści w tabeli symboli: := id1 + id2 1 13

14 Nazwa Leksem Typ... id1 x real... id2 i integer... Analizator zaleŝności kontekstowych stwierdzi, Ŝe zmienne wykorzystane w instrukcji przypisania zostały zadeklarowane (informacje o tym zawarto w tabeli symboli) oraz zaznaczy w kodzie pośrednim, Ŝe naleŝy przeprowadzić konwersję typu stałej 1 i zmiennej i z typu integer do typu real (operator itor): := id1 + itor itor id2 1 14

15 Generator kodu trójadresowego, wygeneruje dwie zmienne okresowe temp1 i temp2 i na podstawie powyŝszego drzewa utworzy zapis: temp1 := itor(1) temp2 := itor(id2) id1 := temp1 + temp2 Optymalizator kodu dokona redukcji: temp1 := itor(id2) id1 := temp Na podstawie kodu pośredniego, generator kodu wynikowego utworzy zapis w kodzie asemblera, który następnie poddany zostanie asemblacji w celu uzyskania wersji wykonywalnej: MOV id2, R1 ADD R1, #1.0 MOV R1, id1 15

16 Na czym moŝe polegać definiowanie i przetwarzanie języka formalnego? a) określenie języka (wszystkich jego elementów) w sposób ścisły, za pomocą odpowiednich metod i narzędzi b) badanie przynaleŝności napisu do języka (sprawdzenie poprawności napisu) c) translacja napisu z jednego języka na drugi 16

17 3. Elementy teorii języków formalnych 3.1. Metody definiowania składni języka <Σ, Syn> metody definiowania składni dzielimy na: generacyjne i akceptorowe, w metodach generacyjnych podaje się zbiór reguł generacji (formalny system generacji składni) poprawnych napisów nad podanym alfabetem (np. gramatyki kombinatoryczne N. Chomsky ego), w metodach akceptorowych definiuje się nad alfabetem automat/akceptor (formalna definicja automatu), który potrafi zbadać przynaleŝność napisu do języka (wszystkie napisy zaakceptowane przez automat definiują język), kaŝdemu typowi gramatyki odpowiada typ automatu (podejścia są zatem komplementarne), translator jest przetwornikiem napisów, od akceptora róŝni się tym, Ŝe ma zdefiniowany alfabet wyjściowy i potrafi generować napisy w języku nad tym alfabetem (formalnie, jest automatem z wyjściem ). 17

18 3.2. Hierarchia języków wg N. Chomsky'ego: klasy języków uporządkowane relacją zawierania się zbiorów; języki klasy "0" nazywamy obliczalnymi, są klasą najszerszą, matematycznie są przykładem zbiorów rekurencyjnie przeliczalnych (częściowo rozstrzygalnych); języki klasy "1" nazywamy monotonicznymi, matematycznie są przykładem zbiorów rekurencyjnych (rozstrzygalnych); języki klasy "2" nazywamy bezkontekstowymi; wyróŝnia się istotne z praktycznego punktu widzenia podklasy LL i LR (generator YACC); języki klasy "3" nazywamy regularnymi; biorą swą nazwę od jednego z formalizmów ich definiowania zwanego wyraŝeniami regularnymi; 18

19 3.3. Formalny system generacji składni (podejście generacyjne) F = < Σ, Syn, P, s> Σ alfabet Syn syntaktyka P zbiór reguł generacji napisów ze zbioru Syn s wyróŝniony zbiór napisów początkowych; przykładem systemu generacji jest formalny system kombinatoryczny: F = < Σ, Syn, P, s >, gdzie P Σ * Σ *, s Σ * ; przykładem systemu kombinatorycznego jest gramatyka kombinatoryczna (klasa 0), zdefiniowana przez Noama Chomsky ego: G = < N, Σ, P, S > N Σ = N skończony niepusty alfabet symboli pomocniczych (nieterminalnych), Σ skończony, niepusty alfabet definiowanego języka (symbole terminalne), P (N Σ) + (N Σ) *, zbiór produkcji gramatyki (reguł generacji napisów), S N, wyróŝniony symbol pomocniczy, zwany aksjomatem gramatyki; 19

20 produkcję gramatyki, opisującą związek pomiędzy dwoma napisami (np. napisem α i napisem β), zapisujemy zwyczajowo α β, gdzie strzałka oznacza znak zastąpienia, a cały napis poleca zastąpić napis α napisem β; relacja wywodu bezpośredniego (oraz jej domknięcie *): xabcy xdvy o ile w zbiorze P istnieje produkcja abc dv; język J(G) generowany gramatyką G: J(G) = {x S * x x Σ*} zdanie (lub słowo) to napis zbudowany wyłącznie z symboli terminalnych, uzyskany za pomocą relacji wywodu *; napis zawierający symbole terminalne i nieterminalne, równieŝ uzyskany za pomocą relacji wywodu *, nazywamy formą zdaniową, 20

21 operacje na językach (zbiorach słów J, J 1, J 2 ): suma: J 1 J 2 = {x x J 1 x J 2 }, przekrój: J 1 J 2 = {x x J 1 x J 2 }, róŝnica: J 1 - J 2 = {x x J 1 x J 2 }, dopełnienie: J = Σ*- J, złoŝenie: J 1 J 2 = {xy x J 1 y J 2 }, potęgowanie: J n, J 0 = {ε}, J k = JJ k-1, domknięcie: J * = J i, i = 0 domknięcie dodatnie: J + = J i, J + = JJ * =J * J, J * =J + {ε} i = 1 21

22 3.4. Formalna definicja automatu (podejście akceptorowe) w podejściu akceptorowym: automat M akceptuje słowo (zdanie) s wtw. startując od konfiguracji początkowej ze słowem s na wejściu moŝe wykonać skończony ciąg kroków kończących się konfiguracją końcową automat M definiuje język L(M), który jest zbiorem wszystkich słów s akceptowanych przez M 22

23 4. Języki regularne (klasa "3") 4.1. WyraŜenia regularne wyraŝeniem regularnym (ang. regular expression) nad alfabetem Σ nazywamy napis zbudowany za pomocą następującej rekurencyjnej definicji: 1) jest w. r. oznaczającym język pusty (pusty zbiór napisów), 2) ε jest w. r. oznaczającym język {ε}, 3) jeśli a Σ, to napis a jest w. r. oznaczającym język {a}, 4) jeśli r 1 i r 2 są w. r., to napis r 1 r 2 jest w. r. oznaczającym język L(r 1 )L(r 2 ), 5) jeśli r 1 i r 2 są w. r., to napis r 1 r 2 jest w. r. oznaczającym język L(r 1 ) L(r 2 ), 6) jeśli r jest w. r., to napis r * jest w. r. oznaczającym język (i=0, ) L(r) i, 7) jeśli r jest w. r., to (r) jest w. r. oznaczającym L(r). właściwości wyraŝeń regularnych; niech p, q i r oznaczają dowolne wyraŝenia regularne, wtedy: p (q r) = (p r) q p(qr) = (pq)r p q = q p p* = ε pp* (p q)r = pr qr r(p q) = rp rq 23

24 εp = pε = p p = p = przykłady Niech Σ = {0, 1, 2} 1) 11 reprezentuje język {11}, p* = (ε p)* if p = r pq q ε then p = rq* 2) (0 1)* reprezentuje język wszystkich napisów zbudowanych z zer i jedynek, 3) (0 1)*11(0 1)* reprezentuje język wszystkich napisów zbudowanych z zer i jedynek, w których co najmniej raz występują dwie kolejne jedynki, 4) 0*1*2* reprezentuje język składający się z napisów zbudowanych z dowolnej liczby zer, po której następuje dowolna liczba jedynek, a następnie dowolna liczba dwójek; Niech Σ = {0, 1, 2, 9, a, b, z, A, B Z, _,, +} 5) (a b z A B Z _)(a b z A B Z _)* reprezentuje język identyfikatorów będących niepustymi ciągami liter, cyfr i znaków podkreślenia, rozpoczynającymi się od litery lub znaku podkreślenia, (- + ε)(0 1 9)(0 1 9)* reprezentuje język stałych całkowitych dziesiętnych; 24

25 4.2. Język AWK Tekst wejściowy Program w AWK Tekst wyjściowy Schemat programu (ciąg reguł przetwarzania) i sposób przetwarzania wzorzec 1 akcja 1 reguła przetwarzania wzorzec 2 akcja 2... wzorzec n akcja n opcjonalna lista definicji funkcji niestandardowych tekst wejściowy i wyjściowy: ciąg wierszy podzielonych na pola ($0, NF, NR, FS, OFS, RS, ORS) program wczytuje wiersz, przegląda po kolei reguły przetwarzania i jeśli wzorzec pasuje do wiersza, to wykonywana jest akcja z nim związana (sytuacje specjalne: wzorce BEGIN i END oraz kilka plików wejściowych) 25

26 przykładowy tekst wejściowy (we.txt): Augustyn Kowalski I Emilia Oltaren I Hanna Zawadiacka I Zefiryn Marchewka I Joanna Prawdziwa I Karol Nielepszy I przykładowy tekst wyjściowy (wy.txt): LP NR INDEKSU NAZWISKO IMIE SUMA PUNKTOW Kowalski Augustyn Oltaren Emilia Zawadiacka Hanna Marchewka Zefiryn Prawdziwa Joanna Nielepszy Karol

27 Liczba osob: 5 # Program drukuje zestawienie informacji o studentach # BEGIN {licz=0;print "LP NR INDEKSU NAZWISKO IMIE SUMA PUNKTOW\n"; } {suma_punktow=$5+$6+$7;printf("%-5i%-14i%-14s%-12s%-12g\n", NR,$1,$3,$2,suma_punktow); if((float)suma_punktow>=1.8)licz++; } END {print "\nliczba osob: ",licz ;} gawk -f program.awk <we.txt >wy.txt Rodzaje wzorców wzorzec BEGIN i wzorzec END wzorzec w postaci wyraŝenia regularnego wzorzec z operatorami relacyjnymi wzorzec zawierający spójniki logiczne 27

28 wzorzec warunkowy wzorzec zakresu Wzorzec z wyraŝeniem regularnym / wyraŝenie_regularne/ $0 ~ / wyraŝenie_regularne/ alfabet w języku AWK (kod ASCII), znaki specjalne alfabetu: \ / - ^ $. [ ] ( ) * +? przykłady programów zawierających wzorce w postaci wyraŝenia regularnego: /Z/ akcja pusta (przepisanie dopasowanego wejścia na wyjście) /\./ /^n$/ {print NR, $0;} /^.$/ /[0-9]/ 28

29 /[^0-9]/ /^[0-9]/ /Augustyn Zefiryn/ /[A-Za-z][A-Za-z0-9]*/ /[0-9][0-9]*(D d)?/ Wzorzec z operatorami relacyjnymi wyraŝenie operator_relacyjny wyraŝenie przykłady programów: $1 > $2 $4 ~ /n/ BEGIN {regexpr="n";} $4 ~ regexpr wzorzec dynamiczny 29

30 $0!~ /[A-Za-z][A-Za-z0-9]*/ Wzorzec ze spójnikami logicznymi (przykłady programów) ($3 == "Ola" $5 >= 2.0) && NR>1!/[Zz]/ Wzorzec warunkowy wyraŝenie? wzorzec1 : wzorzec2 ($5 > 2.0)?(/Z/):(!/z/) Wzorzec zakresu /wzorzec_pierwszego_wiersza/, /wzorzec_ostatniego_wiersza/ /Emilia/, /Oltaren/ 30

31 Akcje w programach (ciągi instrukcji: przypisania, wyjścia, warunkowych, iteracyjnych, break, continue, delete, exit) w akcjach moŝna wykorzystywać stałe numeryczne i stałe łańcuchowe (mogą zawierać sekwencje znaków specjalnych) takŝe zmienne proste i tablice (jednowymiarowe): 1) zmienne przechowujące wartości pól bieŝącego wiersza ($1, $2,, $i, $NF-3) 2) zmienne standardowe, predefiniowane w kaŝdym programie ($0, NF, ) 3) zmienne uŝyte przez programistę; funkcje standardowe i niestandardowe (arytmetyczne i łańcuchowe) Funkcja Opis Funkcje arytmetyczne atan2(x,y) Oznacza funkcję arcus tangens z x/y w zakresie od -π do π. cos(x) Oznacza funkcję cosinus x. exp(x) Oznacza funkcję e x. int(x) Oznacza funkcję entier(x) (część całkowita x). 31

32 log(x) Oznacza funkcję logarytm naturalny z x. rand(x) Oznacza funkcję generującą liczbę pseudolosową z przedziału [0-1]. sin(x) Oznacza funkcję sinus x. sqrt(x) Oznacza funkcję pierwiastek kwadratowy z x. srand(x) Oznacza funkcje inicjującą działanie generatora liczb pseudolosowych wartością x. Funkcje łańcuchowe gsub(r, s, t) Jeśli w t występuje ciąg pasujący do r, to zastąp go przez s; wartością funkcji jest liczba wykonanych zastąpień; wyraŝeniem t moŝe być $0, wtedy wywołanie funkcji zapisujemy jako gsub(r, s). index(s, t) Jeśli ciąg t występuje w ciągu s, to wartością funkcji jest numer pierwszej pozycji t w s lub 0, jeśli t nie występuje w s. length(s) Wartością funkcji jest długość ciągu s. match(s, r) Jeśli w s występuje ciąg pasujący do r, to wartością funkcji jest numer pierwszego znaku tego ciągu w s lub 0, gdy ciąg ten nie występuje. Funkcja ta zmienia takŝe wartości standardowych zmiennych RSTART i RLENGTH. split(s, a, r) Funkcja traktuje s jak ciąg pól oddzielonych od siebie separatorem r, generuje tablicę a i umieszcza w niej wspomniane pola; wartością funkcji jest liczba pól. Jeśli wywołanie funkcji przyjmie postać split(s, a), to domyślną wartością separatora jest wartość zmiennej standardowej FS. sprintf(fmt, e1,,en) sub(r, s, t) Funkcja drukuje wartość wyraŝeń e1,, en zgodnie z formatem fmt; wartością funkcji jest wydrukowany ciąg znaków. Funkcja działa podobnie, jak gsub(r, s, t), jednakŝe dokonuje zastąpienia ciągiem s tylko 32

33 jednego, skrajnie lewego ciągu pasującego do r. Wartością funkcji jest więc 0 lub 1. substr(s, p, n) Wartością funkcji jest podciąg ciągu s, zaczynający się na pozycji p i mający długość n. substr(s, p) Wartością funkcji jest podciąg ciągu s zaczynający się na pozycji p i kończący na ostatniej pozycji ciągu s. tolower(s) Wartością funkcji jest kopia ciągu s, w której zamieniono wszystkie wielkie litery na małe (pozostałe znaki bez zmian). toupper(s) Wartością funkcji jest kopia ciągu s, w której zamieniono wszystkie małe litery na wielkie (pozostałe znaki bez zmian). zestawienie zmiennych standardowych języka AWK: Zmienna ARGC Liczba argumentów polecenia gawk (z wyjątkiem opcji i nazw plików z programem). ARGIND Indeks elementu tablicy ARGV (patrz niŝej) wskazującego bieŝący plik wejściowy. ARGV Tablica argumentów polecenia gawk, indeksowana od 0 do ARGC-1; zmieniając zawartość tej tablicy, mamy moŝliwość zarządzania przetwarzaniem plików z tekstami wejściowymi. CONVFMT Format konwersji wartości dla liczb; formatem domyślnym jest "%.6g". ERRNO Opis Napis sygnalizujący wystąpienie błędu podczas wykonywania instrukcji getline lub close() 33

34 34 FILENAME Nazwa bieŝącego pliku wejściowego; jeśli nie uŝyto Ŝadnej nazwy pliku, to nazwą zastępczą jest znak minus -; wartość zmiennej FILENAME nie jest dostępna w akcjach związanych z wzorcem BEGIN. FNR Liczba dotychczas przetworzonych wierszy bieŝącego pliku danych wejściowych (całkowita liczba wierszy jest dostępna w akcji związanej z wzorcem END). FS Separator pól w tekście wejściowym domyślnie niepusty ciąg znaków spacji, tabulacji. IGNORECASE Wartość zmiennej wskazuje, czy wielkie i małe litery mają być rozróŝniane (wartość 0), czy teŝ nie (wartość niezerowa). NF Liczba pól w bieŝącym wierszu pliku danych wejściowych. NR Liczba wierszy tekstu wejściowego przeczytanych do tej pory. OFMT Format liczb w pliku wyjściowym domyślnie "%.6g". OFS Separator pól w tekście wyjściowym domyślnie spacja. ORS Separator wierszy w tekście wyjściowym domyślnie \n. RLENGTH Długość ciągu znaków dopasowanego za pomocą funkcji match() RS Separator wierszy w tekście wejściowym domyślnie \n. RSTART Indeks pierwszego znaku w ciągu dopasowanym za pomocą funkcji match() SUBSEP Znak uŝywany do oddzielania indeksów w tablicach (jeśli symulujemy działanie tablic wielowymiarowych) domyślnie jest to znak o kodzie \034. zestawienie operatorów arytmetycznych, logicznych i łańcuchowych Operator Opis

35 = += Binarne operatory 1 przypisania (wzorowane na podobnych z C). -= *= /= %= ^=?: Ternarny operator wyraŝenia warunkowego postaci: expr1?expr2:expr3; jeśli expr1 jest prawdziwe, to wartością całego wyraŝenia jest wartość expr2, w przeciwnym wypadku, wartością wyraŝenia jest wartość expr3. Binarny spójnik logiczny oznaczający alternatywę. && Binarny spójnik logiczny oznaczający koniunkcję. in Binarny operator wykorzystywany w instrukcjach iteracyjnych realizujących dostęp do elementów tablic. ~!~ Binarny operator ~ słuŝący do sprawdzania, czy pierwszy argument zawiera ciąg znaków pasujący do wzorca będącego drugim argumentem i negacja!~ tego operatora. < > Binarne operatory oznaczające relacje mniejszości i większości. <= >= Binarne operatory oznaczające relacje mniejsze lub równe i większe lub równe.!= == Binarne operatory oznaczające relacje róŝne i równe. blank Binarny operator sklejania łańcuchów znakowych; zamiast słowa blank moŝna uŝyć spacji lub pustego ciągu znaków. + - Binarne operatory oznaczające dodawanie i odejmowanie. *? % Binarne operatory oznaczające mnoŝenie, dzielenie i operację modulo (reszta z dzielenia). + -! Unarny, prefiksowy plus, unarny prefiksowy minus i unarny prefiksowy spójnik negacji 1 Wszystkie operatory zapisuje się infiksowo, o ile nie wskazano jawnie innej notacji. 35

36 logicznej. ^ Binarny operator oznaczający potęgowanie Unarne operatory inkrementacji i dekrementacji, zapisywane prefiksowo i postfiksowo. zestawienie postaci wywołań funkcji getline i next Postać wywołania Opis działania getline Wczytaj kolejny wiersz z bieŝącego źródła tekstu wejściowego, przypisz go zmiennej $0 oraz podziel na pola i ustal nowe wartości zmiennych: NF, NR, FNR. getline < "file" Wczytaj kolejny wiersz z pliku file, przypisz go zmiennej $0, podziel na pola i ustal nową wartość zmiennej NF. getline x Wczytaj kolejny wiersz z bieŝącego wejścia, przypisz go zmiennej x i ustal nowe wartości zmiennych NF i FNR. getline x < "file" Wczytaj kolejny wiersz z pliku file, przypisz go zmiennej x. "command" getline "command" getline x next Przypisz zmiennej $0 wartość kolejnego wiersza wygenerowanego poleceniem command, podziel ten wiersz na pola i ustal nową wartość zmiennej NF. Przypisz zmiennej x wartość kolejnego wiersza tekstu wygenerowanego poleceniem command. Zakończ przetwarzanie bieŝącego wiersza tekstu, wczytaj kolejny wiersz i rozpocznij wykonywanie programu od pierwszej reguły przetwarzania. Jeśli osiągnięto koniec tekstu wejściowego, to wykonuje się reguły związane ze wzorcem END 2 (gdy są w programie). 2 Instrukcja next nie moŝe występować w akcjach związanych z wzorcami BEGIN i END. 36

37 nextfile Zakończ przetwarzanie bieŝącego pliku źródłowego, wczytaj wiersz z następnego pliku (tablica ARGV), zmień wartość zmiennych FILENAME i ARGIND, przypisz zmiennej FNR wartość 1 i rozpocznij wykonywanie programu od pierwszej reguły przetwarzania. Jeśli osiągnięto koniec tekstu wejściowego, to wykonaj reguły związane ze wzorcem END (gdy są w programie) Przykłady programów {gsub(/\ \ */," "); print;} {split($0,t,"-");print "dzien: "t[1]" miesiac: "t[2]" rok: "t[3];} BEGIN {puste=1;} puste && /[0-9]/ {wynik=$1;puste=0;}!puste && /[0-9]/ {wynik=nwp(wynik,$1);} END {print wynik;} function nwp(a,b) { while (a!=b) {if (a>b) a-=b; else b-=a;} return a; } 37

38 {Lpol+=NF;} END{print " Liczba pol: "Lpol" Liczba linii: "NR;} (NR>2)&&(NR<9) {$2=$2+1000;$NF="";print;} plik wejściowy zarzad.txt : prezes: Jan Czermen zastepca: Magda Wicewicz sekretarz: vacat skarbnik: Krzysztof Pieniazek czlonek: vacat czlonek: Roman Memberski plik wejściowy vacat.txt : sekretarz: Jerzy Papierek czlonek: Anna Wakacka 38

39 program: BEGIN {"echo. date" getline;printf("%35s,%s\n", $4,$5);} /vacat/ {getline < "vacat.txt"; }!/vacat/ {print;} /prezes/ {sub(/prezes/,"opiekun");}!/prezes/ {print;} (NR>1)&&(NR<9) {print $3, $4 "sort";} {if($0 ~ /prezes/) { sub(/prezes/,"dyrektor"); print;next; }else print;} /prezes/{sub(/prezes/,"opiekun");print; next} {print} 39

40 (NR>1)&&(NR<9) {for(i=nf;i>0;i--){printf("%-12s",$i);} printf("\n"); } {x[nr]=$0;} END {for (i=nr;i>0;i--) print x[i];} 40

System operacyjny Linux

System operacyjny Linux Paweł Rajba pawel.rajba@continet.pl http://kursy24.eu/ Zawartość modułu 7 Język awk Wprowadzenie Schemat programu Konstrukcja wzorców Konstrukcja wyrażeń regularnych Struktury kontrolne Predefiniowane

Bardziej szczegółowo

Maszyna Turinga. Algorytm. czy program???? Problem Hilberta: Przykłady algorytmów. Cechy algorytmu: Pojęcie algorytmu

Maszyna Turinga. Algorytm. czy program???? Problem Hilberta: Przykłady algorytmów. Cechy algorytmu: Pojęcie algorytmu Problem Hilberta: 9 Czy istnieje ogólna mechaniczna procedura, która w zasadzie pozwoliłaby nam po kolei rozwiązać wszystkie matematyczne problemy (należące do odpowiednio zdefiniowanej klasy)? 2 Przykłady

Bardziej szczegółowo

AWK. Plan wykładu. Wprowadzenie. Najprostszy program

AWK. Plan wykładu. Wprowadzenie. Najprostszy program Wojciech Complak Wojciech.Complak@cs.put.poznan.pl AWK Plan wykładu wprowadzenie składnia programów wzorce, operatory, zmienne instrukcje tablice funkcje standardowe funkcje użytkownika wejście/wyjście,

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

Gramatyki, wyprowadzenia, hierarchia Chomsky ego. Gramatyka

Gramatyki, wyprowadzenia, hierarchia Chomsky ego. Gramatyka Gramatyki, wyprowadzenia, hierarchia Chomsky ego Teoria automatów i języków formalnych Dr inŝ. Janusz Majewski Katedra Informatyki Gramatyka Gramatyką G nazywamy czwórkę uporządkowaną gdzie: G =

Bardziej szczegółowo

Gramatyki atrybutywne

Gramatyki atrybutywne Gramatyki atrybutywne, część 1 (gramatyki S-atrybutywne Teoria kompilacji Dr inŝ. Janusz Majewski Katedra Informatyki Gramatyki atrybutywne Do przeprowadzenia poprawnego tłumaczenia, oprócz informacji

Bardziej szczegółowo

Analiza leksykalna 1. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

Analiza leksykalna 1. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki Analiza leksykalna 1 Teoria kompilacji Dr inż. Janusz Majewski Katedra Informatyki Zadanie analizy leksykalnej Kod źródłowy (ciąg znaków) Analizator leksykalny SKANER Ciąg symboli leksykalnych (tokenów)

Bardziej szczegółowo

Zadanie analizy leksykalnej

Zadanie analizy leksykalnej Analiza leksykalna 1 Teoria kompilacji Dr inŝ. Janusz Majewski Katedra Informatyki Zadanie analizy leksykalnej Przykład: We: COST := ( PRICE + TAX ) * 0.98 Wy: id 1 := ( id 2 + id 3 ) * num 4 Tablica symboli:

Bardziej szczegółowo

2.2. Gramatyki, wyprowadzenia, hierarchia Chomsky'ego

2.2. Gramatyki, wyprowadzenia, hierarchia Chomsky'ego 2.2. Gramatyki, wyprowadzenia, hierarchia Chomsky'ego Gramatyka Gramatyką G nazywamy czwórkę uporządkowaną G = gdzie: N zbiór symboli nieterminalnych, T zbiór symboli terminalnych, P zbiór

Bardziej szczegółowo

J ezyk AWK Kurs systemu UNIX

J ezyk AWK Kurs systemu UNIX Język AWK Kurs systemu UNIX 1 AWK Opracowany w laboratoriach Bella w 1978 przez Aho, Weinbergera i Kernighana Język do przetwarzania plików tekstowych Kurs systemu UNIX 2 AWK: pierwsza odsłona! AWK jest

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

Hierarchia Chomsky ego Maszyna Turinga

Hierarchia Chomsky ego Maszyna Turinga Hierarchia Chomsky ego Maszyna Turinga Języki formalne i automaty Dr inż. Janusz Majewski Katedra Informatyki Gramatyka Gramatyką G nazywamy czwórkę uporządkowaną gdzie: G = V skończony zbiór

Bardziej szczegółowo

Języki formalne i automaty Ćwiczenia 1

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

Bardziej szczegółowo

Metody Kompilacji Wykład 1 Wstęp

Metody Kompilacji Wykład 1 Wstęp Metody Kompilacji Wykład 1 Wstęp Literatura: Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman: Compilers: Princiles, Techniques, and Tools. Addison-Wesley 1986, ISBN 0-201-10088-6 Literatura: Alfred V. Aho,

Bardziej szczegółowo

Języki formalne i kompilatory (15 wyk., 15 ćw. audyt., 15 ćw. lab.)

Języki formalne i kompilatory (15 wyk., 15 ćw. audyt., 15 ćw. lab.) Języki formalne i kompilatory (15 wyk., 15 ćw. audyt., 15 ćw. lab.) dr inż. Jolanta Cybulka Instytut Automatyki, Robotyki i Inżynierii Informatycznej, pok. 313A Piotrowo bud. A1 e-mail: Jolanta.Cybulka@put.poznan.pl

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

J.NAWROCKI, M. ANTCZAK, W. FROHMBERG, K. KOLANOWSKI, J. POCHMARA, S. WĄSIK, T. ŻOK AWK - WPROWADZENIE

J.NAWROCKI, M. ANTCZAK, W. FROHMBERG, K. KOLANOWSKI, J. POCHMARA, S. WĄSIK, T. ŻOK AWK - WPROWADZENIE J.NAWROCKI, M. ANTCZAK, W. FROHMBERG, K. KOLANOWSKI, J. POCHMARA, S. WĄSIK, T. ŻOK SKŁADNIA WYWOŁANIA AWK: AWK - WPROWADZENIE awk [-Fs] "program" [plik1 plik2...] # komendy zapisywane są w linii poleceń

Bardziej szczegółowo

Maszyna Turinga języki

Maszyna Turinga języki Maszyna Turinga języki Teoria automatów i języków formalnych Dr inż. Janusz Majewski Katedra Informatyki Maszyna Turinga (1) b b b A B C B D A B C b b Q Zależnie od symbolu obserwowanego przez głowicę

Bardziej szczegółowo

Wstęp do systemów wielozadaniowych laboratorium 19 awk

Wstęp do systemów wielozadaniowych laboratorium 19 awk Wstęp do systemów wielozadaniowych laboratorium 19 awk Jarosław Piersa Wydział Matematyki i Informatyki, Uniwersytet Mikołaja Kopernika 2013-01-08 Język programowania do pracy z bazami danych (w formie

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

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

Analiza leksykalna 1. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki

Analiza leksykalna 1. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki Analiza leksykalna 1 Języki formalne i automaty Dr inż. Janusz Majewski Katedra Informatyki Zadanie analizy leksykalnej Kod źródłowy (ciąg znaków) Analizator leksykalny SKANER Ciąg symboli leksykalnych

Bardziej szczegółowo

L E X. Generator analizatorów leksykalnych

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

Bardziej szczegółowo

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

KONSTRUKCJA KOMPILATORÓW

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

Bardziej szczegółowo

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

10. Translacja sterowana składnią i YACC

10. Translacja sterowana składnią i YACC 10. Translacja sterowana składnią i YACC 10.1 Charakterystyka problemu translacja sterowana składnią jest metodą generacji przetworników tekstu języków, których składnię opisano za pomocą gramatyki (bezkontekstowej)

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Języki i gramatyki formalne

Języki i gramatyki formalne Języki i gramatyki formalne Języki naturalne i formalne Cechy języka naturalnego - duża swoboda konstruowania zdań (brak ścisłych reguł gramatycznych), duża ilość wyjątków. Języki formalne - ścisły i jednoznaczny

Bardziej szczegółowo

Matematyczne Podstawy Informatyki

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

Bardziej szczegółowo

Matematyczne Podstawy Informatyki

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

Bardziej szczegółowo

Wyrażenia regularne. Wyrażenia regularne 1/41

Wyrażenia regularne. Wyrażenia regularne 1/41 Wyrażenia regularne Wyrażenia regularne 1/41 Wyrażenia regularne 2/41 Po co wyrażenia regularne? Polecenie: $ grep est tekst.txt Zawartość tekst.txt To jest plik tekstowy. Testujemy narzędzie grep. Trzecia

Bardziej szczegółowo

Wprowadzenie do programowania języki i gramatyki formalne. dr hab. inż. Mikołaj Morzy

Wprowadzenie do programowania języki i gramatyki formalne. dr hab. inż. Mikołaj Morzy Wprowadzenie do programowania języki i gramatyki formalne dr hab. inż. Mikołaj Morzy plan wykładu wprowadzenie gramatyki podstawowe definicje produkcje i drzewa wywodu niejednoznaczność gramatyk hierarchia

Bardziej szczegółowo

Efektywna analiza składniowa GBK

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

Bardziej szczegółowo

WIADOMOŚCI WSTĘPNE WPROWADZENIE DO JĘZYKA TURBO PASCAL. Klawisze skrótów. {to jest właśnie komentarz, moŝna tu umieścić dowolny opis}

WIADOMOŚCI WSTĘPNE WPROWADZENIE DO JĘZYKA TURBO PASCAL. Klawisze skrótów. {to jest właśnie komentarz, moŝna tu umieścić dowolny opis} 1 WIADOMOŚCI WSTĘPNE Programowanie komputerów najogólniej mówiąc polega na zapisaniu pewniej listy poleceń do wykonania przez komputer w pewnym umownym języku Taką listę poleceń nazywamy programem Program

Bardziej szczegółowo

Programowanie w języku Python. Grażyna Koba

Programowanie w języku Python. Grażyna Koba Programowanie w języku Python Grażyna Koba Kilka definicji Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i

Bardziej szczegółowo

Generatory analizatorów

Generatory analizatorów Generatory analizatorów Generator analizatora leksykalnego flex ( http://www.gnu.org/software/flex/ ) Generator analizatora składniowego bison ( http://www.gnu.org/software/bison/ ) Idea ogólna Opis atomów

Bardziej szczegółowo

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń. Podstawy programowania Programowanie wyrażeń 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń. W językach programowania są wykorzystywane

Bardziej szczegółowo

Jaki język zrozumie automat?

Jaki język zrozumie automat? Jaki język zrozumie automat? Wojciech Dzik Instytut Matematyki Uniwersytet Śląski Katowice wojciech.dzik@us.edu.pl 7. Forum Matematyków Polskich, 12-17 września 2016, Olsztyn Prosty Automat do kawy Przemawiamy

Bardziej szczegółowo

Wprowadzenie do analizy składniowej. Bartosz Bogacki.

Wprowadzenie do analizy składniowej. Bartosz Bogacki. Wprowadzenie do analizy składniowej Bartosz Bogacki Bartosz.Bogacki@cs.put.poznan.pl Witam Państwa. Wykład, który za chwilę Państwo wysłuchają dotyczy wprowadzenia do analizy składniowej. Zapraszam serdecznie

Bardziej szczegółowo

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

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

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

Bardziej szczegółowo

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

Metody numeryczne Laboratorium 2

Metody numeryczne Laboratorium 2 Metody numeryczne Laboratorium 2 1. Tworzenie i uruchamianie skryptów Środowisko MATLAB/GNU Octave daje nam możliwość tworzenia skryptów czyli zapisywania grup poleceń czy funkcji w osobnym pliku i uruchamiania

Bardziej szczegółowo

Kiedy i czy konieczne?

Kiedy i czy konieczne? Bazy Danych Kiedy i czy konieczne? Zastanów się: czy często wykonujesz te same czynności? czy wielokrotnie musisz tworzyć i wypełniać dokumenty do siebie podobne (faktury, oferty, raporty itp.) czy ciągle

Bardziej szczegółowo

Analiza semantyczna. Gramatyka atrybutywna

Analiza semantyczna. Gramatyka atrybutywna Analiza semantyczna Do przeprowadzenia poprawnego tłumaczenia, oprócz informacji na temat składni języka podlegającego tłumaczeniu, translator musi posiadać możliwość korzystania z wielu innych informacji

Bardziej szczegółowo

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

Podstawy Programowania C++

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

Bardziej szczegółowo

Języki formalne i gramatyki

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

Bardziej szczegółowo

Wprowadzenie. Teoria automatów i języków formalnych. Literatura (1)

Wprowadzenie. Teoria automatów i języków formalnych. Literatura (1) Wprowadzenie Teoria automatów i języków formalnych Dr inŝ. Janusz Majewski Katedra Informatyki Literatura (1) 1. Aho A. V., Sethi R., Ullman J. D.: Compilers. Principles, Techniques and Tools, Addison-Wesley,

Bardziej szczegółowo

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka 1. Kompilacja aplikacji konsolowych w środowisku programistycznym Microsoft Visual Basic. Odszukaj w menu startowym systemu

Bardziej szczegółowo

Wprowadzenie do programowania w VBA

Wprowadzenie do programowania w VBA Wprowadzenie do programowania w VBA Spis treści Struktura programu... 1 Typy danych... 2 Deklaracja zmiennych i stałych... 2 Deklaracja tablic... 3 Instrukcja przypisania... 3 Wprowadzanie danych... 3

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

Języki i operacje na językach. Teoria automatów i języków formalnych. Definicja języka

Języki i operacje na językach. Teoria automatów i języków formalnych. Definicja języka Języki i operacje na językach Teoria automatów i języków formalnych Dr inŝ. Janusz Majewski Katedra Informatyki Definicja języka Definicja języka Niech Σ będzie alfabetem, Σ* - zbiorem wszystkich łańcuchów

Bardziej szczegółowo

Podstawy Kompilatorów

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

Bardziej szczegółowo

Ćwiczenia nr 11. Translatory. Wprowadzenie teoretyczne

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

Bardziej szczegółowo

Obliczanie. dr hab. inż. Joanna Józefowska, prof. PP 1

Obliczanie. dr hab. inż. Joanna Józefowska, prof. PP 1 Obliczanie 1 Obliczanie Co to jest obliczanie? Czy wszystko można obliczyć? Czy to, co intuicyjnie uznajemy za obliczalne można obliczyć za pomocą mechanicznej procedury? 2 Czym jest obliczanie? Dawid

Bardziej szczegółowo

Matematyczne Podstawy Informatyki

Matematyczne Podstawy Informatyki Matematyczne Podstawy Informatyki dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Rok akademicki 2013/2014 Automat ze stosem Automat ze stosem to szóstka

Bardziej szczegółowo

Generator YACC: gramatyki niejednoznaczne

Generator YACC: gramatyki niejednoznaczne Plan wykładu Generator YACC: gramatyki niejednoznaczne Wojciech Complak Wojciech.Complak@cs.put.poznan.pl gramatyki jednoznaczne i niejednoznaczne zalety gramatyk niejednoznacznych opisywanie łączności

Bardziej szczegółowo

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc. Zmienne powłoki Zmienne powłoki (shell variables) to tymczasowe zmienne, które mogą przechowywać wartości liczbowe lub ciągi znaków. Związane są z powłoką, Przypisania wartości do zmiennej następuje poprzez

Bardziej szczegółowo

typ zakres sposob zapamietania shortint integer bajty (z bitem znaku) longint byte word

typ zakres sposob zapamietania shortint integer bajty (z bitem znaku) longint byte word Pascal - powtórka Alfabet, Nazwy W odróŝnieniu do C w Pascal nie odróŝnia małych i duŝych liter. Zapisy ALA i ala oznaczają tę samą nazwę. Podobnie np. słowo kluczowe for moŝe być zapisane: FOR. W Pascalu

Bardziej szczegółowo

JĘZYKI FORMALNE I METODY KOMPILACJI

JĘZYKI FORMALNE I METODY KOMPILACJI Stefan Sokołowski JĘZYKI FORMALNE I METODY KOMPILACJI Inst Informatyki Stosowanej, PWSZ Elbląg, 2015/2016 JĘZYKI FORMALNE reguły gry Wykład1,str1 Zasadnicze informacje: http://iispwszelblagpl/ stefan/dydaktyka/jezform

Bardziej szczegółowo

JIP. Analiza składni, gramatyki

JIP. Analiza składni, gramatyki JIP Analiza składni, gramatyki Książka o różnych językach i paradygmatach 2 Polecam jako obowiązkową lekturę do przeczytania dla wszystkich prawdziwych programistów! Podsumowanie wykładu 2 3 Analiza leksykalna

Bardziej szczegółowo

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania. IŚ ćw.8 JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania. Skrypty JavaScript są zagnieżdżane w dokumentach HTML. Skrypt JavaScript

Bardziej szczegółowo

Języki formalne i techniki translacji

Języki formalne i techniki translacji Języki formalne i techniki translacji Laboratorium - Projekt Termin oddania: ostatnie zajęcia przed 17 stycznia 2016 Wysłanie do wykładowcy: przed 23:59 28 stycznia 2016 Używając BISON-a i FLEX-a napisz

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy. PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy. 1. Instrukcję case t of... w przedstawionym fragmencie programu moŝna zastąpić: var t : integer; write( Podaj

Bardziej szczegółowo

Lingwistyka Matematyczna Języki formalne i gramatyki Analiza zdań

Lingwistyka Matematyczna Języki formalne i gramatyki Analiza zdań Katedra Informatyki Stosowanej Politechnika Łódzka Lingwistyka Matematyczna Języki formalne i gramatyki Analiza zdań dr hab. inŝ. Lidia Jackowska-Strumiłło Historia rozwoju języków programowania 1955 1955

Bardziej szczegółowo

Symbol, alfabet, łańcuch

Symbol, alfabet, łańcuch Łańcuchy i zbiory łańcuchów Teoria automatów i języków formalnych Dr inŝ. Janusz Majewski Katedra Informatyki Symbol, alfabet, łańcuch Symbol Symbol jest to pojęcie niedefiniowane (synonimy: znak, litera)

Bardziej szczegółowo

Języki formalne i automaty Ćwiczenia 6

Języki formalne i automaty Ćwiczenia 6 Języki formalne i automaty Ćwiczenia 6 Autor: Marcin Orchel Spis treści Spis treści... 1 Wstęp teoretyczny... 2 Wyrażenia regularne... 2 Standardy IEEE POSIX Basic Regular Expressions (BRE) oraz Extended

Bardziej szczegółowo

Analiza leksykalna i generator LEX

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

Bardziej szczegółowo

JAO - Wprowadzenie do Gramatyk bezkontekstowych

JAO - Wprowadzenie do Gramatyk bezkontekstowych JAO - Wprowadzenie do Gramatyk bezkontekstowych Definicja gramatyki bezkontekstowej Podstawowymi narzędziami abstrakcyjnymi do opisu języków formalnych są gramatyki i automaty. Gramatyka bezkontekstowa

Bardziej szczegółowo

Metody Kompilacji Wykład 3

Metody Kompilacji Wykład 3 Metody Kompilacji Wykład 3 odbywa się poprzez dołączenie zasad(reguł) lub fragmentów kodu do produkcji w gramatyce. Włodzimierz Bielecki WI ZUT 2 Na przykład, dla produkcji expr -> expr 1 + term możemy

Bardziej szczegółowo

Programowanie deklaratywne

Programowanie deklaratywne Programowanie deklaratywne Artur Michalski Informatyka II rok Plan wykładu Wprowadzenie do języka Prolog Budowa składniowa i interpretacja programów prologowych Listy, operatory i operacje arytmetyczne

Bardziej szczegółowo

GRAMATYKI BEZKONTEKSTOWE

GRAMATYKI BEZKONTEKSTOWE GRAMATYKI BEZKONTEKSTOWE PODSTAWOWE POJĘCIE GRAMATYK Przez gramatykę rozumie się pewien układ reguł zadający zbiór słów utworzonych z symboli języka. Słowa te mogą być i interpretowane jako obiekty językowe

Bardziej szczegółowo

3 Przygotował: mgr inż. Maciej Lasota

3 Przygotował: mgr inż. Maciej Lasota Laboratorium nr 3 1/8 Język C Instrukcja laboratoryjna Temat: Instrukcje warunkowe, pętle. 3 Przygotował: mgr inż. Maciej Lasota 1) Instrukcje warunkowe. Instrukcje warunkowe pozwalają zdefiniować warianty

Bardziej szczegółowo

Cyfrowy zapis informacji

Cyfrowy zapis informacji F1-1 Cyfrowy zapis informacji Alfabet: uporządkowany zbiór znaków, np. A = {a,b,..., z} Słowa (ciągi) informacyjne: łańcuchy znakowe, np. A i = gdtr Długość słowa n : liczba znaków słowa, np. n(sbdy) =

Bardziej szczegółowo

Języki, automaty i obliczenia

Języki, automaty i obliczenia Języki, automaty i obliczenia Wykład 12: Gramatyki i inne modele równoważne maszynom Turinga. Wstęp do złożoności obliczeniowej Sławomir Lasota Uniwersytet Warszawski 20 maja 2015 Plan 1 Gramatyki 2 Języki

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 Cel wykładu Programowanie imperatywne i język C Zaprezentować paradygmat programowania imperatywnego

Bardziej szczegółowo

Lekcja 1. Składnia języka zmienne i podstawowe instrukcje PHP. Do wyświetlania tekstu służy instrukcja echo echo Hello world ;

Lekcja 1. Składnia języka zmienne i podstawowe instrukcje PHP. Do wyświetlania tekstu służy instrukcja echo echo Hello world ; Do wyświetlania tekstu służy instrukcja echo echo Hello world ; PHP język ze słabą kontrolą typów. W języku php w przeciwieństwie do c++ nie musimy podawać typu zmiennej podczas jej deklaracji. Tworzenie

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Przetwarzanie tekstu 2. Operacje na plikach tekstowych w systemie Linux

Przetwarzanie tekstu 2. Operacje na plikach tekstowych w systemie Linux Przetwarzanie tekstu 2 Operacje na plikach tekstowych w systemie Linux filtry programy przetwarzajace pliki (w szczególności tekstowe) w taki sposób, że odczytuja dane (plik wejściowy) ze standardowego

Bardziej szczegółowo

ForPascal Interpreter języka Pascal

ForPascal Interpreter języka Pascal Akademia Podlaska w Siedlcach Wydział Nauk Ścisłych Instytut Informatyki ForPascal Interpreter języka Pascal Przedmiot: Sieci i Systemy Wirtualne Informatyka IV Prowadzący: dr Krzysztof Trojanowski Grupa:

Bardziej szczegółowo

Podstawy i języki programowania

Podstawy i języki programowania Podstawy i języki programowania Laboratorium 3 - operatory oraz instrukcje warunkowe i wyboru mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 19 października 2018 1 / 35 mgr inż. Krzysztof

Bardziej szczegółowo

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak Katedra Elektrotechniki Teoretycznej i Informatyki wykład 12 - sem.iii M. Czyżak Język C - preprocesor Preprocesor C i C++ (cpp) jest programem, który przetwarza tekst programu przed przekazaniem go kompilatorowi.

Bardziej szczegółowo

Programowanie Delphi obliczenia, schematy blokowe

Programowanie Delphi obliczenia, schematy blokowe Informatyka II MPZI2 ćw.2 Programowanie Delphi obliczenia, schematy blokowe Zastosowania obliczeń numerycznych Wyrażenia arytmetyczne służą do zapisu wykonywania operacji obliczeniowych w trakcie przebiegu

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Podstawowe konstrukcje programistyczne Paweł Daniluk Wydział Fizyki Jesień 2014 P. Daniluk (Wydział Fizyki) WP w. II Jesień 2014 1 / 38 Przypomnienie Programowanie imperatywne Program

Bardziej szczegółowo

Aproksymacja funkcji a regresja symboliczna

Aproksymacja funkcji a regresja symboliczna Aproksymacja funkcji a regresja symboliczna Problem aproksymacji funkcji polega na tym, że funkcję F(x), znaną lub określoną tablicą wartości, należy zastąpić inną funkcją, f(x), zwaną funkcją aproksymującą

Bardziej szczegół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

Składnia rachunku predykatów pierwszego rzędu

Składnia rachunku predykatów pierwszego rzędu Początek Gramatyka Kwantyfikatory Poprawność Logika obliczeniowa Instytut Informatyki Początek Gramatyka Kwantyfikatory Poprawność Plan wykładu 1 Na (dobry) początek Zrozumieć słowa Oswoić znaki 2 Gramatyka

Bardziej szczegółowo

Algorytmy od problemu do wyniku

Algorytmy od problemu do wyniku Algorytmy Etapy tworzenia programu: 1) Sformułowanie zadania analiza problemu. 2) Opracowanie algorytmu sposób rozwiązania. 3) Zapisanie algorytmu w języku programowania kodowanie programu. 4) Kompilowanie

Bardziej szczegółowo

Literatura. adów w cyfrowych. Projektowanie układ. Technika cyfrowa. Technika cyfrowa. Bramki logiczne i przerzutniki.

Literatura. adów w cyfrowych. Projektowanie układ. Technika cyfrowa. Technika cyfrowa. Bramki logiczne i przerzutniki. Literatura 1. D. Gajski, Principles of Digital Design, Prentice- Hall, 1997 2. C. Zieliński, Podstawy projektowania układów cyfrowych, PWN, Warszawa 2003 3. G. de Micheli, Synteza i optymalizacja układów

Bardziej szczegółowo

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5. Operatory w Javie W Javie występują następujące typy operatorów: Arytmetyczne. Inkrementacji/Dekrementacji Przypisania. Porównania. Bitowe. Logiczne. Pozostałe. Operacje wykonywane są na operandach (argumentach

Bardziej szczegółowo

PRZEWODNIK PO PRZEDMIOCIE

PRZEWODNIK PO PRZEDMIOCIE Nazwa przedmiotu: Algorytmy i programowanie Algorithms and Programming Kierunek: Zarządzanie i Inżynieria Produkcji Rodzaj przedmiotu: kierunkowy Poziom studiów: studia I stopnia forma studiów: studia

Bardziej szczegółowo

Języki formalne i automaty Ćwiczenia 9

Języki formalne i automaty Ćwiczenia 9 Języki formalne i automaty Ćwiczenia 9 Autor: Marcin Orchel Spis treści Spis treści... 1 Wstęp teoretyczny... 2 Maszyna Mealy'ego... 2 Maszyna Moore'a... 2 Automat ze stosem... 3 Konwersja gramatyki bezkontekstowej

Bardziej szczegółowo

Podstawy programowania w języku C

Podstawy programowania w języku C Podstawy programowania w języku C WYKŁAD 1 Proces tworzenia i uruchamiania programów Algorytm, program Algorytm przepis postępowania prowadzący do rozwiązania określonego zadania. Program zapis algorytmu

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

skrypt powłoki to plik tekstowy, rozpoczynający się sekwencją: pierwsza linia określa powłokę, w której wykonywany jest skrypt; druga to komentarz

skrypt powłoki to plik tekstowy, rozpoczynający się sekwencją: pierwsza linia określa powłokę, w której wykonywany jest skrypt; druga to komentarz Ćwiczenie 6 Skrypty powłoki - programowanie w powłoce bash 1. Cel ćwiczenia Celem ćwiczenia jest poznanie możliwości powłoki bash od strony programistycznej. System UNIX (Linux) pozwala tworzyć skrypty,

Bardziej szczegółowo