Języki i gramatyki. Języki i gramatyki formalne. Języki i gramatyki formalne. Języki i gramatyki formalne. Gramatyki formalne

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

Download "Języki i gramatyki. Języki i gramatyki formalne. Języki i gramatyki formalne. Języki i gramatyki formalne. Gramatyki formalne"

Transkrypt

1 Języki i gramatyki formalne Języki i gramatyki 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 opis konstrukcji. Języki i gramatyki formalne Języki i gramatyki formalne Alfabet V = {v 0,..., v n } dowolny skończony i niepusty zbiór symboli (liter), z których będą zestawiane słowa języka Słowo nad alfabetem V wszystkie skończone, uporządkowane ciągi złożone z elementów alfabetu. Słowo puste ε słowo nie mające żadnej litery Jeśli V= {a}, to V*= {ε,{ a, aa, aaa, } Jeśli V={a,b}, to V*={ε, a, b, aa, ab, bb, aaa, aab, } Długość słowa liczba jego liter Języki i gramatyki formalne Język uniwersalny V* zbiór wszystkich słów nad alfabetem V Język dowolny podzbiór języka uniwersalnego V* nad V Syntaktyka (składnia) języka reguły budowy zdań w języku Semantyka języka interpretacja tych reguł, zasady stosowania składni Gramatyki formalne Gramatyka - wyodrębnia język konkretny z języka uniwersalnego: gramatyka generacyjna - zbiór reguł umożliwiających generowanie słów danego języka z liter alfabetu; gramatyka analityczna - podaje jak rozróżnia słowa poprawnie zbudowane od niepoprawnych.

2 Przykład gramatyki generacyjnej Gramatyka generująca słowa: aaaab, bbbb, a, b, Alfabet = { a, b }; Reguła : a jest poprawne (tzn. słowo złożone z a jest poprawne). Reguła 2: jeżeli a jest poprawne to ab też jest poprawne. Przykłady poprawnych słów: a - na podstawie Reguły. aab na podstawie Reguły i Reguły 2. aaabb - na podstawie Reguły i dwukrotnej Reguły 2. Symbol początkowy: Produkcje: (reguły zastępowania) Produkcje i wywód V* = {,,,... } ) 2) S S S S Wywód: : S : S 2 S 2 S ) 2) 3) 4) 5) Inne produkcje S AB A A A B 0 B B 0 Wywód: 0: S AB 2 B : Gramatyka kombinatoryczna Noama Chomsky'ego Gramatykę Chomsky'ego określa związek 4 elementów: G = < V, T, P, S > V skończony zbiór symboli pomocniczych (zwanych czasem nieterminalnymi lub nieterminalami) T skończony zbiór symboli końcowych (zwanych czasem terminalnymi lub terminalami), P zbiór produkcji, S symbol startowy (aksjomat), z niego wyprowadzane są wszystkie generowane przez gramatyk G napisy. Gramatyka kombinatoryczna Noama Chomsky'ego Gramatyka Pojedynczą produkcję interpretujemy jako możliwość zastąpienia symbolu pomocniczego przez słowo, w skład którego mogą wchodzić zarówno symbole pomocnicze, jak i końcowe. Proces wyprowadzania słów języka zdefiniowanego przez gramatykę odbywa się w taki sposób, że zaczynamy od symbolu S i do poszczególnych symboli pomocniczych stosujemy którąś z produkcji ze zbioru P tak długo, aż wszystkie symbole pomocnicze znikną. S AB A A A B 0 B B 0 Symbol początkowy

3 Gramatyka Gramatyka S AB A A A B 0 B B 0 Symbol początkowy Symbole nieterminalne V = {S, A, B} S AB A A A B 0 B B 0 Symbol początkowy Symbole nieterminalne V = {S, A, B} Symbole terminalne T = {0, } S AB A A A B 0 B B 0 Gramatyka Symbol początkowy Symbole nieterminalne V = {S, A, B} Symbole terminalne T = {0, } Produkcje Przykłady gramatyk Jeśli w trakcie wywodu słowa s pojawia się kilka identycznych symboli pomocniczych, to każdy z nich może e samodzielnie decydować o tym, co z siebie wyprodukować. Przykład Gramatyka generująca wszystkie parzyste słowa s złożone one z samych liter (uwaga słowo s puste jest słowem o parzystej długod ugości!): G =<{S}, {a}, {S ε, S aas}, S> Przykłady gramatyk Przykład 2 Gramatyka generująca wszystkie parzyste palindromy nad dwuelementowym alfabetem G 2 =<{S}, {a}, {S ε, S asa, S bsb}, S> Język generowany przez gramatykę To, co zostanie, czyli słowo złożone z samych symboli końcowych, nazywamy słowem wyprowadzalnym z gramatyki. Zbiór wszystkich słów wyprowadzalnych z danej gramatyki nazywa się językiem generowanym przez gramatykę.

4 Język generowany przez gramatykę Język generowany przez gramatykę G jest to zbiór wszystkich możliwych słów powstałych na bazie listy produkcji i wyprowadzonych z symbolu startowego języka L(G)={x: x V* S x} Gdzie: V* zbiór r wszystkich możliwych słóws proces wywodu słowa x z symbolu startowego S na podstawie listy produkcji P Przykład gramatyki generującej język L={a n b n c n d n, n=, 2,..} Szukana gramatyka: G = < V, T, P, S > V = { S, B, D, E } T = { a, b, c, d} P = { r,,, r 9 } Lista produkcji: r : S abde r 2 : S abcd r 3 : B abde r 4 : B abc r 5 : bd bbc r 6 : cd Dc r 7 : ED DE r 8 : ce cdd r 9 : de dd Przykład wywodu słowa s aaabbbcccddd Wywód 3: Przykład wywodu słowa s aaabbbcccddd Teraz nie osiągnęliśmy symboli końcowych. Ta gramatyka nie jest przydatna do definiowania języka programowania. Klasyfikacja Chomsky ego Klasyfikacja Chomsky ego W teorii Chomsky ego wyróżnia się cztery typy gramatyk. Wyodrębnia się je przez nakładanie adanie kolejno coraz silniejszych ograniczeń na układ reguł P Gramatyka klasy 0 charakteryzuje się tym, że wszystkie produkcje mają postać: u w, gdzie u u V* \ { ε }, w V* Gramatyka klasy (kontekstowa) charakteryzuje się tym, że e wszystkie produkcje mają postać: uaw ubw, gdzie: u,w V*,, A S, b V* \ { ε } Gramatyka klasy 2 (bezkontekstowa( bezkontekstowa) w układzie reguł P dopuszcza się jedynie reguły y postaci: A b, gdzie A S, b V* \ { ε }

5 Klasyfikacja Chomsky ego Klasyfikacja Chomsky ego Gramatyka klasy 3 (regularna, liniowa) w układzie reguł P dopuszcza reguły y postaci: A bb,, albo A Bb, gdzie A S, B S { ε }, b T* \ { ε } Każda gramatyka klasy i jest jednocześnie nie gramatyką klasy j dla 0 j i Każdy zbiór r ciągów wywodliwych zgodnie z gramatyką klasy i jest jednocześnie nie zbiorem ciągów wywodliwych zgodnie z gramatyką niższych klas. Odwrotne twierdzenie nie jest prawdziwe. Im wyższa klasa gramatyki tym mniej precyzyjnie określa się rozmaitość wywodliwych ciągów. Klasyfikacja Chomsky ego Gramatyki klasy 0 Gramatyki kontekstowe Gramatyki bezkontekstowe Gramatyki liniowe Ilustracja poszczególnych gramatyk Jako ilustrację do poszczególnych gramatyk rozpatrzymy przykład ciągów: aaa bbb ccc W skrócie będziemy je oznaczać a k b l c m Ilustracja poszczególnych gramatyk Nie nakładamy żadnych ograniczeń na wartości k, l, m Można znaleźć prawostronnie regularną gramatykę G = < V, T, P, S > generującą szukany ciąg: V = { a, b, c } T = { S, V, U} P = { r,,, r 6 } Lista produkcji: r : S as r 2 : S av r 3 : V bv r 4 : V bu r 5 : U cu r 6 : U c Ilustracja poszczególnych gramatyk Dla ciągów ograniczonych, gdzie k = m nie można zbudować gramatyki regularnej Ciągi można określić przez gramatykę bezkontekstową G = < V, T, P, S > : V = { a, b, c } T = { S, V} P = { r,,, r 4 } Lista produkcji: r : S asc r 3 : V Vb r 2 : S avc r 4 : V b

6 Ilustracja poszczególnych gramatyk Zdefiniowanie ciągów o jednakowej liczbie wystąpień dla każdej z liter (k = l = m) wymaga gramatyki kontekstowej lub gramatyki klasy 0, np. G = < V, T, P, S > : V = { a, b, c } T = { S, U } P = { r,,, r 4 } Lista produkcji: r : S abc r 3 : cu Uc r 2 : S asuc r 4 : bu bb Notacja Backusa-Naura (BNF) Umożliwia opisanie gramatyki bezkontekstowej, w sposób w sposób alternatywny do algebraicznego zapisu. Podstawowe konwencje notacji BNF: symbole nieterminalne: symbole zamknięte w nawiasy < > "strzałka" reguły: symbol ::= alternatywne wyprowadzenia: rozdzielone pionową kreską opcjonalne elementy: zamknięte w nawiasy [ ] jedno- lub wielokrotne powtórzenie: { } n zerowe, jedno lub wiele powtórzeń: { } n 0 połączenie : { } Przykład notacji algebraicznej Gramatyka G = < V, T, P, S > generująca proste wyrażenia arytmetyczne V = {a, b, d, +, *, (, )} T = {W, K, C} Semantyka powyższych symboli jest następująca: W wyrażenie; K - składnik, C czynnik; Symbol startowy S: S = W P = { r,,, r 0 } Lista produkcji: r : W K r 2 : W W + K r 3 : W K + W r 4 : K C r 5 : S C * K r 6 : S K * C r 7 : C a r 8 : C b r 9 : C d 0 : C ( W ) r 0 Przykład notacji BNF Gramatyka G = < V, T, P, S > generująca proste wyrażenia arytmetyczne V = {a, b, d, +, *, (, )} T = {W, K, C} Semantyka powyższych symboli jest następująca: W wyrażenie; K - składnik, C czynnik; Symbol startowy S: S = W ::= <K> + <K> <K> + <K> ::= * <K> <K> * ::= ( ) a b d Symbole zapisane bez nawiasów < > i nie będące symbolami używanymi przez notację BNF są symbolami terminalnymi. Drzewa rozbioru Drzewa rozbioru Historię wyprowadzeń słowa w danej gramatyce możemy zapisać za pomocą drzewa wywodu (nazywanego też drzewem rozbioru lub drzewem analizy składniowej). Wierzchołki drzewa rozbioru etykietuje się albo symbolami terminalnymi, albo kategoriami syntaktycznymi, albo symbolem ε. Liście są etykietowane jedynie symbolami terminalnymi lub symbolem ε. Wierzchołki wewnętrzne są etykietowane jedynie kategoriami syntaktycznymi. Każdy wierzchołek wewnętrzny v reprezentuje zastosowanie produkcji. Oznacza to, że kategoria syntaktyczna etykietująca wierzchołek v stanowi cześć nagłówkową produkcji. etykiety potomków wierzchołka v, od strony lewej do prawej, tworzą cześć zasadniczą tej produkcji.

7 Przykład drzewa rozbioru Rozpatrzmy gramatykę G=(V,T,P,S), V = {S,A} T = {a,b} P = { r,,, r 5 } Lista produkcji: r : S aas r 2 : S a r 3 : A SbA r 4 : A SS r 5 : A ba Wywód dla tej gramatyki: r r 3 r 2 r 5 r 2 S aas asbas aabas aabbas aabbaa Przykład drzewa rozbioru S ::= aas a A ::= SbA SS ba S aas asbas aabas aabbas aabbaa S a A S S b A a a b a Przykład drzewa rozbioru Drzewo rozbioru dla ciągu znaków 3 * (2 + 4) przy użyciu gramatyki zdefiniowanej poniżej: <Cyfra> <Liczba> <Cyfra> <Liczba> <Liczba> <Cyfra> 3 <Wyrażenie> <Liczba> <Wyrażenie> ( < Wyrażenie> ) <Wyrażenie> <Wyrażenie> + <Wyrażenie> <Wyrażenie> <Wyrażenie> - <Wyrażenie> <Wyrażenie> <Wyrażenie> * <Wyrażenie> <Wyrażenie> <Wyrażenie> / <Wyrażenie> < W > < W > < W > * ( ) < W > < W > + < W > 2 4 Etapy konstruowania drzewa rozbioru 3*(2+4) (a) Konstruujemy jednowierzchołkowe drzewo dla każdego symbolu terminalnego w drzewie. Używamy produkcji <Cyfra> Etapy konstruowania drzewa rozbioru 3*(2+4) (b) Określamy że cyfry są liczbami. Używamy produkcji <Liczba> <Cyfra> Etapy konstruowania drzewa rozbioru 3*(2+4) (c) Określamy że cyfr i liczba jest liczba. Wynikiem drzewa jest 4. Używamy produkcji <Liczba> <Liczba> <Cyfra> 2 3 4

8 Etapy konstruowania drzewa rozbioru 3*(2+4) (d) Tworzymy drzewa rozbioru dla wyrażeń 3, 2, 4. Używamy produkcji: <Wyrażenie> <Liczba> < W> 3 < W> 2 < W > 4 Etapy konstruowania drzewa rozbioru 3*(2+4) (e) Tworzymy drzewo dla sumy Używamy produkcji <Wyrażenie> <Wyrażenie> + <Wyrażenie> < W> 2 < W > + < W > 4 Etapy konstruowania drzewa rozbioru 3*(2+4) Etapy konstruowania drzewa rozbioru 3*(2+4) (f) Tworzymy drzewo dla sumy (2 + 4). Używamy produkcji: <Wyrażenie> ( <Wyrażenie> ) < W > ( < W > ) < W> + < W > < W > < W > < W > * ( ) < W > 3 < W > + < W > 2 4 (g) Tworzymy drzewo 3* (2 + 4). Używamy produkcji: <Wyrażenie> <Wyrażenie> * (<Wyrażenie> ) 2 4 Uzasadnienie poprawności konstrukcji drzew rozbioru Można udowodnić, że wyniki drzew rozbioru o korzeniu <S> odpowiadają dokładnie ciągom znaków języka L(<S>) dla dowolnej kategorii syntaktycznej <S>. To znaczy:. Jeżeli T jest drzewem rozbioru o korzeniu zaetykietowanym przez <S> i daje ono wynik s, to ciąg s należy do języka L(<S>). 2. Jeżeli ciąg s należy do języka L(<S>), to istnieje drzewo rozbioru dające wynik s oraz posiadające korzeń zaetykietowany przez <S>. Czy (a + b ) * d jest prostym wyrażeniem arytmetycznym? Lista produkcji: r: W S r2: W W + S r3: W S + W r4: S C r5: S C * S r6: S S * C r7: C a r8: C b r9: C d r0: C ( W )

9 Drzewa rozbioru i drzewa wyrażeń Mając sformułowaną gramatykę wyrażeń możemy drzewa rozbioru przekonwertować na drzewa wyrażeń, dokonując trzech transformacji:. Wierzchołki związane z poszczególnymi operandami niepodzielnymi są łączone w jeden wierzchołek zaetykietowany danym operandem 2. Operatory zostają przesunięte z liści do ich wierzchołków nadrzędnych. To znaczy symbol operatora, taki jak +, staje się etykietą wierzchołka umieszczonego nad nim, który wcześniej był zaetykietowany kategoria syntaktyczna wyrażenia. 3. Wierzchołki wewnętrzne, których etykietami wciąż są wyrażenia zostają usunięte. drzewo rozbioru < W > < W > < W > * ( ) < W > 3 < W > + < W > 2 4 drzewo wyrażeń 3 * ( + ) 2 4 Niejednoznaczność i projektowanie gramatyk Rozważmy gramatykę: G = < {S}, {a,b}, {S ::= SaS b}, S > Za pomocą tej gramatyki możemy wygenerować dowolną naprzemienną sekwencję liter a oraz b zaczynającą się i kończącą na literę b. Na ile sposobów można otrzymać słowo babab? W notacji liniowej tych sposobów jest 2, np.: S SaS SaSaS SaSab basab babab S SaS Sab SaSab Sabab babab Niejednoznaczność i projektowanie gramatyk Istnieją dwa drzewa wywodu tego słowa: S SaS SaSaS SaSab basab babab S S a S S a S b b b Niejednoznaczność i projektowanie gramatyk Istnieją dwa drzewa wywodu tego słowa: S SaS Sab SaSab Sabab babab S S a S b S a S Niejednoznaczność i projektowanie gramatyk Można gramatykę tak skonstruować, żeby słowo babab, podobnie jak i każde inne generowane przez powyższą gramatykę, miało tylko jedno drzewo wywodu. Oto ta gramatyka: G = < {S}, {a,b}, {S ::= ε, S ::= bas b}, S > Taka gramatyka ma już tylko jedno drzewo wywodu dla słowa babab. b b

10 Niejednoznaczność i projektowanie gramatyk Gramatyka G jest jednoznaczna, jeśli każde słowo wyprowadzalne z G ma tylko jedno drzewo wywodu. Gramatyka w której istnieją dwa lub więcej drzewa rozbioru o tym samym wyniku oraz tej samej kategorii syntaktycznej etykietującej korzeń jest nazywana gramatyką niejednoznaczną. Wystarczy żeby istniał choć jeden taki ciąg który jest niejednoznaczny. Powiemy, że gramatyka G jest zgodna z językiem L T*, jeśli każde słowo wyprowadzalne z G należy do L. Powiemy, że gramatyka G jest pełna względem języka L, jeśli wszystkie słowa należące do L są wyprowadzalne z G. Niejednoznaczność gramatyk wyrażeń może być poważnym problemem. Niektóre drzewa rozbioru mogą dawać złe wartości dla wyrażeń. Dwa drzewa rozbioru dla wyrażenia: <L> + <L> <L> 2 Poprawne drzewo rozbioru -2+3 = 2 3 <L> - <L> 2 + <L> Niepoprawne drzewo rozbioru -2+3=-4 3 Niejednoznaczność gramatyk + <L> <L> * <L> 3 2 Niepoprawne drzewo rozbioru + 2 * 3 = 9 <L> + * <L> 2 <L> 3 Poprawne drzewo rozbioru + 2 * 3 = 7 + <S> - <S> <Cz> <L> <Cz> <L> 2 <S> <Cz> <L> 3 Poprawne drzewo rozbioru Poprawne drzewo rozbioru + 2 * 3 <S> <Cz> <L> + <S> <Cz> <L> 2 <S> * <Cz> <L> 3 Istota niejednoznaczności Analizator składniowy który konstruuje drzewa rozbioru dla programów stanowi podstawowy element kompilatora. Jeżeli gramatyka opisująca język programowania jest niejednoznaczna, oraz jeżeli jej niejednoznaczności są wyprowadzone jednostronnie, to w przypadku przynajmniej części programów istnieje więcej niż jedno drzewo rozbioru. Jeżeli gramatyka programu jest niejednoznaczna, kompilator nie może podjąć prawidłowej decyzji odnośnie do drzewa rozbioru dla pewnych programów, a w związku z tym nie może zdecydować, jakie działania powinien wykonać program w języku maszynowym. Kompilatory muszą korzystać ze specyfikacji które są jednoznaczne. Języki generowane przez gramatyki klasy rekurencyjnie przeliczalne, kontekstowe, 2 bezkontekstowe, 3 regularne.

11 Zadania Dana jest gramatyka G = <V,T,P,,P,S>: V = { S, A, B } T = { a, b, c } Produkcje: B aa B Sb A cab S c Przedstawić wyw abcbacabbaa. A BaA S ababb owa wywód d i drzewo wywodu słowa s S ababb abbaabb absbaabb abcbaabb abcbacabbb abcbacabba Zadania Zdefiniować gramatykę G generującą liczby całkowite. Liczba składa się z niepustego ciągu cyfr i może zawierać znak. V = {0,,2,3,4,5,6,7,8,9,+,-} T = { LC, L, C, Z} Produkcje: <LC> ::= <Z><L> <L> <L> ::= <L> ::= <Z> ::= + - S = LC Dany jest język j L(G): G = <V,T,P,,P,S> V = { S, A } T = { a, b } Produkcje: S aas a Zadania A SbA SS ba Czy słowo s aabbaa należy y do języka? j Aby słowo s należało o do języka j należy y udowodnić, że Słowo jest wyprowadzalne z S Słowo to musi należeć do T Zadania Dany jest język j L(G): G = <V,T,P,,P,S> T = {a,b{ a,b,,z,+,(,),*} V = {W,S,C{ W,S,C} Produkcje: ::= +<S< W>+<S> <S> <S> ::= <S>* < S>* <C ::= () a b c... z S = W Czy słowo: s (((a+b * d) * d + a)) + a+b+d jest słowem poprawnym języka j L(G) )? Zadania Dany jest język j L(G): G = <V,T,P,,P,S> T = {a,b{ a,b,,z,+,(,),*} V = {W,S,C{ W,S,C} Produkcje: ::= +<S< W>+<S> <S> <S> ::= <S>* < S>* <C ::= () a b c... z S = W Czy słowo: s (((a+b * d) * d + a)) + a+b+d jest słowem poprawnym języka j L(G) )? Translacja W praktyce informatycznej często zachodzi konieczność tłumaczenia tekstu zapisanego w jednym języku formalnym na inny język (np. przetworzenie tekstu zapisanego w języku wysokiego poziomu na kod maszynowy) Proces tłumaczenia nosi nazwę translacji. Translacja to przekład tekstów zredagowanych w jednym języku zwanym źródłowym na równoważny semantycznie tekst w innym języku zwanym wynikowym.

12 Translacja Translacja W przypadku gdy dany język wysokiego poziomu ma stosunkowo łatwą gramatykę, translacja może być wykonana samoczynnie przez maszynę cyfrową przy pomocy specjalnego programu translacji zwanego translatorem. Translatory dzielimy zazwyczaj na dwie kategorie: kompilatory interpretatory. Translacja Kompilator jest translatorem, operującym na całym tekście programu źródłowego generując tekst przekładu jako całość Interpreter operuje na poszczególnych jednostkach syntaktycznych programu źródłowego i generuje ich przekłady. Translacja Jeśli wykonywamy program początkowo zapisany w języku zewnętrznym to używając kompilatora: możemy przystąpić do wykonania programu w postaci docelowej dopiero po zakończeniu translacji. Oznacza to, że uzyskany tekst będący przekładem tekstu źródłowego w całości wprowadzany jest do maszyny cyfrowej; Translacja Translacja Jeśli wykonywamy program początkowo zapisany w języku zewnętrznym to używając interpretatora: możemy wykonywać przekłady poszczególnych jednostek syntaktycznych, nie czekając na cały proces translacji. Oznacza to, że cały czas operujemy na tekście źródłowym tłumacząc tylko te jednostki syntaktyczne, które są potrzebne aby poszczególny fragment programu mógł zadziałać.

13 Translacja W praktyce rzadko dokonuje się bezpośredniej translacji programów z języka zewnętrznego na język maszynowy. Najczęściej stosuje się proces pośredni to znaczy, najpierw dokonuje się translacji z języka zewnętrznego na język asemblerowy, a potem z języka asemblerowego na język maszynowy. Zastosowanie takiej dwuetapowej translacji niesie za sobą wiele zalet, m.in. możliwość łączenia poszczególnych części programów zapisanych w różnych językach zewnętrznych. Schematyczny przebieg powstawania programu algorytm programowanie programowanie w języku wysokiego poziomu kompilacja program w języku symbolicznym kod maszynowy pomysł programista (człowiek) algorytm oprogramowany kompilator (program) komputer Stos i ONP Bardzo ważnymi pojęciami bez których trudne byłoby zrozumienie zasad jakiejkolwiek translacji są : stos odwrotna notacja polska (ONP). Stos Stos jest to organizacja sekwencyjna pamięci operacyjnej maszyny cyfrowej. Stos działa jak pojemnik określonych jednostek, przy czym pobieranie elementów w nim zgromadzonych odbywa się w kolejności odwrotnej do magazynowania. Jest to struktura LIFO Dla stosu określa się dwie podstawowe operacje: dopisz a na stosie - w wyniku wykonania tej operacji jednostka a zostaje umieszczona na szczycie stosu (staje się pierwszym elementem stosu) odczytaj a ze stosu - w wyniku wykonania tej operacji jednostka a zostaje wydana na zewnątrz stosu. Odwrotna Notacja Polska (ONP) jeden z wariantów beznawiasowego zapisu wyrażeń formalnych, wynalezionego przez polskiego logika Jana Łukasiewicza ( ). w tym beznawiasowym zapisie symbole operandów w poprzedzają bezpośrednio symbol operatora (notacja przyrostkowa) na przykład wyrażenie: a+b zapisujemy w ONP jako a b + Odwrotna Notacja Polska (ONP) Możemy wyróżni nić trzy rodzaje notacji: Infiksową : a + b Prefiksową: : + a b Postfiksową: : a b +

14 Odwrotna Notacja Polska (ONP) ze względu na łatwość obliczania wyrażeń zapisanych w ONP przy użyciu u stosu znalazła ona szerokie zastosowanie w arytmetyce komputerów Wyrażenia arytmetyczne w ONP Przykłady prostych wyrażeń arytmetycznych i odpowiadający im zapis w ONP:. ( a + b ) * d a b + d * 2. ( a + ( b * c ) ) a b c * + 3. ( ( a + b ) * ( z + x ) ) a b + z x + * 4. ( ( a + t ) * ( ( b + ( a + c ) ) ^ ( c + d ) ) ) a t + b a c + + c d + ^ * Gramatyka generująca wyrażenie arytmetyczne Gramatyka G = < V, T, P, S > generująca proste wyrażenia arytmetyczne, np. (a + b ) * d V = {a, b, d, +, *, (, )} T = {W, K, C} Semantyka powyższych symboli jest następująca: W wyrażenie; K - składnik, C czynnik; Symbol startowy S: S = W P = { r,,, r 0 } Lista produkcji i BNF Lista produkcji: r : W K r 2 : W W + K r 4 : K C r 5 : S C * K r 3 : W K + W r 6 : S K * C r 7 : C a r 8 : C b r 9 : C d r 0 : C ( W ) Zapis w notacji BNF: ::= <K> + <K> <K> + <K> ::= * <K> <K> * ::= ( ) a b d Wyrażenie arytmetyczne w ONP Zapis w notacji BNF: ::= <K> + <K> <K> + <K> ::= * <K> <K> * ::= ( ) a b d Gramatyka prostych wyrażeń arytmetycznych w ONP: ::= <O> <X> <X> ::= a b d <O> ::= + * Obliczanie wartości w ONP Pobieramy po kolei symbole wyrażenia od lewej strony do prawej; Jeżeli symbol jest liczbą (zmienną), to odkładamy go na stos; Jeżeli symbol jest opisem operacji - pobieramy dwa elementy ze stosu, wykonujemy te operacje, a wynik przesyłamy z powrotem na stos. Czynności te wykonujemy aż do wyczerpania się danych wejściowych. Obliczana wartość wyrażenia znajduje się na stosie.

15 Obliczanie wartości w ONP start pobierz symbol z lewej ku prawej ONP - przykład obliczania wartości Obliczyć wartość wyrażenia: * + Posługujemy się tabelką. Przedstawimy symbole pojawiające się kolejno na wejściu oraz zawartość stosu po każdym obiegu pętli głównej algorytmu obliczającego wyrażenie. argument T stos N N φ N T operator T pobierz argumenty ze stosu, wykonaj działanie, wynik na stos błąd KONIEC Obliczanie wartości wyrażenia - przykład Translacja wyrażeń arytmetycznych Obliczyć wartość wyrażenia: / * + 2 / Współczesne podejście translacji wyrażeń arytmetycznych polega na wydzieleniu dwu etapów translacji: translacja do ONP translacja ONP na język symboliczny Translacja wyrażeń arytmetycznych Translacja wyrażeń arytmetycznych W celu zobrazowania translacji do ONP przyjmujemy, że: źródłowy zapis wyrażeń arytmetycznych pojawia się na wejściu specjalnego automatu. na wyjściu uzyskamy zapis ONP tych wyrażeń, sam zaś automat wyposażony jest w pamięć stosową: Wyrażenie arytmetyczne Wyrażenie arytmetyczne Wyrażenie arytmetyczne Model automatu ze stosem do translacji wyrażeń arytmetycznych Podczas translacji wyrażeń arytmetycznych szczególnej analizie poddawane są symbole operacji (+,-,*,itp.) zwane ogranicznikami Wprowadza się dodatkowo listę priorytetów ograniczników Operator Funkcja (lg, sin, exp,...) Potęgowanie ( ) Mnożenie, dzielenie, negacja ( *, /, ) Dodawanie, odejmowanie (+, - ) Wzrost priorytetu Priorytet 0 2 3

16 Algorytm działania ania automatu do translacji Pobieramy kolejne znaki wyrażenia, które ma zostać przekształcone znak po znaku, począwszy od lewej strony. Dalsze postępowanie zależy od symbolu. Jeśli pobrany znak jest: argumentem, to należy przesłać go na wyjście, nawiasem otwierającym (, to należy położyć go na stos, nawiasem zamykającym ), to zawartość stosu, aż do napotkanego znaku ( należy przesłać na wyjście i usunąć nawias (, Algorytm działania ania automatu do translacji operatorem, to przeglądamy zawartość stosu w poszukiwaniu operatora o wyższym priorytecie : jeśli taki znajdziemy, to przesyłamy zawartość stosu na wyjście, zaś nowy operator wkładamy na stos, jeśli nie, operator odkładamy na stos. stos przeszukujemy do napotkania nawiasu ( lub do końca stosu, jeżeli nawias nie występuje. jeżeli nawias ( wystąpił i znaleźliśmy przed nim operator o wyższym priorytecie, to na wyjście trafia wszystko ze stosu do (, ale sam nawias zostaje na stosie, Algorytm działania ania automatu do translacji pobierz symbol z lewej ku prawej start znacznikiem końca wprowadzanego napisu, to kopiujemy zawartość stosu na wyjście, w przeciwnym wypadku sygnalizujemy błąd. Przetwarzanie kończymy w momencie napotkania znacznika końca napisu wejściowego. Nawiasów ( i ) nie kopiujemy na wyjście. błąd argument N φ T T wyjście N T ( stos N N ) operator N T T Zawartość stosu aż do ( na wyjście N Czy wyższy w stosie do ( lub dna T Stos na wyjście Zawartość stosu do ( lub do dna na wyjście, po czym operator na stos KONIEC stos Dokonać konwersji wyrażenia (((a))+b+d)*(d+e) na ONP Przykład konwersji () Dokonać konwersji wyrażenia na ONP Przykład konwersji (2) b * c + ( d - e*k ) Otrzymaliśmy na wyjściu ciąg: abd++de+* Otrzymaliśmy na wyjściu ciąg: b c d e k * - + *

17 Dokonać konwersji wyrażenia na ONP Przykład konwersji (3) ( ( a + b ) ( 3 * x + 7 * y ) ) Dokonać konwersji wyrażenia ( ( a + t ) * ( ( b + ( a + c ) ) ^ ( c + d ) ) ) na ONP Przykład konwersji (4) Otrzymaliśmy na wyjściu ciąg: a b + 3 x * 7 y * + - Otrzymaliśmy na wyjściu ciąg: a t + b a c + + c d + ^ * Generacje językj zyków Języki programowania można podzielić na pięć wyraźnie różniących się generacji (niektórzy mówią o czterech). W miarę jak zmieniał się komputer, wystąpiła konieczność dostarczania użytkownikowi narzędzi programistycznych, które umożliwiłyby mu maksymalne wykorzystanie sprzętu. Nie ma pełnej zbieżności chronologicznej między poszczególnymi generacjami języków i sprzętu. I generacja Programowanie pierwszych komputerów akceptujących zmianę oprogramowania odbywało się bezpośrednio w kodzie binarnym, który można przedstawić jako ciągi zer i jedynek. Każdy typ komputera operuje własnym kodem, który dlatego został określony nazwą język maszynowy lub wewnętrzny. I to właśnie stanowi główną wadę tych języków, gdyż programista każdorazowo musi dostosowywać się do języka konkretnej maszyny. Przykład: II generacja Ponieważ operowanie ciągami zero-jedynkowymi nie jest wygodne dla programisty, przypisano im łatwiejsze do zrozumienia znaki mnemotechniczne. Tak narodziły się języki symboliczne, zwane też asemblerami. Choć stanowią one proste tłumaczenie języka maszynowego na symbole i są ściśle związane z danym modelem komputera, to ułatwiają pisanie instrukcji i czynią je bardziej czytelnymi. Przykład: mov dx, offset info mov ah, 9 int 2h mov ah, 0 int 6h III generacja Języki wysokiego poziomu - symbole asemblera reprezentujące konkretne instrukcje zostały zastąpione kodem nie związanym z maszyną, bardziej zbliżonym do języka naturalnego lub matematycznego. Są to języki ogólnego przeznaczenia o dużym stopniu uniwersalności; ich rozwój ewoluował w kierunku języków problemowo zorientowanych Przykład: for i:= to MaxN do begin Vx[i]:=Vx[i]+dx[i]; end;

18 IV generacja Na czwartą generację języków programowania składa się szereg narzędzi, które umożliwiają budowę prostych aplikacji przez zestawianie prefabrykowanych modułów. Obecnie wielu specjalistów uważa, że nie są to języki programowania w ścisłym znaczeniu, gdyż częstokroć stanowią jedynie rozszerzenie języków już istniejących. Niektórzy autorzy proponują stosować nazwę czwarta generacja wyłącznie w odniesieniu do programowania obiektowego (OOP). V generacja Nazwę język piątej generacji stosuje się czasem w odniesieniu do języków używanych do tworzenia programów wykorzystujących tzw. sztuczną inteligencję (AI) lub inaczej systemów ekspertowych. Podział ję Podział ję Podział ze względu na rodzaj translacji: kompilowane, interpretowane. Podział ze względu na strukturę: języki proceduralne (imperatywne) programista określa JAKIE operacje maja być wykonane i w JAKIEJ KOLEJNOŚCI, języki nieproceduralne (deklaratywne) programista opisuje to, CO chce wykazać. Decyzja JAK to wykonać należy do kompilatora. Podział ję Podział ze względu na strukturę: języki strukturalne program rozbity na procedury (podprogramy), z których każda odpowiada za rozwiązanie określonego problemu. Procedury stanowią wtedy odrębne, samodzielnie działające całości, które możemy wykorzystać także i w innych pisanych programach. języki niestrukturalne brak wydzielonych obszarów odpowiedzialnych za rozwiązywanie określonych problemów. Podział ję Podział ze względu na zastosowania: algorytmiczne: do zapisywania algorytmów algebraiczne (Fortran, Pascal, C) - do zapisu algorytmów numerycznego przetwarzania informacji, ekonomiczne (COBOL, PL/) - opis algorytmów przetwarzania informacji o charakterze ekonomicznym, bankowym, handlowym. Rozbudowane mechanizmy operacji we/wy i pewne możliwości wykonywania operacji na danych nienumerycznych, do symbolicznego przetwarzania informacji (LISP) - do zapisu algorytmów przetwarzania informacji numerycznych i na danych symbolicznych.

19 Podział ję Podział ję Podział ze względu na zastosowania: języki symulacyjne (SIMULA) - ułatwiają opisywanie algorytmów modelowania i symulacji bezpośredniego dostępu (BASIC) - pozwalają na konwersację z maszyną. problemowe - ściśle dostosowane do konkretnej klasy zadań. Podział według struktury: języki strukturalne (Fortran, Pascal, Algol) języki zorientowane obiektowo (C++, Visual C++, Turbo Pascal, Delphi, Smalltalk, Objective-C, Eiffel, Lisp, Oberon, Actor, CLOS, Ada95, Prolog++, Zink, JAVA, J++, Visual Objects, Python): Podział ję W ostatnich latach w projektowaniu oprogramowania zorientowanego obiektowo wykształcił się wyraźny podział na: OOA - Object Oriented Analysis (Analiza Zorientowana Obiektowo) OOD - Object Oreinted Design (Projektowanie Zorientowane Obiektowo) OOP - Object Oriented Programming (Programowanie Zorientowane Obiektowo) Programowanie Podstawowym celem każdego języka programowania jest pomoc w budowie programu (programowaniu) w sferze: projektowania programu (zakres programu,specyfikacja danych); przejrzystości (wyrażanie akcji w sposób zrozumiały); dokumentacja powinna być integralną częścią procesu programowania; program powinien być zapisany czytelnie, aby umożliwić jego konserwację i dokonywanie w nim poprawek i rozszerzeń; weryfikacji (łatwość określania poprawności i testowania). Ada - język programowania wysokiego poziomu, opracowany w latach na zamówienie Departamentu Obrony USA, spokrewniony z językiem Pascal. Przeznaczony do bezpośredniego sterowania procesami lub maszynami, np. samolotami wojskowymi. Służy głównie do oprogramowywania systemów czasu rzeczywistego, pozwala na kontrolowanie procesów zachodzących jednocześnie. Nazwa języka pochodzi od imienia Ady Augusty Lovelace (85-852), córki G.G.N. Byrona, matematyczki współdziałającej z Ch. Babbage em przy pracach nad pierwszą programowalną maszyną liczącą.

20 Visual Asembler Asembler - język programowania niskiego poziomu, wykorzystujący instrukcje procesora. Program napisany w asemblerze jest tłumaczony na (binarny) kod maszynowy. Program w asemblerze jest bardzo efektywny w porównaniu do programów napisanych w innych językach, jednakże jego tworzenie jest stosunkowo trudne. Basic (Beginners All-purpose Symbolic Instruction Code) - przełomowy w chwili powstania w 964, potem mocno krytykowany za brak strukturalności, prosty, interpretowany język programowania, spopularyzowany w komputerach ośmiobitowych i kalkulatorach programowanych. Basic z założenia nadawał się do pracy interakcyjnej i miał ujmować prostotą (m. in. brak typów, numerowane instrukcje ułatwiały redagowanie programu). Odrodzony i zmetamorfozowany zarówno pod względem struktur sterowania i danych, jak i interfejsu systemowego Basic znajduje szerokie zastosowanie pod postacią platformy programowania RAD o nazwie VisualBasic. W tym nowoczesnym produkcie z Basica pozostała głównie nazwa. ibasic C - proceduralny język programowania wysokiego poziomu, zaprojektowany w 972 przez D. M. Ritchiego i zrealizowany pod systemem operacyjnym UNIX dla komputera PDP-. Początkowo C był językiem oprogramowania systemowego (powstał jako język do przeprogramowania systemu UNIX). Szybko zyskał popularność jako uniwersalny język programowania. Cechami języka C są zwięzłość i elastyczność, przy jednoczesnym przerzucaniu dużej odpowiedzialności na programistę (nie ma np. wbudowanej kontroli indeksowania tablic). W latach język C uległ standaryzacji. Znormalizowany język C nosi nazwę ANSI C.

21 C++ - obiektowy język programowania zaprojektowany przez B. Stroustrupa i in., w warstwie proceduralnej osadzony w notacji języka C, wpływ języków Algol 68 i Simula 67 oraz Ada, ML i Clu. Charakterystyczne cechy: dociążanie funkcji i operatorów, dziedziczenie z wielu klas, obsługa wyjątków, klasy parametryczne. Wersja pierwotna (979) nosiła nazwę C z klasami (C with classes), a jej kompilatory generowały kod w języku C. Standaryzowany od 994, standard ostateczny ISO/ANSI C++ (ANSI 4882) z września 998. Liczne kompilatory, m. in. Borland C++, Microsoft C++, Watcom C++, implementacje systemów operacyjnych, baz danych. Java, Smalltalk. DevC++ lcc Clips (C Language Integrated Production System) - rozwijany od 984 r. język przeznaczony do badania i rozwijania systemów ekspertowych, służący do programowania typu optymalizacji algorytmowej (rule-based), proceduralnego i obiektowego (COOL - Clips Object Oriented Language). CLIPS ma składnię przypominającą Lisp-a. Obecnie (2002) dostępna jest wersja 6.20 beta. Css (Cascading Style Sheets) - technologia (język) umożliwiająca przydzielanie stylu, tj. charakterystyk takich jak położenie, barwa, rozmiary, itp., elementom HTML. Arkusze styli są wzorcami (templates) przypominającymi wzorce znane np. z edytora tekstu Word (mogą być również dołączane z zewnątrz). CSS są w znacznym stopniu niezależne od platformy (stopień ich rozumienia przez nowe przeglądarki IE 5.5, Netscape 6 i Opera 5 jest oceniany odpowiednio na 92%, 98% i 99%).

22 DHTML (Dynamic HTML) - rozszerzenie języka HTML o wzorce stylu (style sheets), rozmieszczanie elementów na stronie WWW według upodobań użytkownika (content positioning) oraz możliwośćstosowania indywidualnych krojów pisma, sprowadzanych z komputera macierzystego danej strony WWW (downloadable fonts). Fortran (FORmula TRANslator) - jeden z pierwszych szeroko używanych, algorytmicznych języków programowania, opracowany przez J. Backusa w 957. Po wielu unowocześnieniach i zmianach (Fortran 77, Fortran 90) stosowany do dzisiaj. Język Fortran powstał jako wynik wczesnych doświadczeń w programowaniu komputerów za pomocą autokodów z lat Pierwszą implementację Fortranu wykonano dla maszyny IBM-704. W 958 powstała wersja Fortran II wprowadzająca możliwość kompilacji niezależnej (IBM- 704), a w 959 jej odpowiednik dla komputera IBM-709. HTML (HyperText Markup Language) - specjalny język służący do opisu strony oraz odniesień z poszczególnych jej elementów do innych dokumentów. Język ten powstał na potrzeby internetowej usługi WWW. HTML Umożliwia umieszczenie na stronie tekstu zdefiniowanych dyrektyw co do sposobu jego prezentacji, wyróżnienia pewnych jego elementów edytorskich jak akapity, nagłówki itp. Pozwala także umieszczać bezpośrednio na opisywanych stronach grafikę, a w najnowszych wersjach również inne typy dokumentów. Java - popularny język programowania obiektowego autorstwa J. Goslinga, zaprojektowany w firmie Sun Microsystems, Używany szeroko do oprogramowywania specjalizowanych mikroprocesorów, wzbogacania prezentacji danych zawartych w dokumentach HTML, pamiętanych w komputerach sieci Internet oraz do opracowywania samodzielnych aplikacji wielowątkowych i rozproszonych. Kompilatory języka Java produkują bajtokod, który nadaje się do interpretacji w środowisku JVM. Znaczenie języka Java systematycznie rośnie. Przykład skryptu w Javie JavaScript, opracowany przez firmę Sun Microsystems język programowania obiektowego, przypominający C++, jednak przeznaczony do zastosowań sieciowych. Java nie przenosi wirusów i nie może uszkodzić komputera-klienta (o ile wiadomo). Java jest także środowiskiem przetwarzania online, działającym w tzw. maszynie wirtualnej Javy - JVM (Java Virtual Machine). Ta ostatnia jest rodzajem pośrednika pomiędzy programem Javy i komputerem. Kompilator Javy tworzy bowiem nie kod przeznaczony dla konkretnej platformy, lecz kod niezależny od sprzętu (przynajmniej na ogół), interpretowany przez JVM.

23 Lisp - język programowania oparty na przetwarzaniu list. Główny wkład w jego powstanie w latach 50. wniósł J. McCarthy, profesor wielu amerykańskich uczelni, m.in. Instytutu Technologicznego Massachusetts i Uniwersytetu Stanforda. Wywodzi się z badań teoretycznych nad tzw. rachunkiem lambda i stał się podstawowym językiem sztucznej inteligencji. Eclips Lisp Logo - edukacyjny język programowania biorący początek z badań nad psychologią uczenia się i jego wpływem na kształtowanie osobowości (J. Piaget), opracowany przez Seymoura Paperta i spopularyzowany przez niego w książce, rewolucyjnej z punktu widzenia metodologii nauczania, pt. Burze mózgów dzieci i komputery (Wydawnictwo Naukowe PWN, 996). Logo jest stosowane w początkowym nauczaniu matematyki oraz jako język komunikacji dziecka z komputerem; odznacza się interakcyjnością, znakomicie przemyślanym, prostym zestawem operacji graficznych i ogólnością składni wzorowanej na języku Lisp. MSW Logo NET Logo Star Logo

24 Visual Logo Pascal - strukturalny język programowania stworzony przez N. Wirtha na początku lat 70. Jego zastosowanie w praktyce jest obecnie bardzo ograniczone. Najważniejszym zastosowaniem języka Pascal jest nauka programowania. Pozostaje on przez to jednym z najszerzej znanych i popularnych języków, zwłaszcza wśród początkujących programistów. Perl (Practical Report and Extraction Language) interpretowany język programowania, zewnętrznie bardzo podobny do C/C++, dostosowany przez twórcę (Larry Wall, koniec lat 80-tych) przede wszystkim do przetwarzania plików tekstowych. Perl służy do administracji i oprogramowania WWW, w tym do pisania tzw. skryptów cgi. Trudno uznać Perl za język szczególnie przyjazny; jest jednak tak uniwersalny i przy tym rozpowszechniony, że warto go poznać, pomimo tego, że w ostatnich latach pojawiły się języki pod wieloma względami wydajniejsze (m.in. ASP i PHP). Perl powstał w środowisku unixowym, jednak niemal od razu został zaimplementowany jako ActivePerl również do Win32. Przykład skryptu w Perlu PHP - język skryptowy stosowany po stronie serwera podobnie jak np. Perl, z którym jest zresztą spokrewniony. Za pośrednictwem skryptów php typowy serwer (np. PWS, IIS, Apache) może przesyłać na strony sieciowe dane z relacyjnych baz danych (np. MySQL, msql, PostgreSQL a także MS Access). Mówiąc w uproszczeniu, kod php wbudowany jest w plik HTML pomiędzy znaczniki <?php i?>, chociaż można skonfigurować php tak, aby używać innych znaczników, np. <% i %>, jak w przypadku ASP. Kod php jest interpretowany przez serwer, przekształcany w tekst a następnie przesyłany do przeglądarki. Przykład skryptu w PHP

25 Prolog (PROgraming in LOGic) - deklaratywny język programowania w logice. Program w takim języku nie jest sekwencją działań, jak np. w języku proceduralnym, lecz zbiorem faktów i reguł pozwalających w oparciu o fakty formułować wnioski. Python - interpretowany współczesny język obiektowy. Istnieją implementacje dla różnych systemów operacyjnych. Posiada przejrzystą i łatwą do nauki strukturę. Python jest językiem darmowym - tworzone w nim aplikacje można również sprzedawać. Visual Prolog Python Ruby - interpretowany, w pełni obiektowy język programowania Ruby bazuje na wielu językach, takich jak Perl, Smalltalk, Python, CLU czy LISP. Składnia jest zorientowana liniowo i oparta na składni CLU (w mniejszym stopniu Perla). Program pisane w Ruby charakteryzują się wysoką wymiennością pomiędzy platformami (istnieją implementację na wiele maszyn UNIXowych, DOS, Windows, Mac, BeOS itd.). Język popularny w Japonii, oparty na języku japońskim. Ruby SQL (Structured Query Language) - standardowy język zapytań do obsługi relacyjnej bazy danych. Język programowania baz danych i ich sieciowych serwerów. Pierwowzorem SQL był opracowany przez IBM we wczesnych latach siedemdziesiątych XX w. język SEQUEL (E. F. Codd). Niezależnie od specyficznych właściwości standardów język SQL pozwala formułować działania na tabelach w formie zbliżonej do zdań w języku angielskim.

26 VRML (Virtual Reality Modeling Language) - opracowany w 993r. język udostępniający operacje na obiektach trójwymiarowych w Internecie. Dostępny dla większości przeglądarek po zainstalowaniu dodatkowej wtyczki. Od 995 r. dostępna jest wersja VRML 2.0. Przykład modelu w VRML XML (extensible Markup Language) - standard Internetowy (metajęzyk), oparty na SGML, a będący poszerzeniem techniki używania markerów (tagów) nie tylko do określania sposobu prezentacji, lecz także rodzaju przesyłanej informacji. Znaczniki nie są opisane w XML lecz definiowane przez użytkownika. Do opisu danych XML używa DTD - Document Type Definition. Jeśli więc HTML zajmuje się wyświetlaniem danych i ich wyglądem, to XML skupia się na opisie, przechowywaniu i przesyłaniu danych (lecz nie ich prezentacji) niezależnie od sprzętu, oprogramowania systemowego i aplikacji. Ma uzupełniać a nie zastępować HTML, nie jest językiem, jest uproszczoną wersją metajęzyka SGML. Hello Kolekcję ponad 300 programów Hello world w różnych językach programowania i w ponad 50 językach naturalnych : Standardowe: Hello Pierwszy Hello powstał w 972 roku i był napisany w B (taki poprzednik C ;-). Na wyróżnienie zasługują: Assembler-Z80- Console i HQ9+ (za długość), Argh!, BrainFxxx, G-Code, Malbolge i MAMASH (za zakręcenie), CSS (za spryt), LabVIEW i Logo-graphical (za efekty specjalne).

27 Hello Assembler-Z80-Console Hello Na wyróżnienie zasługują: Assembler-Z80-Console i HQ9+ (za długość), Argh!, BrainFxxx, G-Code, Malbolge i MAMASH (za zakręcenie), CSS (za spryt), LabVIEW i Logo-graphical (za efekty specjalne). Assembler-Z80-Console Hello Assembler-Z80-Console Hello Assembler-Z80-Console Hello Assembler-Z80-Console Hello

28 Hello Hello Argh! BrainFxxx: G-Code: Hello Hello Malbolge : Hello Hello MAMASH : CSS :

29 Hello Hello LabVIEW : Logo-graphical :

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

Translacja i translatory Translacja

Translacja i translatory Translacja Translacja i translatory Translacja Program w języku niskiego poziomu ciąg instrukcji wykonywany bezpośrednio przez procesor lub maszynę cyfrową Program w języku wysokiego poziomu wymaga przetłumaczenia

Bardziej szczegółowo

TRANSLACJA I TRANSLATORY

TRANSLACJA I TRANSLATORY TRANSLACJA I TRANSLATORY Języki programowania niskiego czy też wysokiego poziomu mają na zadanie przetworzyć ogół algorytmów w nich zapisanych na taką postać aby maszyna cyfrowa była w stanie je wykonać

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

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

Wprowadzenie do programowania

Wprowadzenie do programowania Wprowadzenie do programowania Olsztyn 2007-2012 Wojciech Sobieski Podstawowe pojęcia Język - jest to ogólna nazwa zdefiniowanego zbioru znaków i symboli oraz reguł określających sposoby i kolejność ich

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

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

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki Studia Podyplomowe INFORMATYKA Podstawy Informatyki Wykład V Rzut okiem na języki programowania 1 Kompilacja vs. interpretacja KOMPILACJA Proces, który przetwarza program zapisany w języku programowania,

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

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

1. Maszyna Turinga, gramatyki formalne i ONP

1. Maszyna Turinga, gramatyki formalne i ONP 1. Maszyna uringa, gramatyki formalne i OP 1.1.Maszyna uringa Automat skończony składa się ze skończonego zbioru stanów i zbioru przejść ze stanu do stanu, zachodzących przy różnych symbolach wejściowych

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

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

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Język programowania prosty bezpieczny zorientowany obiektowo wielowątkowy rozproszony przenaszalny interpretowany dynamiczny wydajny Platforma

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

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

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa 1 Java Wprowadzenie 2 Czym jest Java? Język programowania prosty zorientowany obiektowo rozproszony interpretowany wydajny Platforma bezpieczny wielowątkowy przenaszalny dynamiczny Rozumiana jako środowisko

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

Technologie informacyjne - wykład 12 -

Technologie informacyjne - wykład 12 - Zakład Fizyki Budowli i Komputerowych Metod Projektowania Instytut Budownictwa Wydział Budownictwa Lądowego i Wodnego Politechnika Wrocławska Technologie informacyjne - wykład 12 - Prowadzący: Dmochowski

Bardziej szczegółowo

Programowanie. Pascal - język programowania wysokiego poziomu. Klasa 2 Lekcja 9 PASCAL

Programowanie. Pascal - język programowania wysokiego poziomu. Klasa 2 Lekcja 9 PASCAL Programowanie Pascal - język programowania wysokiego poziomu Klasa 2 Lekcja 9 PASCAL Język programowania Do przedstawiania algorytmów w postaci programów służą języki programowania. Tylko algorytm zapisany

Bardziej szczegółowo

Podstawy programowania wykład

Podstawy programowania wykład Podstawy programowania wykład WYDZIAŁ ELEKTRONIKI i INFORMATYKI dr inż. Robert Arsoba Politechnika Koszalińska Wydział Elektroniki i Informatyki POLITECHNIKA KOSZALIŃSKA 2009/2010 1 Materiały do wykładu

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

Java EE produkcja oprogramowania

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

Bardziej szczegółowo

Informatyczna Wieża Babel, czyli o różnych językach programowania. Informatyczna Wieża Babel, czyli o różnych językach programowania

Informatyczna Wieża Babel, czyli o różnych językach programowania. Informatyczna Wieża Babel, czyli o różnych językach programowania Informatyczna Wieża Babel, czyli o różnych językach programowania Informatyczna Wieża Babel, czyli o różnych językach programowania Wstęp Aplikacje i programy, jakich dziś używamy, ukryte dla nas pod postacią

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

Podstawy programowania

Podstawy programowania Podstawy programowania Część pierwsza Od języka symbolicznego do języka wysokiego poziomu Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót

Bardziej szczegółowo

Podstawy Informatyki Gramatyki formalne

Podstawy Informatyki Gramatyki formalne Podstawy Informatyki alina.momot@polsl.pl http://zti.polsl.pl/amomot/pi Plan wykładu 1 Języki i gramatyki Analiza syntaktyczna Semantyka 2 Podstawowe pojęcia Gramatyki wg Chomsky ego Notacja Backusa-Naura

Bardziej szczegółowo

SPIS TREŚCI Funkcje systemu operacyjnego Zapewnia obsługę dialogu między użytkownikiem a komputerem Nadzoruje wymianę informacji między poszczególnymi urządzeniami systemu komputerowego Organizuje zapis

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

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 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

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

Komputer nie myśli. On tylko wykonuje nasze polecenia. Nauczmy się więc wydawać mu rozkazy

Komputer nie myśli. On tylko wykonuje nasze polecenia. Nauczmy się więc wydawać mu rozkazy Programowanie w C++ 1.Czym jest programowanie Pisanie programów to wcale nie czarna magia, tylko bardzo logiczna rozmowa z komputerem. Oczywiście w jednym ze specjalnie stworzonych do tego celu języków.

Bardziej szczegółowo

Języki formalne i automaty Ćwiczenia 2

Języki formalne i automaty Ćwiczenia 2 Języki formalne i automaty Ćwiczenia 2 Autor: Marcin Orchel Spis treści Spis treści... 1 Wstęp teoretyczny... 2 Metoda brute force... 2 Konwersja do postaci normalnej Chomskiego... 5 Algorytm Cocke a-youngera-kasamiego

Bardziej szczegółowo

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

Podstawy programowania. Wprowadzenie

Podstawy programowania. Wprowadzenie Podstawy programowania Wprowadzenie Proces tworzenia programu Sformułowanie problemu funkcje programu zakres i postać danych postać i dokładność wyników Wybór / opracowanie metody rozwiązania znaleźć matematyczne

Bardziej szczegółowo

O (o)programowaniu. R. Robert Gajewski omklnx.il.pw.edu.pl/~rgajewski

O (o)programowaniu. R. Robert Gajewski omklnx.il.pw.edu.pl/~rgajewski O (o)programowaniu R. Robert Gajewski omklnx.il.pw.edu.pl/~rgajewski www.il.pw.edu.pl/~rg s-rg@siwy.il.pw.edu.pl Próba klasyfikacji Nie jest możliwa jednoznaczna klasyfikacja oprogramowania! Oto jedna

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

Wstęp do Informatyki. Program, proces tworzenia programu Środowisko programistyczne Języki programowania

Wstęp do Informatyki. Program, proces tworzenia programu Środowisko programistyczne Języki programowania Wstęp do Informatyki Program, proces tworzenia programu Środowisko programistyczne Języki programowania Program - definicje Program jest przekładem problemu użytkownika na język maszyny Niklaus Wirth:

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

Bazy danych i strony WWW

Bazy danych i strony WWW Bazy danych i strony WWW Obsługa baz danych poprzez strony WWW Niezbędne narzędzia: serwer baz danych np. MySQL serwer stron WWW np. Apache przeglądarka stron WWW interpretująca język HTML język skryptowy

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

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

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

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

Wykład 4. Algorytmy i programy. Algorytmy + struktury danych = programy. Niklaus Wirth. Algorytm = logika + sterowanie.

Wykład 4. Algorytmy i programy. Algorytmy + struktury danych = programy. Niklaus Wirth. Algorytm = logika + sterowanie. Wykład 4 Algorytmy + struktury danych = programy Niklaus Wirth Algorytm = logika + sterowanie Robert Kowalski J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 80 / 277 algorytm program język

Bardziej szczegółowo

Wstęp do Programowania Obiektowego. Wykład 13 Paradygmaty. Składnia i semantyka.

Wstęp do Programowania Obiektowego. Wykład 13 Paradygmaty. Składnia i semantyka. Wstęp do Programowania Obiektowego Wykład 13 Paradygmaty. Składnia i semantyka. 1 PRZEGLĄD PODSTAWOWYCH PARADYGMATÓW 2 Cztery podstawowe paradygmaty 1. Programowanie imperatywne. 2. Programowanie funkcyjne.

Bardziej szczegółowo

ALGORYTMY I PROGRAMY

ALGORYTMY I PROGRAMY ALGORYTMY I PROGRAMY Program to ciąg instrukcji, zapisanych w języku zrozumiałym dla komputera. Ten ciąg instrukcji realizuje jakiś algorytm. Algorytm jest opisem krok po kroku jak rozwiązać problem, czy

Bardziej szczegółowo

Podstawy Programowania Algorytmy i programowanie

Podstawy Programowania Algorytmy i programowanie Podstawy Programowania Algorytmy i programowanie Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r. Algorytm Algorytm w matematyce, informatyce, fizyce, itp. lub innej dziedzinie życia,

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

Programowanie I. Wprowadzenie. Proces programowania

Programowanie I. Wprowadzenie. Proces programowania I. Wprowadzenie. Proces Aleksander Denisiuk Uniwersytet Warmińsko-Mazurski Olsztyn, ul. Słoneczna 54 denisjuk@matman.uwm.edu.pl 6 lutego 2018 1 / 25 Wprowadzenie. Proces Najnowsza wersja tego dokumentu

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

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

Odwrotna Notacja Polska

Odwrotna Notacja Polska Odwrotna Notacja Polska Odwrotna Notacja Polska w skrócie ONP) jest sposobem zapisu wyrażeń arytmetycznych. Znak wykonywanej operacji umieszczany jest po operandach, argumentach tzw. zapis postfiksowy).

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

Algorytm. Krótka historia algorytmów

Algorytm. Krótka historia algorytmów Algorytm znaczenie cybernetyczne Jest to dokładny przepis wykonania w określonym porządku skończonej liczby operacji, pozwalający na rozwiązanie zbliżonych do siebie klas problemów. znaczenie matematyczne

Bardziej szczegółowo

Metodologie programowania

Metodologie programowania Co kształtuje języki programowania? Wykład2,str.1 Metodologie programowania Koszty obliczeń: 1980 1960:sprzętdrogi,a wysiłek programistów niewielki 1970: sprzęt coraz tańszy, a programowane problemy coraz

Bardziej szczegółowo

Języki i metodyka programowania

Języki i metodyka programowania Języki i metodyka programowania www.ee.pw.edu.pl/~slawinsm Dr inż. Maciej Sławiński M.Slawinski@ee.pw.edu.pl GE518l Konsultacje: śr. 13 00-13 45 SK201/GE518l pt. 10 15-11 00 GE518l/SK201 Algorytmika Literatura

Bardziej szczegółowo

Sprzęt komputera - zespół układów wykonujących programy wprowadzone do pamięci komputera (ang. hardware) Oprogramowanie komputera - zespół programów

Sprzęt komputera - zespół układów wykonujących programy wprowadzone do pamięci komputera (ang. hardware) Oprogramowanie komputera - zespół programów Sprzęt komputera - zespół układów wykonujących programy wprowadzone do pamięci komputera (ang. hardware) Oprogramowanie komputera - zespół programów przeznaczonych do wykonania w komputerze (ang. software).

Bardziej szczegółowo

wstęp (podstawowe pojęcia związane z programowaniem, przegląd języków programowania, sieci działań, ogólne zasady programowania zorientowanego

wstęp (podstawowe pojęcia związane z programowaniem, przegląd języków programowania, sieci działań, ogólne zasady programowania zorientowanego wstęp (podstawowe pojęcia związane z programowaniem, przegląd języków programowania, sieci działań, ogólne zasady programowania zorientowanego obiektowo) historia języka Delphi i ogólna charakterystyka

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

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

Matematyczna wieża Babel. 4. Ograniczone maszyny Turinga o językach kontekstowych materiały do ćwiczeń

Matematyczna wieża Babel. 4. Ograniczone maszyny Turinga o językach kontekstowych materiały do ćwiczeń Matematyczna wieża Babel. 4. Ograniczone maszyny Turinga o językach kontekstowych materiały do ćwiczeń Projekt Matematyka dla ciekawych świata spisał: Michał Korch 4 kwietnia 2019 1 Dodajmy kontekst! Rozważaliśmy

Bardziej szczegółowo

Algorytmy zapisywane w pseudojęzyku programowania. Klasa 2 Lekcja 6

Algorytmy zapisywane w pseudojęzyku programowania. Klasa 2 Lekcja 6 Algorytmy zapisywane w pseudojęzyku programowania Klasa 2 Lekcja 6 Dlaczego stosujemy pseudojęzyk? Każdy język j programowania określa pewną notację,, służąs żącą do zapisywania tekstu programu. Zanim

Bardziej szczegółowo

Wprowadzenie do XML. Joanna Jędrzejowicz. Instytut Informatyki

Wprowadzenie do XML. Joanna Jędrzejowicz. Instytut Informatyki Instytut Informatyki Literatura http://www.w3c.org/tr/ - Technical Reports K. B. Stall - XML Family of Specifications, Addison-Wesley 2003 P. Kazienko, K. Gwiazda - XML na poważnie, Helion 2002 XML Rozszerzalny

Bardziej szczegółowo

Podstawy Informatyki Języki programowania

Podstawy Informatyki Języki programowania Podstawy Informatyki Języki programowania alina.momot@polsl.pl http://zti.polsl.pl/amomot/pi Plan wykładu 1 Wprowadzenie Języki programowania 2 Przykład Wczytywanie programu do pamięci Podsumowanie 3 Przykład

Bardziej szczegółowo

Wstęp do Informatyki dla bioinformatyków

Wstęp do Informatyki dla bioinformatyków Wstęp do Informatyki dla bioinformatyków Wykład 1. Wstęp do Wstępu Bartek Wilczyński bartek@mimuw.edu.pl Po pierwsze - Formalności 2 kolokwia (po 15 pkt) początek XI i koniec XII Dwa programy zaliczeniowe:

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

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

Języki formalne i automaty Ćwiczenia 4

Języki formalne i automaty Ćwiczenia 4 Języki formalne i automaty Ćwiczenia 4 Autor: Marcin Orchel Spis treści Spis treści... 1 Wstęp teoretyczny... 2 Sposób tworzenia deterministycznego automatu skończonego... 4 Intuicyjne rozumienie konstrukcji

Bardziej szczegółowo

Programowanie w C. dr inż. Stanisław Wszelak

Programowanie w C. dr inż. Stanisław Wszelak Programowanie w C dr inż. Stanisław Wszelak Przeszłość i przyszłość składni programowania w C Ken Thompson Denis Ritchie Bjarne Stoustrup Zespoły programistów B C C++ C# 1969 rok Do SO UNIX 1972 rok C++

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

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

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego Arytmetyka cyfrowa Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego (binarnego). Zapis binarny - to system liczenia

Bardziej szczegółowo

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę. Języki C i C++ to bardzo uniwersalne platformy programistyczne o ogromnych możliwościach. Wykorzystywane są do tworzenia systemów operacyjnych i oprogramowania użytkowego. Dzięki niskiemu poziomowi abstrakcji

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

Java jako język programowania

Java jako język programowania Java jako język programowania Interpretowany programy wykonują się na wirtualnej maszynie (JVM Java Virtual Machine) Składnia oparta o język C++ W pełni zorientowany obiektowo (wszystko jest obiektem)

Bardziej szczegółowo

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński ppelczynski@swspiz.pl

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński ppelczynski@swspiz.pl Programowanie niskopoziomowe dr inż. Paweł Pełczyński ppelczynski@swspiz.pl 1 Literatura Randall Hyde: Asembler. Sztuka programowania, Helion, 2004. Eugeniusz Wróbel: Praktyczny kurs asemblera, Helion,

Bardziej szczegółowo

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Object-oriented programming Najpopularniejszy obecnie styl (paradygmat) programowania Rozwinięcie koncepcji programowania strukturalnego

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

Modelowanie i Programowanie Obiektowe

Modelowanie i Programowanie Obiektowe Modelowanie i Programowanie Obiektowe Wykład I: Wstęp 20 październik 2012 Programowanie obiektowe Metodyka wytwarzania oprogramowania Metodyka Metodyka ustandaryzowane dla wybranego obszaru podejście do

Bardziej szczegółowo

Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji.

Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji. Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji. Maria Górska 9 stycznia 2010 1 Spis treści 1 Pojęcie algorytmu 3 2 Sposób

Bardziej szczegółowo

Języki programowania deklaratywnego

Języki programowania deklaratywnego Katedra Inżynierii Wiedzy laborki 1 e-mail: przemyslaw.juszczuk@ue.katowice.pl Konsultacje: na stronie katedry + na stronie domowej Pokój 202c budynek A pjuszczuk.pl Języki deklaratywne - laborki Wprowadzenie

Bardziej szczegółowo

Programowanie obiektowe - 1.

Programowanie obiektowe - 1. Programowanie obiektowe - 1 Mariusz.Masewicz@cs.put.poznan.pl Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która

Bardziej szczegółowo

Metody Kompilacji Wykład 8 Analiza Syntaktyczna cd. Włodzimierz Bielecki WI ZUT

Metody Kompilacji Wykład 8 Analiza Syntaktyczna cd. Włodzimierz Bielecki WI ZUT Metody Kompilacji Wykład 8 Analiza Syntaktyczna cd Analiza Syntaktyczna Wstęp Parser dostaje na wejściu ciąg tokenów od analizatora leksykalnego i sprawdza: czy ciąg ten może być generowany przez gramatykę.

Bardziej szczegółowo

Języki i paradygmaty programowania. I. Wprowadzenie

Języki i paradygmaty programowania. I. Wprowadzenie Języki i paradygmaty programowania I. Wprowadzenie O źródłach wykład został przygotowany w ogromnej części w oparciu o serwis http://wazniak.mimuw.edu.pl/ (zgodnie z licencją serwisu) inne źródła: Wikipedia:

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

Typy przetwarzania. Przetwarzanie zcentralizowane. Przetwarzanie rozproszone

Typy przetwarzania. Przetwarzanie zcentralizowane. Przetwarzanie rozproszone Typy przetwarzania Przetwarzanie zcentralizowane Systemy typu mainfame Przetwarzanie rozproszone Architektura klient serwer Architektura jednowarstwowa Architektura dwuwarstwowa Architektura trójwarstwowa

Bardziej szczegółowo

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga! Programowanie I O czym będziemy mówili Podstawy programowania w językach proceduralnym ANSI C obiektowym Java Uwaga! podobieństwa w podstawowej strukturze składniowej (zmienne, operatory, instrukcje sterujące...)

Bardziej szczegółowo

WPROWADZENIE. Użycie PHP

WPROWADZENIE. Użycie PHP WPROWADZENIE PHP jest językiem programowania po stronie serwera używanym do tworzenia dynamicznych witryn internetowych i interaktywne aplikacje internetowe. Skrót PHP pierwotnie oznaczał Osobistą stronę

Bardziej szczegółowo

Zapisywanie algorytmów w języku programowania

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

5-6. Struktura dokumentu html. 2 Określenie charakteru i tematyki strony. Rodzaje witryn. Projekt graficzny witryny. Opracowanie skryptów

5-6. Struktura dokumentu html. 2 Określenie charakteru i tematyki strony. Rodzaje witryn. Projekt graficzny witryny. Opracowanie skryptów Aplikacje internetowe KL. III Rok szkolny: 013/01 Nr programu: 31[01]/T,SP/MENIS/00.06.1 Okres kształcenia: łącznie ok. 170 godz. lekcyjne Moduł Bok wprowadzający 1. Zapoznanie z programem nauczania i

Bardziej szczegółowo

PROGRAM NAUCZANIA DLA ZAWODU TECHNIK INFORMATYK, 351203 O STRUKTURZE PRZEDMIOTOWEJ

PROGRAM NAUCZANIA DLA ZAWODU TECHNIK INFORMATYK, 351203 O STRUKTURZE PRZEDMIOTOWEJ PROGRAM NAUCZANIA DLA ZAWODU TECHNIK INFORMATYK, 351203 O STRUKTURZE PRZEDMIOTOWEJ Systemy baz danych 1. 2 Wstęp do baz danych 2. 2 Relacyjny model baz danych. 3. 2 Normalizacja baz danych. 4. 2 Cechy

Bardziej szczegółowo

Programowanie obiektowe. Wprowadzenie

Programowanie obiektowe. Wprowadzenie 1 Programowanie obiektowe Wprowadzenie 2 Programowanie obiektowe Object-oriented programming Najpopularniejszy obecnie styl (paradygmat) programowania Rozwinięcie koncepcji programowania strukturalnego

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Wykład I. Wprowadzenie do baz danych

Wykład I. Wprowadzenie do baz danych Wykład I Wprowadzenie do baz danych Trochę historii Pierwsze znane użycie terminu baza danych miało miejsce w listopadzie w 1963 roku. W latach sześcdziesątych XX wieku został opracowany przez Charles

Bardziej szczegółowo

Wyrażenia regularne.

Wyrażenia regularne. Teoretyczne podstawy informatyki Wykład : Wyrażenia regularne. Prof. dr hab. Elżbieta Richter-Wąs.2.202 Wyrażenia regularne Wyrażenia regularne (ang. regular expressions) stanowią algebraiczny sposób definiowania

Bardziej szczegółowo