Obiektowa implementacja parsera klasy LL(1)

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

Download "Obiektowa implementacja parsera klasy LL(1)"

Transkrypt

1 Obiektowa implementacja parsera klasy LL(1) Piotr Jeruszka 1 1 Wydział Inżynierii Mechanicznej i Informatyki Kierunek Informatyka, II stopień Specjalność: Aplikacje biznesowe i bazy danych, Rok II Streszczenie Poniższa praca przedstawia projekt implementacji obiektowego parsera klasy LL(1), działającego na podstawie plików specyfikacji. Parsery są elementami kompilatorów, odpowiadającymi za analizę składniową (stąd inna nazwa analizatory składniowe) kodu źródłowego. W pracy zostały wyjaśnione teoretyczne podstawy działania parsera klasy LL(1), w szczególności proces tworzenia tablicy parsowania. Wyszczególniono problemy związane z gramatykami klasy LL(1), używanymi do specyfikowania analizatorów składniowych. W trakcie implementacji skupiono się na podejściu obiektowym do problemu budowy analizatora leksykalnego (generującego dane dla parsera) i analizatora składniowego. Każdy element zaprojektowano jako klasę, możliwą do implementacji w obiektowych językach programowania. Projekt i autorska implementacja mogą służyć jako zbiór informacji, pozwalających zaimplementować własny parser. Program pozwala prześledzić kolejne kroki działania parsera, co czyni go użytecznym narzędziem edukacyjnym. Nie jest wymagana znajomości niskopoziomowych mechanizmów sterujących, takich jak automaty skończone (do rozpoznawania elementów parsera). Zaimplementowany parser nie musi być częścią kompilatora. Można go wykorzystać wszędzie tam, gdzie do sterowania programem wykorzystywane są zewnętrzne pliki (strumienie), zapisane według określonych zasad składniowych, jak np. skrypty. 1 Wstęp W latach 50 i 60 ubiegłego wieku programowanie systemów informatycznych było procesem żmudnym i skomplikowanym [1]. Zamiana projektu na gotowy kod była trudna, ponieważ język maszynowy (składający się z operacji niskopoziomowych) nie odzwierciedlał abstrakcji problemu, którego rozwiązaniem był projektowany system. Pośrednim rozwiązaniem było wprowadzenie intepreterów. Był to program, w którym kod interpretowany był na język maszynowy w czasie uruchomienia tego kodu. Rozwiązanie takie jednak było od około 10 do 20 razy wolniejsze niż oprogramowanie pisane bezpośrednio w języku maszynowym [1]. 1

2 Rozwiązaniem, które jest szeroko stosowane do dzisiaj, było zastosowanie kompilatora. Sam termin został wymyślony przez Grace Hooper na potrzeby języka programowania FLOC-MATIC, używanego do obliczeń finansowych [2]. Kompilator tłumaczy cały kod źródłowy języka wysokiego poziomu na język maszynowy. Pozwoliło to na odejście od rozkazów maszynowych do instrukcji bliższych rozwiązywanemu problemowi. Oprogramowanie było łatwiejsze do zrealizowania i utrzymywania. Sam kompilator utożsamia się z translatorem. Translator to program, tłumaczący kod napisany w języku programowania do równoważnego kodu w innym języku (w przypadku kompilatora do kodu maszynowego). Kompilacja składa się z pięciu zasadniczych faz: analizy leksykalnej, analizy składniowej, analizy semantycznej, optymalizacji i generowania kodu. Celem pracy jest implementacja dwóch pierwszych faz kompilacji: analizy leksykalnej i analizy składniowej (parsowania). Analizator leksykalny (lekser) generuje na podstawie kodu źródłowego ciąg leksemów (ciąg wejściowy), który następnie jest przekazywany do parsera klasy LL(1). Nazwa LL(1) oznacza, że ciąg wejściowy leksemów czytany jest od lewej do prawej strony (ang. left-right scan) oraz stosowane są lewostronne wyprowadzenia (ang. leftmost derivation). Wyprowadzenia te są wybierane na podstawie kolejnego (pojedynczego) elementu z ciągu wejściowego stąd liczba 1 w nazwie metody. Implementacji dokonano w języku programowania Java. Podane tutaj informacje powinny być jednak na tyle uniwersalne, że pozwolą na implementację analizatorów w dowolnym obiektowym języku programowania. Należy podkreślić, że w odróżnieniu od narzędzi yacc czy bison autorski program nie służy do generowania parserów. Jego głównym zadaniem jest sam rozbiór gramatyczny kodu źródłowego oraz wizualizacja tego procesu. 2 Implementacja analizatora leksykalnego Kompilacja rozpoczyna się od fazy analizy leksykalnej. Zadaniem tej analizy jest wygenerowanie ciągu leksemów na podstawie specyfikacji tokenów. Token to klasa elementów języka programowania, takich jak identyfikator, operator, literał liczbowy, słowo kluczowe czy średnik. Leksem to fragment konkretnego kodu źródłowego (atrybut), który zawiera informację o towarzyszącym mu tokenie. Na rysunku 1 przedstawiono przykład analizy leksykalnej. Pierwszy wiersz przedstawia fragment kodu źródłowego. Drugi i trzeci wiersz przedstawiają odpowiednio podział kodu na tokeny i atrybuty kolejnych leksemów. kod źródłowy: int a = 1; tokeny: typ prosty ' ' identyfikator operator przypisania ' ' literał liczbowy średnik atrybuty: int a = 1 ; Rys. 1: Przykład analizy leksykalnej fragmentu kodu źródłowego. Analizator leksykalny potrafi wykryć elementy, które nie pasują do żadnego tokenu. Wtedy powinien zostać zgłoszony błąd leksykalny. Błąd taki może być spowodowany literówką bądź użyciem słowa, które nie pasuje do żadnego wyrażenia regularnego. Lekser działa w oparciu o wyrażenia regularne. Zwykle mechanizm wyrażeń regularnych implementuje się za pomocą deterministycznych automatów skończonych (ang. 2

3 Deterministic Finite Automata, DFA) [1]. W oparciu o kolejne znaki kodu źródłowego automat przechodzi od stanu do stanu, akceptując kolejne słowa bądź stwierdzając brak dopasowania. W autorskim oprogramowaniu wykorzystano gotową bibliotekę wyrażeń regularnych, która dostępna jest w bibliotece standardowej Javy. Dwie użyte klasy: Pattern i Matcher znajdują się w pakiecie java.util.regex. LexemeRecord Token LexemesTable TokenList SimplyFileLTB SimplyFileTokenListBuilder <<interface>> LexemesTableBuilder <<interface>> TokenListBuilder LexemesTableBuilderFactory TokenListBuilderFactory getltb(buildername : String) : LexemesTableBuilder gettlb(name : String) : TokenListBuilder Rys. 2: Diagram klas, przedstawiający główne klasy analizatora leksykalnego. Rysunek 2 przedstawia diagram głównych klas, użytych w implementacji leksera. Należy zwrócić uwagę na klasę LexemesTable. Reprezentuje ona ciąg wykrytych leksemów, które zostaną przekazane do parsera. Każdy leksem reprezentowany jest przez obiekt klasy LexemeRecord. Obiekt ten przechowuje informacje o atrybucie, użytym tokenie (reprezentowanym przez obiekt klasy Token), jak również o pozycji w kodzie źródłowym. Tokeny przechowują informacje o wyrażeniach regularnych, używanych do rozpoznawania leksemów i korzystają z wymienionych klas Pattern i Matcher. Za budowę ciągu leksemów odpowiedzialny jest interfejs LexemesTableBuilder, podobnie jest z budową listy tokenów (interfejs TokenListBuilder). Wykorzystano tutaj parę wzorców projektowych: Fabryka abstrakcyjna i Metoda wytwórcza. Takie połączenie udostępnia interfejs do budowania powyższych elementów i umożliwia wykorzystanie w przyszłości różnych algorytmów budujących [3]. 3 Gramatyka i parser klasy LL(1) Analizator leksykalny ułatwia dalszą analizę kodu rozpoznaje poszczególne elementy kodu. W kolejnych fazach kompilacji odpada konieczność rozpoznawania klasy, do której należy dany podciąg znaków. Jak wspomniano lekser pracuje w oparciu o wyrażenia regularne. Wyrażenia te wchodzą w skład elementów gramatyki regularnej (według hierachii Chomsky ego [4]). Gramatyki regularne nie wystarczają jednak do sprawdzania kolejności leksemów ani reguł pomiędzy nimi zachodzących. Należy skorzystać z bardziej ogólnej klasy gramatyk gramatyk bezkontekstowych. Jest to czwórka uporządkowana G = {N, T, R, S}, gdzie: N to zbiór symboli nieterminalnych; T to zbiór symboli terminalnych, można je utożsamiać z tokenami; 3

4 R to zbiór reguł (produkcji); S to symbol startowy (będący nieterminalem). Analizator składniowy, korzystając z gramatyk bezkontekstowych, potrafi stwierdzić czy dany łańcuch symboli leksykalnych należy do języka, generowanego przez tą gramatykę. Innymi słowy, czy możliwe są takie wyprowadzenia (definiowane za pomocą reguł), które pozwalają na dopasowanie do ciągu leksemów. Istnieją dwie główne strategie analizy składniowej: zstępujące bądź wstępujące [5]. Metody zstępujące wyprowadzają symbol startowy do ciągu, który jest równoważny ciągowi wejściowemu. Metody wstępujące redukują ciąg wejściowy do symbolu startowego. Parser LL(1) należy do klasy analizatorów realizujących strategię zstępującą. Wybieranie kolejnej produkcji następuje w oparciu o tablicę parsowania. By utworzyć tę tablicę wymagane jest utworzenie zbiorów First i Follow dla każdego symbolu nieterminalnego. Intuicyjnie, zbiór First oznacza zbiór tych symboli terminalnych, które można wyprowadzić z danego symbolu nieterminalnego i które znajdują się na początku wyprowadzanego ciągu. Zbiór Follow zawiera te symbole terminalne, które w wyprowadzeniu znajdują się po prawej stronie danego nieterminalu. Dodatkowo uwzględnia się symbol terminalny $, oznaczający koniec ciągu. Analizowana metoda korzysta z gramatyk klasy LL(1), które są specjalnym przypadkiem gramatyki bezkontekstowej. Gramatyka klasy LL(1) posiada dwa główne ograniczenia: zbiór First nie może zawierać symbolu terminalnego, który jest możliwy do wyprowadzenia przez dwie (lub więcej) produkcji z danego symbolu nieterminalnego; zbiory First i Follow muszą być rozłączne, tj. ten sam symbol terminalny nie może wystąpić zarówno w jednym, jak i w drugim zbiorze danego nieterminala. ( * ) $ E (E) * - - Tab. 1: Przykładowa tablica parsowania. Tabela 1 przedstawia przykładową tablicę parsowania. Wiersze reprezentują symbole nieterminalne, występujące na początku ciągu wyprowadzeń. Kolumny to wszystkie możliwe do wystąpienia w ciągu leksemów symbole terminalne. Wybór kolejnej produkcji polega na wyborze komórki, leżącej na przecięciu wiersza symbolu nieterminalnego (ze szczytu ciągu wyprowadzeń) i symbolu terminalnego (ze szczytu ciągu wejściowego). Brak produkcji w danej komórce oznacza błąd składniowy analizowanego ciągu leksemów. Błąd składniowy nastąpi też wtedy, gdy terminal będący na szczycie ciągu wyprowadzeń i leksem na szczycie ciągu wejściowego reprezentują różne jednostki leksykalne. 4 Projekt i implementacja parsera klasy LL(1) Parser jest kluczowym elementem opisywanego programu. Dlatego poświęcono mu najwięcej uwagi, zarówno w kwestii projektowej, jak i implementacyjnej. Przedstawione zostaną podstawowe elementy parsera oraz klasy, odpowiadające za wyprowadzanie kolejnych symboli. 4

5 4.1 Podstawowe klasy parsera klasy LL(1) SymbolSet getnonterminalsymbols() : Set getterminalsymbols() : Set getsymbol(name : String) : Symbol ProductionRules rules ContextFreeGrammar Rule SymbolSequence 0..* 1..* symbols Symbol startsymbol EpsylonSymbol TerminalSymbol NonterminalSymbol Rys. 3: Podstawowe klasy parsera. Na rysunku 3 przedstawiono podstawowe klasy w projekcie parsera. Należy podkreślić znaczenie dwóch klas: Symbol i ContextFreeGrammar. Klasa Symbol reprezentuje symbol leksykalny. ContextFreeGrammar przechowuje informacje na temat produkcji (klasa agregująca ProductionRules), zbioru symboli (klasa agregująca SymbolSet) oraz symbolu startowego (referencja do obiektu klasy NonterminalSymbol). Często wykorzystywana jest klasa SymbolSequence. Jest to klasa agregująca referencje do obiektów klasy Symbol, zawierająca metody przydatne do operacji na listach. Metody te, jak na przykład gethead (zwraca pierwszy symbol ciągu) czy gettail (zwraca ogon listy) nie są zaimplementowane w kontenerach biblioteki standardowej Javy. Pojedyncza produkcja jest reprezentowana w obiekcie klasy Rule (obiekty tej klasy agregowane są w klasie ProductionRules). Zawiera ona referencję do symbolu nieterminalnego, stojącego po lewej stronie produkcji oraz sekwencji symboli (SymbolSequence), stojących po prawej stronie produkcji. 4.2 Budowa zbiorów First i Follow Algorytm, zaproponowany w [1], służący do budowy zbiorów First i Follow jest algorytmem o charakterze rekurencyjnym, pracującym na listach. Do takiej klasy algorytmów można zastosować funkcyjne języki programowania [6]. Języki te wspierają niektóre operacje, jak pobieranie ogona czy głowy listy, a które musiały zostać zaimplementowane (metody gettail i gethead klasy SymbolSequence). Co więcej, elementy zbioru First wymagają dodatkowej informacji o produkcji, która wyprowadza dany element. Celem rozwiązania powyższych problemów utworzono klasę SymbolRuleSet, która przechowuje instancje klasy SymbolRulePair. Ta ostatnia jest po prostu parą referencji do obiektów Symbol oraz Rule. Klasa SymbolRuleSet reprezentuje zbiór First danego symbolu nieterminalnego wtedy przechowuje pary symbol terminalny, produkcja. Zbiór Follow również jest odwzorowany w klasie SymbolRuleSet, przy czym nie jest wymagana informacja o produkcji. Na rysunku 4 przedstawiono diagram opisywanych w tym podrozdziale klas. Dodatkowo zaznaczono klasę FirstFollowSets, agregującą zbiory First i Follow każdego 5

6 SymbolRulePair ParsingTable rule : Rule symbol : Symbol FirstFollowSets SymbolParsingSet firstsets : Map followsets : Map buildfirstsets() : boolean buildfollowsets() : boolean Rys. 4: Diagram klas, będących kontenerami na elementy zbiorów First i Follow. symbolu nieterminalnego. Wykorzystano strukturę mapy, w której kluczem jest symbol nieterminalny, a wartością odpowiedni zbiór. 4.3 Implementacja produkcji lewostronnego wyprowadzenia NodeStack 1 DerivationWorker getusednodes() : List 1 DerivationJournal 1 0..* SymbolNode usednodes getparent() : SymbolNode getchildren() : List 1..* DerivationManager 0..* DerivationJournalEntry Rys. 5: Diagram klas, odpowiadających za konstrukcję lewostronnego wyprowadzenia. Na rysunku 5 przedstawiono uproszczony diagram klas, używanych przy tworzeniu lewostronnego wyprowadzenia. Zaprojektowano i zaimplementowano kontener do obsługi ciągu wyprowadzeń klasę NodeStack z wykorzystaniem listy wiązanej (klasy java.util.linkedlist). Reprezentuje ona ciąg wyprowadzeń, którego elementami są obiekty klasy SymbolNode. Jest to po prostu symbol z dodatkowymi informacjami: z którego symbolu został wyprowadzony (metoda getparent) i jakie symbole zostały z niego wyprowadzone (metoda getchildren). O ile w samym ciągu wyprowadzeń te informacje nie są zbyt istotne, to stają się ważne po zdjęciu symbolu ze stosu i dodawaniu nowych elementów do stosu. Informacje na temat rodzica i dzieci są cały czas aktualizowane. Klasa DerivationWorker zawiera informację o wszystkich zdjętych elementach ze stosu wyprowadzeń (metoda getusednodes zwraca listę obiektów typu SymbolNode). Zajmuje się ona również logiką tworzenia wyprowadzenia. Klasę DerivationManager utworzono głównie dla wygody programisty i dla lepszej współpracy z GUI. Jeżeli parsowanie zakończy się sukcesem, to na liście usednodes powinny być wszystkie wyprowadzane symbole. Wiedząc, że pierwszym symbolem na liście jest symbol startowy (jest on pierwszy zdejmowany ze stosu wyprowadzeń) oraz mając informację o symbolach (dzieciach), które wyprowadził możliwe jest utworzenie struktury drzewiastej, zwanej drzewem rozbioru gramatyki. 5 Wizualizacja działania programu Z punktu widzenia użytkownika ważna jest interakcja pomiędzy widokiem (oknem aplikacji) a logiką parsera, tak aby zapewnić spójny graficzny interfejs użytkownika (GUI). 6

7 W tym celu wykorzystano gotowe biblioteki graficzne (Swing oraz AWT). Należy też podkreślić wykorzystanie uproszczonego wzorca projektowego Obserwator [3]. 5.1 Wykorzystanie obiektu Słuchacza Uproszczenie wzorca Obserwator polega na pominięciu interfejsu Obserowany oraz utworzeniu nowego interfejsu (Słuchacza, ang. Listener) w zależności od zadania. Przykładowo, przedstawiana wcześniej klasa DerivationWorker posiada referencję do obiektu, realizującego interfejs DerivationWorkerListener. W trakcie pracy nad ciągiem wyprowadzeń wywoływane są metody, zadeklarowane wcześniej w interfejsie DerivationWorkerListener, takie jak informowanie o wyprowadzeniu symbolu nieterminalnego (metoda derivatenonterminal) bądź napotkaniu błędu (metody z prefiksem notmatching). ParserPanel::LinkedWithPanelDerivationListener DerivationWorker derivateterminal(worker : DerivationWorker,node : SymbolNode) : void derivatenonterminal(worker : DerivationWorker,node : SymbolNode,rule : Rule) : void notmatchingterminals(worker : DerivationWorker,invalidNode : SymbolNode,invalidLexeme : LexemeRecord) : void notmatchingrule(worker : DerivationWorker,invalidNode : SymbolNode,invalidSymbol : TerminalSymbol) : void changedstate(worker : DerivationWorker,state : ParsingResult) : void listener <<realize>> <<interface>> DerivationWorkerListener derivateterminal(worker : DerivationWorker,node : SymbolNode) : void derivatenonterminal(worker : DerivationWorker,node : SymbolNode,rule : Rule) : void notmatchingterminals(worker : DerivationWorker,invalidNode : SymbolNode,invalidLexeme : LexemeRecord) : void notmatchingrule(worker : DerivationWorker,invalidNode : SymbolNode,invalidSymbol : TerminalSymbol) : void changedstate(worker : DerivationWorker,state : ParsingResult) : void ParserPanel Rys. 6: Diagram klas z uwzględnieniem interfejsu DerivationWorkerListener. Interfejs DerivationWorkerListener może być implementowany przez jakikolwiek komponent graficzny, co umożliwia prezentację aktualnego stanu parsera. Na rysunku 6 przedstawiono uproszczony diagram klas z wykorzystaniem klasy słuchacza, wykorzystywanej w klasie ParserPanel (klasa, odpowiadająca za rysowanie widoku parsera). 5.2 Przykładowy wyglad parsera Rysunek 7 przedstawia zrzut ekranu z autorskiego programu LLVisualizer (graficzny interfejs użytkownika do zaimplementowanego parsera). Zbiór leksemów (uzyskany wcześniej z analizy leksykalnej, zakładka Lekser) został poddany analizie składniowej. Program generuje drzewo rozbioru gramatycznego, widoczne po lewej stronie obecnie zaimplementowane za pomocą komponentu JTree z biblioteki Swing. Możliwe jest przejrzenie wykorzystanych produkcji (tabela w centralnej części okna). 6 Podsumowanie Do autorskiej implementacji parsera klasy LL(1) wymagane było poznanie teorii kompilacji, zwłaszcza analizy leksykalnej i analizy składniowej. Głównym celem pracy było zaznajomienie Czytelnika z problemem budowy obiektowego parsera klasy LL(1). 7

8 Rys. 7: Okno aplikacji LLVisualizer po dokonaniu analizy składniowej. Budowa aplikacji wymagała zaprojektowania odpowiednich klas, zgodnych z paradygmatem programowania obiektowego. W wielu sytuacjach mogło to rodzić problemy, ze względu na rekurencyjny charakter algorytmów, dostosowanych do języków funkcyjnych. Należało wyodrębnić odpowiednie elementy programu, co zostało przedstawione. Implementacja, prócz ugruntowania wiedzy teoretycznej, pozwoliła Autorowi na poszerzenie swojej wiedzy na temat programowania aplikacji w języku Java. Poprawiono umiejętności wykorzystania wyrażeń regularnych oraz programowania graficznego interfejsu użytkownika. Zaprezentowana aplikacja jest nadal rozwijana. Warstwa logiki może być łatwo wykorzystana przy budowie własnego kompilatora. Warstwa prezentacji przedstawia wynik działania parsera w atrakcyjny dla użytkownika sposób. Dlatego poniższa praca, wraz z programem, dedykowana jest celom edukacyjnym w kursach, które swoim materiałem obejmują teorię kompilacji. Literatura [1] A. Aiken, Compilers Course, Stanford University, [2] R. Norman, Biographies of Women Mathematicians Grace Hooper, Agnes Scott College, [3] E. Gamma, R. Helm, R. Johnson, J. Vlissides, Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku, Helion, [4] N. Chomsky, Three models for the description od language, Massachusetts Institute od Technology, [5] W. Complak, B. Bogacki, Podstawy kompilatorów, Politechnika Poznańska, [6] M. Kubica, Programowanie funkcyjne,

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

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

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

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

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

Języki formalne i automaty Ćwiczenia 3

Języki formalne i automaty Ćwiczenia 3 Języki formalne i automaty Ćwiczenia 3 Autor: Marcin Orchel Spis treści Spis treści... 1 Wstęp teoretyczny... 2 Algorytm LL(1)... 2 Definicja zbiorów FIRST1 i FOLLOW1... 3 Konstrukcja tabeli parsowania

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

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

problem w określonym kontekście siły istotę jego rozwiązania

problem w określonym kontekście siły istotę jego rozwiązania Wzorzec projektowy Christopher Alexander: Wzorzec to sprawdzona koncepcja, która opisuje problem powtarzający się wielokrotnie w określonym kontekście, działające na niego siły, oraz podaje istotę jego

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

Wykład 5. Jan Pustelnik

Wykład 5. Jan Pustelnik Wykład 5 Jan Pustelnik Konstruowanie parsera Istnieje kilka podstawowych metod konstrukcji parsera bez nawracania Ze względów wydajnościowych parser bez nawracania jest jedynym sensownym rozwiązaniem (prawo

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

Metody Kompilacji Wykład 7 Analiza Syntaktyczna

Metody Kompilacji Wykład 7 Analiza Syntaktyczna Metody Kompilacji Wykład 7 Analiza Syntaktyczna Parsowanie Parsowanie jest to proces określenia jak ciąg terminali może być generowany przez gramatykę. Włodzimierz Bielecki WI ZUT 2/57 Parsowanie Dla każdej

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

Wykład Ćwiczenia Laboratorium Projekt Seminarium

Wykład Ćwiczenia Laboratorium Projekt Seminarium WYDZIAŁ ELEKTRONIKI KARTA PRZEDMIOTU Nazwa w języku polskim Języki programowania Nazwa w języku angielskim Programming languages Kierunek studiów (jeśli dotyczy): Informatyka - INF Specjalność (jeśli dotyczy):

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

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

Włączenie analizy leksykalnej do analizy składniowej jest nietrudne; po co więc jest wydzielona?

Włączenie analizy leksykalnej do analizy składniowej jest nietrudne; po co więc jest wydzielona? Po co wydziela się analizę leksykalną? Wykład7,str1 Włączenie analizy leksykalnej do analizy składniowej jest nietrudne; po co więc jest wydzielona? 1 Analiza leksykalna jest prostsza niż składniowa leksyka

Bardziej szczegółowo

Generatory analizatorów

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

Bardziej szczegółowo

Wprowadzenie do kompilatorów

Wprowadzenie do kompilatorów Wprowadzenie do kompilatorów Czy ja kiedykolwiek napisz jaki kompilator? Jakie zadania ma do wykonania kompilator? Czy jzyk formalny to rodzaj jzyka programowania? Co to jest UML?, Czy ja kiedykolwiek

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

Semantyka i Weryfikacja Programów - Laboratorium 6

Semantyka i Weryfikacja Programów - Laboratorium 6 Semantyka i Weryfikacja Programów - Laboratorium 6 Analizator leksykalny i składniowy - kalkulator programowalny Cel. Przedstawienie zasad budowy i działania narzędzi do tworzenia kompilatorów języków

Bardziej szczegółowo

0.1 Lewostronna rekurencja

0.1 Lewostronna rekurencja 0.1 Lewostronna rekurencja Sprawdź czy poniższa gramatyka E jest zgodna z LL(1), tzn. czy umożliwia przeprowadzenie analizy bez powrotu z wyprzedzeniem o jeden symbol. Wyjaśnienie pojęcia LL(1): Pierwsze

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

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA Bieżący sylabus w semestrze zimowym roku 2016/17

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA Bieżący sylabus w semestrze zimowym roku 2016/17 Załącznik nr 4 do Uchwały Senatu nr 430/01/2015 SYLABUS DOTYCZY CYKLU KSZTAŁCENIA 2016-2018 Bieżący sylabus w semestrze zimowym roku 2016/17 1.1. PODSTAWOWE INFORMACJE O PRZEDMIOCIE/MODULE Nazwa przedmiotu/

Bardziej szczegółowo

Analizator syntaktyczny

Analizator syntaktyczny Analizator syntaktyczny program źródłowy analizator leksykalny token daj nast. token analizator syntaktyczny drzewo rozbioru syntaktycznego analizator semantyczny kod pośredni tablica symboli Analizator

Bardziej szczegółowo

Analiza i projektowanie obiektowe 2016/2017. Wykład 10: Tworzenie projektowego diagramu klas

Analiza i projektowanie obiektowe 2016/2017. Wykład 10: Tworzenie projektowego diagramu klas Analiza i projektowanie obiektowe 2016/2017 Wykład 10: Tworzenie projektowego diagramu klas Jacek Marciniak Wydział Matematyki i Informatyki Uniwersytet im. Adama Mickiewicza 1 Plan wykładu 1. Projektowy

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

Uproszczony schemat działania kompilatora

Uproszczony schemat działania kompilatora Uproszczony schemat działania kompilatora Wykład7,str.1 program źródłowy ciąg leksemów drzewo wywodu drzewo i tablice symboli analiza leksykalna analiza syntaktyczna analiza semantyczna KOMPILATOR generacja

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

Historia modeli programowania

Historia modeli programowania Języki Programowania na Platformie.NET http://kaims.eti.pg.edu.pl/ goluch/ goluch@eti.pg.edu.pl Maszyny z wbudowanym oprogramowaniem Maszyny z wbudowanym oprogramowaniem automatyczne rozwiązywanie problemu

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

PRZEWODNIK PO PRZEDMIOCIE

PRZEWODNIK PO PRZEDMIOCIE Nazwa przedmiotu: Kierunek: Inżynieria Biomedyczna Rodzaj przedmiotu: obowiązkowy moduł specjalności informatyka medyczna Rodzaj zajęć: wykład, laboratorium PROGRAMOWANIE OBIEKTOWE Object-Oriented Programming

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

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

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek Wprowadzenie Organizacja pracy i środowisko programistyczne Mirosław Ochodek Miroslaw.Ochodek@pwsz.pila.pl Miroslaw.Ochodek@cs.put.poznan.pl Dane kontaktowe Mirosław Ochodek E-mail: Miroslaw.Ochodek@pwsz.pila.pl

Bardziej szczegółowo

Uproszczony schemat działania kompilatora

Uproszczony schemat działania kompilatora Wykład7,13XI2009,str.1 Uproszczony schemat działania kompilatora program źródłowy ciąg leksemów drzewo wywodu drzewo i tablice symboli analiza leksykalna analiza syntaktyczna analiza semantyczna KOMPILATOR

Bardziej szczegółowo

Programowanie w Javie nazwa przedmiotu SYLABUS A. Informacje ogólne

Programowanie w Javie nazwa przedmiotu SYLABUS A. Informacje ogólne Programowanie w Javie nazwa SYLABUS A. Informacje ogólne Elementy składowe sylabusu Nazwa jednostki prowadzącej kierunek Nazwa kierunku studiów Poziom kształcenia Profil studiów Forma studiów Kod Język

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

Zaawansowane programowanie obiektowe - wykład 5

Zaawansowane programowanie obiektowe - wykład 5 Zaawansowane programowanie obiektowe - wykład 5 dr Piotr Jastrzębski (czynnościowe) opisują zachowanie obiektów, komunikację pomiędzy nimi i ich odpowiedzialność. Interpreter Iterator (kursor) Łańcuch

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 7 Marcin Młotkowski 8 kwietnia 2015 Plan wykładu Z życia programisty, część 1 1 Z życia programisty, część 1 2 3 Z życia programisty, część 2 Model View Controller MVC w

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

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

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć

Bardziej szczegółowo

Tworzenie języków specyfikacji dla zagadnień numerycznych

Tworzenie języków specyfikacji dla zagadnień numerycznych Tworzenie języków specyfikacji dla zagadnień numerycznych prof. dr hab. inż. Norbert Sczygiol dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska 11 września

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 regularne i automaty skoczone

Gramatyki regularne i automaty skoczone Gramatyki regularne i automaty skoczone Alfabet, jzyk, gramatyka - podstawowe pojcia Co to jest gramatyka regularna, co to jest automat skoczony? Gramatyka regularna Gramatyka bezkontekstowa Translacja

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

Podstawy programowania III WYKŁAD 4

Podstawy programowania III WYKŁAD 4 Podstawy programowania III WYKŁAD 4 Jan Kazimirski 1 Podstawy UML-a 2 UML UML Unified Modeling Language formalny język modelowania systemu informatycznego. Aktualna wersja 2.3 Stosuje paradygmat obiektowy.

Bardziej szczegółowo

Pierwsze kroki. Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura

Pierwsze kroki. Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Pierwsze kroki Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura Co znaczy

Bardziej szczegółowo

Języki formalne i automaty Ćwiczenia 8

Języki formalne i automaty Ćwiczenia 8 Języki formalne i automaty Ćwiczenia 8 Autor: Marcin Orchel Spis treści Spis treści... 1 Wstęp teoretyczny... 2 Konwersja NFA do DFA... 2 Minimalizacja liczby stanów DFA... 4 Konwersja automatu DFA do

Bardziej szczegółowo

Podstawy i języki programowania

Podstawy i języki programowania Podstawy i języki programowania Laboratorium 1 - wprowadzenie do przedmiotu mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 16 października 2017 1 / 25 mgr inż. Krzysztof Szwarc Podstawy i

Bardziej szczegółowo

Forum Client - Spring in Swing

Forum Client - Spring in Swing Forum Client - Spring in Swing Paweł Charkowski. 0. Cel projektu Celem projektu jest próba integracji Spring Framework z różnymi technologiami realizacji interfejsu użytkownika, oraz jej ocena. Niniejszy

Bardziej szczegółowo

Podstawy generatora YACC. Bartosz Bogacki.

Podstawy generatora YACC. Bartosz Bogacki. Podstawy generatora YACC Bartosz Bogacki Bartosz.Bogacki@cs.put.poznan.pl Witam Państwa. Wykład, który za chwilę Państwo wysłuchają dotyczy generatora analizatorów składniowych YACC. Zapraszam serdecznie

Bardziej szczegółowo

Wzorce projektowe Michał Węgorek

Wzorce projektowe Michał Węgorek Wzorce projektowe Michał Węgorek Wzorce projektowe Plan prezentacji Co to jest i po co to jest? Podział Najczęściej spotykane wzorce Bibliografia Co to jest i po co to jest? Wzorzec projektowy (ang. Design

Bardziej szczegółowo

Programowanie współbieżne i rozproszone

Programowanie współbieżne i rozproszone Programowanie współbieżne i rozproszone WYKŁAD 11 dr inż. CORBA CORBA (Common Object Request Broker Architecture) standard programowania rozproszonego zaproponowany przez OMG (Object Management Group)

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

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 11 - przegląd wybranych wzorców mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 24 maja 2017 1 / 38 mgr inż. Krzysztof Szwarc Programowanie obiektowe Wzorce

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Wstęp [2/2] Wbrew częstemu przekonaniu, nie są one gotowymi rozwiązaniami, to tylko półprodukty rozwiązania.

Wstęp [2/2] Wbrew częstemu przekonaniu, nie są one gotowymi rozwiązaniami, to tylko półprodukty rozwiązania. Adrian Skalczuk Szymon Kosarzycki Spis Treści Wstęp [1/2] Wzorce projektowe są nieodłącznym przyjacielem programisty pozwalają pisać czystszy kod, łatwiejszy do zrozumienia przez innych i zapewniają pewien

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

Egzamin / zaliczenie na ocenę*

Egzamin / zaliczenie na ocenę* WYDZIAŁ PODSTAWOWYCH PROBLEMÓW TECHNIKI Zał. nr 4 do ZW33/01 KARTA PRZEDMIOTU Nazwa w języku polskim : INŻYNIERIA OPROGRAMOWANIA Nazwa w języku angielskim: SOFTWARE ENGINEERING Kierunek studiów (jeśli

Bardziej szczegółowo

Metody Kompilacji Wykład 13

Metody Kompilacji Wykład 13 Metody Kompilacji Wykład 13 Prosty Translator Translator dla prostych wyrażeń Schemat translacji sterowanej składnią często służy za specyfikację translatora. Schemat na następnym slajdzie zostanie użyty

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

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

Wzorce projektowe i refaktoryzacja

Wzorce projektowe i refaktoryzacja Wzorce projektowe i refaktoryzacja Paweł Kozioł p.koziol@students.mimuw.edu.pl 18.01.2005 Moja praca magisterska Narzędzie dla środowiska Eclipse wspierające stosowanie wzorców projektowych J2EE Prowadzący:

Bardziej szczegółowo

Język JAVA podstawy. wykład 1, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język JAVA podstawy. wykład 1, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy wykład 1, część 3 1 Język JAVA podstawy Plan wykładu: 1. Krótka historia Javy 2. Jak przygotować sobie środowisko programistyczne 3. Opis środowiska JDK 4. Tworzenie programu krok po

Bardziej szczegółowo

PROLOG WSTĘP DO INFORMATYKI. Akademia Górniczo-Hutnicza. Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej.

PROLOG WSTĘP DO INFORMATYKI. Akademia Górniczo-Hutnicza. Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej. Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej WSTĘP DO INFORMATYKI Adrian Horzyk PROLOG www.agh.edu.pl Pewnego dnia przyszedł na świat komputer Komputery

Bardziej szczegółowo

Mariusz Trzaska Modelowanie i implementacja systemów informatycznych

Mariusz Trzaska Modelowanie i implementacja systemów informatycznych Mariusz Trzaska Modelowanie i implementacja systemów informatycznych Notka biograficzna Dr inż. Mariusz Trzaska jest adiunktem w Polsko-Japońskiej Wyższej Szkole Technik Komputerowych, gdzie zajmuje się

Bardziej szczegółowo

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ), PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ), Program 351203 Opracowanie: Grzegorz Majda Tematyka zajęć 1. Wprowadzenie do aplikacji internetowych

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

Wykład 10. Translacja sterowana składnią

Wykład 10. Translacja sterowana składnią Wykład 10 Translacja sterowana składnią Translacja sterowana składnią Z konstrukcjami języków programowania wiąże się pewną informację przez dołączenie atrybutów do symboli gramatyki reprezentujących te

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

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

Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 1

Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 1 Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 1 Zofia Kruczkiewicz Zofia Kruczkiewicz Inżynieria oprogramowania INEK011 1 Składnia elementów na diagramach UML 1. W prezentacji składni diagramów

Bardziej szczegółowo

Wzorce projektowe ArrayList. Aplikacja i zdarzenia. Paweł Chodkiewicz

Wzorce projektowe ArrayList. Aplikacja i zdarzenia. Paweł Chodkiewicz Wzorce projektowe ArrayList DataGridView Aplikacja i zdarzenia Paweł Chodkiewicz Wzorzec uniwersalne rozwiązanie często powtarzających się problemów. Wzorzec opisuje problem, który powtarza się wielokrotnie

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 Język programowania prosty bezpieczny zorientowany obiektowo wielowątkowy rozproszony przenaszalny interpretowany dynamiczny wydajny Platforma

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

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 07 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami tworzenia aplikacji okienkowych w C#. Wprowadzenie teoretyczne. Rozważana w

Bardziej szczegółowo

METODY REPREZENTACJI INFORMACJI

METODY REPREZENTACJI INFORMACJI Politechnika Gdańska Wydział Elektroniki, Telekomunikacji i Informatyki Magisterskie Studia Uzupełniające METODY REPREZENTACJI INFORMACJI Ćwiczenie 1: Budowa i rozbiór gramatyczny dokumentów XML Instrukcja

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

Analiza i projektowanie obiektowe 2017/2018. Wykład 3: Model wiedzy dziedzinowej

Analiza i projektowanie obiektowe 2017/2018. Wykład 3: Model wiedzy dziedzinowej Analiza i projektowanie obiektowe 2017/2018 Wykład 3: Model wiedzy dziedzinowej Jacek Marciniak Wydział Matematyki i Informatyki Uniwersytet im. Adama Mickiewicza 1 Plan wykładu 1. Model wiedzy dziedzinowej

Bardziej szczegółowo

Analiza metodą zstępującą. Bartosz Bogacki.

Analiza metodą zstępującą. Bartosz Bogacki. Analiza metodą zstępującą Bartosz Bogacki Bartosz.Bogacki@cs.put.poznan.pl Witam Państwa. Wykład, który za chwilę Państwo wysłuchają dotyczy analizy metodą zstępującą. Zapraszam serdecznie do wysłuchania.

Bardziej szczegółowo

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery http://xqtav.sourceforge.net XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery dr hab. Jerzy Tyszkiewicz dr Andrzej Kierzek mgr Jacek Sroka Grzegorz Kaczor praca mgr pod

Bardziej szczegółowo

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny Klasa 2 INFORMATYKA dla szkół ponadgimnazjalnych zakres rozszerzony Założone osiągnięcia ucznia wymagania edukacyjne na poszczególne oceny Algorytmy 2 3 4 5 6 Wie, co to jest algorytm. Wymienia przykłady

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

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. 1. Przygotowanie środowiska programistycznego. Zajęcia będą

Bardziej szczegółowo

Zofia Kruczkiewicz - Modelowanie i analiza systemów informatycznych 1

Zofia Kruczkiewicz - Modelowanie i analiza systemów informatycznych 1 Charakterystyka oprogramowania obiektowego 1. Definicja systemu informatycznego 2. Model procesu wytwarzania oprogramowania - model cyklu życia oprogramowania 3. Wymagania 4. Problemy z podejściem nieobiektowym

Bardziej szczegółowo

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami. UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami

Bardziej szczegółowo

Informatyka I. dr inż. Andrzej Czerepicki.

Informatyka I. dr inż. Andrzej Czerepicki. Informatyka I dr inż. Andrzej Czerepicki a.czerepicki@wt.pw.edu.pl http://www2.wt.pw.edu.pl/~a.czerepicki Politechnika Warszawska Wydział Transportu 2018 Sprawy organizacyjne Harmonogram zajęć Regulamin

Bardziej szczegółowo

Dodatkowo planowane jest przeprowadzenie oceny algorytmów w praktycznym wykorzystaniu przez kilku niezależnych użytkowników ukończonej aplikacji.

Dodatkowo planowane jest przeprowadzenie oceny algorytmów w praktycznym wykorzystaniu przez kilku niezależnych użytkowników ukończonej aplikacji. Spis Treści 1. Wprowadzenie... 2 1.1 Wstęp... 2 1.2 Cel pracy... 2 1.3 Zakres pracy... 2 1.4 Użyte technologie... 2 1.4.1 Unity 3D... 3 2. Sztuczna inteligencja w grach komputerowych... 4 2.1 Zadanie sztucznej

Bardziej szczegółowo

Wykład 1 Inżynieria Oprogramowania

Wykład 1 Inżynieria Oprogramowania Wykład 1 Inżynieria Oprogramowania Wstęp do inżynierii oprogramowania. Cykle rozwoju oprogramowaniaiteracyjno-rozwojowy cykl oprogramowania Autor: Zofia Kruczkiewicz System Informacyjny =Techniczny SI

Bardziej szczegółowo

INFORMATYKA TECHNICZNA Badanie możliwości wykorzystania języka AutoLISP i środowiska VisualLISP w systemie CAx

INFORMATYKA TECHNICZNA Badanie możliwości wykorzystania języka AutoLISP i środowiska VisualLISP w systemie CAx INFORMATYKA TECHNICZNA Badanie możliwości wykorzystania języka AutoLISP i środowiska VisualLISP w systemie CAx 1. WPROWADZENIE Program AutoCAD ma wielu użytkowników i zajmuje znaczące miejsce w graficznym

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

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

Wzorce projektowe. dr inż. Marcin Pietroo

Wzorce projektowe. dr inż. Marcin Pietroo Wzorce projektowe dr inż. Marcin Pietroo Iterator czynnościowy wzorzec projektowy (obiektowy), którego celem jest zapewnienie sekwencyjnego dostępu do podobiektów zgrupowanych w większym obiekcie (np.

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Zaawansowane programowanie w C++ (PCP) Wykład 4 - wzorce projektowe. dr inż. Robert Nowak - p. 1/18 Powtórzenie klasy autonomiczne tworzenie nowych typów: dziedziczenie i agregacja dziedziczenie: przedefiniowywanie

Bardziej szczegółowo