Programy pomocnicze: diff, make, systemy rcs i cvs, debugger. Zarządzanie wersjami.

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

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

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Podstawy Kompilatorów

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

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

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28

Tworzenie oprogramowania

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 25 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 38

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

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

Podstawy Kompilatorów

Wstęp do programowania INP003203L rok akademicki 2016/17 semestr zimowy. Laboratorium 1. Karol Tarnowski A-1 p.

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Programowanie w języku Python. Grażyna Koba

Podstawy Kompilatorów

Podstawy Programowania. Wykład 1

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Praktyka Programowania

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

Utworzenie pliku. Dowiesz się:

Programy użytkowe (utilities)

1 Podstawy c++ w pigułce.

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Ćwiczenia nr 11. Translatory. Wprowadzenie teoretyczne

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 1. Karol Tarnowski A-1 p.

L E X. Generator analizatorów leksykalnych

Programowanie w C++ Wykład 10. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 10) Programowanie w C++ 1 / 21

Podstawy Kompilatorów

1 Podstawy c++ w pigułce.

Podstawy programowania

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

PARADYGMATY I JĘZYKI PROGRAMOWANIA. lex/flex i yacc/bison w- 4 (2014)

Wstęp do Programowania, laboratorium 02

Języki programowania zasady ich tworzenia

Generatory analizatorów

KONSTRUKCJA KOMPILATORÓW

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

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!

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Programowanie komputerów

Programowanie proceduralne w języku C++ Podstawy

Java jako język programowania

Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski

PASCAL. Etapy pisania programu. Analiza potrzeb i wymagań (treści zadania) Opracowanie algorytmu Kodowanie Kompilacja Testowanie Stosowanie

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

Laboratorium 10: Maszyna stanów

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Programowanie i techniki algorytmiczne

Tworzenie oprogramowania

Podstawy Programowania.

Wstęp do programowania. Wykład 1

Technika mikroprocesorowa. Struktura programu użytkownika w systemie mikroprocesorowym

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

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

Języki i metodyka programowania

Algorytm. a programowanie -

Java EE produkcja oprogramowania

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

Podstawy programowania - 1

ALGORYTMY I PROGRAMY

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

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Podstawy Programowania

Generated by Foxit PDF Creator Foxit Software For evaluation only. System Szablonów

TEST KOŃCOWY DLA KLASY III GIMNAZJUM- POGRAMOWANIE. Szkoła Podstawowa Nr 5. im. Księcia Mazowieckiego Siemowita IV w Gostyninie.

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C

Podstawy wykorzystania bibliotek DLL w skryptach oprogramowania InTouch

Make jest programem komputerowym automatyzującym proces kompilacji programów, na które składa się wiele zależnych od siebie plików.

Wstęp do programowania

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

Fragment wykładu z języka C ( )

Algorytmika i programowanie usystematyzowanie wiadomości

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Podstawy Programowania

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

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

System kontroli wersji, system zarządzania kodem źródłowym

Analiza leksykalna i generator LEX

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

Język ludzki kod maszynowy

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Jerzy Nawrocki, Wprowadzenie do informatyki

Programowanie proceduralne w języku C++ Pojęcia podstawowe - kod źródłowy

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 3. Karol Tarnowski A-1 p.

Programowanie mikrokontrolerów AVR

Języki formalne i gramatyki

Programowanie Proceduralne

Wstęp do programowania

Programowanie współbieżne... (10) Andrzej Baran 2010/11

Kompilacja i scalanie programów w linii poleceń gcc i make

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

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Zajęcia P2AM. Analizator składniowy (Flex + Bison, Linux)

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Informatyka. Michał Rad

Transkrypt:

Programy pomocnicze: diff, make, systemy rcs i cvs, debugger. Zarządzanie wersjami. wer. 8 z drobnymi modyfikacjami Wojciech Myszka 2014-02-09 16:32:37 +0100

Co jest potrzebne programiście? 1. Umiejętność logicznego myślenia. 2. Ukończone kursy dokształcające. 3. Motywacja do pracy. 4. Komputer. 5. Zadanie. 6. Kompilator (program, który kod źródłowy przetłumaczy na na kod maszynowy). 7. Jakiś edytor (program pozwalający na wygodne wpisywanie kodu źródłowego).

Jak to robiono kiedyś? 1. Czas komputera był drogi a dostęp do niego limitowany. 2. Gdy algorytm był gotowy rozpoczynało się jego kodowanie (na papierze). 3. Następnie przenoszono kod na nośnik maszynowy (taśma papierowa, karty perforowane, taśma magnetyczna). 4. Nośnik z kodem źródłowym był czytany przez kompilator, który tłumaczył na postać maszynową; w razie błędów były one zaznaczane na wydruku. 5. W przypadku błędów formalnych koder poprawiał je i zaczynał cykl od początku. 6. Gdy błędów nie było następowało uruchomienie programu (na dostarczonych danych). 7. Wyniki otrzymywał programista i sprawdzał czy są zgodne z oczekiwaniami. Jeżeli nie rozpoczynała się żmudna analiza algorytmu. Program był uruchamiany po raz kolejny na danych testowych. Żeby ułatwić sobie pracę dodawano wydruki kontrolne. 8. I tak do skutku.

Praca w środowisku interaktywnym 1. Najpierw odpadły nośniki maszynowe (choć w okresie przejściowym znacznie taniej było wpisać kod na prymitywnym urządzeniu na kartach lub tasiemce papierowej niż blokować dostęp do deficytowego terminala komputera i linii telekomunikacyjnej. 2. Pojawiły się środowiska ułatwiające uruchamianie programów w trybie interaktywnym. 3. Pojawiły się języki konwersacyjne.

Jak jest dziś? Ci z Państwa, którzy programują wiedzą doskonale. Inni...

Jak jest tworzony duży program? 1. Podzielony jest na kawałki (moduły obejmujące pewne dobrze zdefiniowane całości ). 2. Grupy modułów tworzące pewne całości grupowane są w biblioteki. 3. Wspólne definicje grupowane są w plikach nagłówkowych.

Kompilacja Tworzenie programu jest procesem wieloetapowym. 1. Fragmenty programu mogą być pisane w jakimś metajęzyku, który tłumaczony jest na kod źródłowy. 2. Program w kodzie źródłowym tłumaczony jest na postać wynikową (zazwyczaj nazywa się to object). 3. Niektóre moduły wynikowe grupowane są w biblioteki. 4. Moduły wynikowe i biblioteki używane są do budowy programu wykonywalnego.

Schemat metajęzyk1 --> kod źródłowy1 --> object1 + + kod źródłowy2 --> object2 +--> biblioteka1 + kod źródłowy3 --> object3 + --->exe + kod źródłowy4 --> object4 --------------> + pliki nagł---+

Program make Jakakolwiek zmiana w plikach z kodem metajęzyka, plikach nagłówkowych lub z kodem źródłowym wymaga przekompilowania części lub wszystkich plików. Gdy projekt jest bardzo duży problem jest bardzo poważny. Wymyślono program make pozwalający ułatwiający programiście życie. Program korzysta ze specjalnego pliku (tradycyjnie nazywa się on Makefile) który opisuje strukturę projektu.

Makefile Plik Makefile definiuje czynności jakie należy wykonać aby z pliku jednego typu uzyskać plik wynikowy oraz zależności pomiędzy plikami. metajęzyk1 --> kod źródłowy1 --> object1 + + kod źródłowy2 --> object2 +--> biblioteka1 + kod źródłowy3 --> object3 + --->exe + kod źródłowy4 --> object4 --------------> + pliki nagł---+ W naszym przypadku exe zależy od biblioteka1 i object4. biblioteka1 zależy od object1, object2, object3. object1 zależy od kod źródłowy1. kod źródłowy1 zależy od metajęzyk1. object2 zależy od kod źródłowy2 object3 zależy od kod źródłowy3 kod źródłowy2 zależy plik nagł

Przykładowy plik Makefile albo raczej jego idea exe : biblioteka1, object4 l i n k o exe object4 L b i b l i o t e k a 1 biblioteka1 : object1, object2, object3 ar o b i b l i o t e k a 1 object1 object2 object3 object1 : kod ź r ód ł owy1 kompiluj kod ź ród ł owy1 object2 : kod ź ród ł owy2, plik nag ł kompiluj kod ź ród ł owy2 object3 : kod ź ród ł owy3, plik nag ł kompiluj kod ź ród ł owy3 object4 : kod ź ród ł owy4, plik nag ł kompiluj kod ź ród ł owy4 kod ź ród ł owy1 : metajęzyk1 metakompiluj metajęzyk1 o kod ź ród ł owy1 a l l : clean : exe kasuj object biblioteka1 exe plik ź ród ł owy1

Metajęzyki 1. Metajęzyki to języki jeszcze wyższego poziomu niż języki typu C, Pascal, Fortan. 2. Pozwalają one za pomocą stosunkowo prostych zależności (i bez przejmowania się szczegółami) stworzyć kod źródłowy programu. 3. Przykład. Chcemy napisać program, który będzie rozróżniał liczby od słów. Najpierw precyzyjnie musimy zdefiniować co to jest liczba. Liczba to jedna lub więcej cyfr z zakresu od 0 do 9. W kategoriach wyrażeń regularnych można to zapisać tak: [0123456789]+ lub [0-9]+ (plus oznacza tu jedno lub więcej powtórzeń). Natomiast słowo to jeden lub więcej znaków, z których pierwszy jest literą i który nie zawiera odstępów i innych znaków specjalnych. Zapisujemy to tak: [a-za-z][a-za-z0-9]* (gwiazdka oznacza tu zero lub więcej powtórzeń.

Metajęzyki flex Idea programu jest następująca: %% [0123456789]+ p r i n t f ( " NUMBER\ n " ) ; [ a za Z ] [ a za Z0 9] p r i n t f ( "WORD\ n " ) ; %% i sprowadza się do następującego: jak zobaczysz liczbę wypisz liczba, jak zobaczysz wyraz wypisz wyraz

A sam program niewiele bardziej skomplikowany: %{ #include < stdio. h> %} %% [0123456789]+ printf ( "NUMBER\ n " ) ; [ a za Z ] [ a za Z0 9] p r i n t f ( "WORD\ n " ) ; %% Kompilacja: f l e x o test. c test. l ~/c$ l s l test. c rw r r 1 myszka myszka 41749 2008 05 26 15:50 gcc test. c o test l l Uruchomienie test. c ~/c$./test ala ma 3 koty WORD WORD NUMBER WORD

Bardziej skomplikowany przykład: kalkulator 1. Chodzi mi o pokazanie jednie pewnej idei, a nie wnikanie w głębokie szczegóły. 2. Kalkulator składa się z dwu części: 2.1 wprowadzanie danych 2.2 przetwarzanie danych 3. Do zbudowania analizatora danych wykorzystamy program lex (lub jego darmowy odpowiednik flex) 4. Do zbudowania części przetwarzającej dane wykorzystamy program yacc (lub jego darmowy odpowiednik bison)

Kalkulator I Wprowadzanie danych %{ %} / c a l c u l a t o r #1 / # include " y. tab. h " # include < s t d l i b. h> void yyerror ( char ) ; %% [0 9]+ { } y y l v a l = a t o i ( yytext ) ; return INTEGER ;

Kalkulator II Wprowadzanie danych [ +\n ] { return yytext ; } [ \ t ] ; / s k i p whitespace /. yyerror ( " Unknown character " ) ; %% i n t yywrap ( void ) { return 1; }

Kalkulator I Przetwarzanie %{ %} # include < s t d i o. h> i n t yylex ( void ) ; void yyerror ( char ) ; %token INTEGER %% program : program expr \ n { p r i n t f ( " %d \ n ",

Kalkulator II Przetwarzanie ; expr : INTEGER expr + expr { $$ = $1 + $3 ; } expr expr { $$ = $1 $3 ; } ; %% void yyerror ( char s ) { f p r i n t f ( stderr, " %s \ n ", s ) ; }

Kalkulator III Przetwarzanie i n t main ( void ) { yyparse ( ) ; return 0; }

Czterodziałaniowy kalkulator z nawiasami I Dane %{ #include < s t d l i b. h> #include < s t d i o. h> #include " calc1. h " void yyerror ( char ) ; extern i n t y y l v a l ; %} %% [ \ t ]+ ; [0 9]+ { y y l v a l = a t o i ( yytext ) ; return INTEGER ; } [ + /] { return yytext ; } " ( " { return yytext ; }

Czterodziałaniowy kalkulator z nawiasami II Dane " ) " { return yytext ; } \ n { return yytext ; }. { char msg [ 2 5 ] ; s p r i n t f ( msg, " %s <%s > ", " i n v a l i d yyerror ( msg ) ; } characte

Czterodziałaniowy kalkulator z nawiasami I Przetwarzanie %{ #include < s t d l i b. h> #include < s t d i o. h> i n t yylex ( void ) ; #include " calc1. h " %} %token INTEGER %% program : l i n e program l i n e l i n e :

Czterodziałaniowy kalkulator z nawiasami II Przetwarzanie expr \ n { p r i n t f ( " %d \ n ", $1 ) ; } \ n expr : expr + mulex { $$ = $1 + $3 ; } expr mulex { $$ = $1 $3 ; } mulex { $$ = $1 ; } mulex : mulex term { $$ = $1 $3 ; } mulex / term { $$ = $1 / $3 ; } term { $$ = $1 ; }

Czterodziałaniowy kalkulator z nawiasami III Przetwarzanie term : ( expr ) { $$ = $2 ; } INTEGER { $$ = $1 ; } %% void yyerror ( char s ) { f p r i n t f ( stderr, " %s \ n ", s ) ; return ; } i n t main ( void ) { / yydebug =1; / yyparse ( ) ;

Czterodziałaniowy kalkulator z nawiasami IV Przetwarzanie return 0; }

Narzedzia pomocnicze 1. diff program pozwalający porównywać dwa pliki źródłowe 2. patch program pozwalający na podstawie różnic (raportowanych przez diff) wprowadzić poprawki do plików źródłowych. Pozwala to rozpowszechniać znacznie mniejsze pliki. 3. rcs, cvs, svn, bazaar,... systemy zarządzania wersjami. 4. debuger program pozwalający uruchamiać programy krok po kroku, sprawdzać zawartość zmiennych,...

configure Pliki dla programu make mogą być przygotowywane ręcznie. Gdy tworzymy wersję programu która powinna być zbudowana w (nieomal) dowolnym środowisku, może się okazać, że budowa programu wymaga spełnienia pewnych dodatkowych zależności (które nie muszą być spełnione standardowo). W takim przypadku warto skorzystać z dodatkowych narzędzi pomocniczych. Jednym z nich jest Autotools. Narzędzie to składa się z szeregu skryptów, które po uruchomieniu sprawdzają w jakim środowisku budowane jest oprogramowanie, starają się zidentyfikować zależności od dodatkowych pakietów oprogramowania (bibliotek) i tworzą skrypt (program), który uruchomiony na systemie docelowych sprawdza czy wszystkie zależności są spełnione.