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 złożone hardware software 1980:kosztsprzętuto drobny fragment kosztu oprogramowania i nic nie wskazuje, że ten trend się zatrzyma Co kształtuje języki programowania? Wykład2,str.2 Metodologie programowania Daty przybliżone i orientacyjne: przed 1960 programowanie poziomu maszyny od 1960 programowanie wysokiego poziomu od 1970 programowanie strukturalne (struktury sterowania) od1975 abstrakcjadanych od1980 obiektowość od 1990 współbieżność w Internecie od 2000 współbieżność w pojedynczym komputerze(wieloprocesorowość)
Kategorie języków programowania Wykład2,str.3 Algol 68 FUNKCYJNE IMPERATYWNE wysokiego poziomu Fortran,Algol 60, Pascal,C,... Lisp, Scheme, Standard ML, Haskell,... LOGICZNE Prolog OBIEKTOWE Smalltalk, C++, Java,... Kategorie języków programowania Wykład2,str.4 Podkategorie języków imperatywnych: graficzne(visual Basic) generowanie programu imperatywnego przez przeciąganie obrazków skryptowe(bash, Perl, JavaScript, Ruby) interpretacja tekstu programu bez kompilacji
Kategorie języków programowania Wykład2,str.5 Języki funkcyjne(aplikatywne): podstawowe jednostki: definicjafunkcji; zastosowanie funkcji do argumentu. Przykład: M -funsil(n)= ifn=0then 1 else n*sil(n-1); valsil=fn:int->int definicja funkcji -sil5; zastosowanie do argumentu valit=120:int niebieskie(poprzedzone myślnikiem) napisał użytkownik czarne(poprzedzone przez val) napisał komputer Kategorie języków programowania Wykład2,str.6 Języki logiczne: podstawowe jednostki: aksjomatf(x 1,...,X k ):-wyr.log. oznacza,żef(x 1,...,X k ) wynika z wyr.log.; f(x 1,...,X k ) (j.w.bezprawejstrony)oznacza,żef(x 1,...,X k ) jest zawsze prawdziwe. Przykład: M max([h],h). max([h T],M):-max(T,M),H#<M. max([h T],H):-max(T,M),H#>=M. usercompiled... definicja maks. listy?-max([1,4,2,10,3],x). X=10? pytanie o wartość maks.
Uproszczona historia języków programowania Wykład2,str.7 Genealogia języków programowania: http://inf.ug.edu.pl/ stefan/dydaktyka/ ZaawJezForm/Wyklady/genealogia jezykow-1.png Prehistoria: karta perforowana taśma perforowana Kwestia implementacji Wykład2,str.8 Poziomy oprogramowania: kompilator C kompilator Javy Java VM jeszcze coś innego system operacyjny goły komputer zjęzykiem wewnętrznym
Kompilacja a interpretacja Wykład2,str.9 Przetwarzanie interpretacyjne: while(nie koniec) { zanalizuj kolejną komendę programu źródłowego wykonaj tą komendę } Przetwarzanie kompilacyjne: skompiluj(przetłumacz) program na język maszyny; while(nie koniec) { wykonaj kolejną komendę przekładu } Przetwarzanie interpretacyjne jest dobre do prototypowania. Przetwarzanie kompilacyjne jest dobre do użytku codziennego(na ogół znacznie szybsze). Uproszczony schemat kompilacji Wykład2,str.10 program źródłowy ciąg leksemów drzewo wywodu drzewo i tablice symboli analiza leksykalna analiza syntaktyczna analiza semantyczna KOMPILATOR generacja kodu dane do programu kod docelowy wyniki
Definiowanie języka Wykład2,str.11 Jak wyjaśnić kompilatorowi języka, które programy ma akceptować, a które odrzucać jako błędne? Formalne definiowanie języka: DEFINICJA: MGramatyka bezkontekstowa składa się z zbioruσterminali; zbioru N nieterminali; zbioru P produkcji postaci nieterminal ciąg-terminali-i-nieterminali; nieterminalupoczątkowegos N. Terminale proste napisy, które mają prawo pojawić się w zdaniu z języka. Nieterminale nazwy pojęć gramatycznych, potrzebnych do opisu języka. Produkcje prawa zastępowania pojęć gramatycznych. Nieterminal początkowy od niego zaczynamy wyprowadzanie zdań. Definiowanie języka Wykład2,str.12 Przykład: MΣ={x,=,+,1,5,;} N ={ zmienna, liczba, wyrażenie, przypisanie } P = przypisanie zmienna = wyrażenie ; wyrażenie zmienna wyrażenie liczba wyrażenie wyrażenie + wyrażenie zmienna x liczba 1 liczba 5 S = przypisanie
Definiowanie języka Wykład2,str.13 przypisanie zmienna = wyrażenie ; wyrażenie zmienna wyrażenie liczba wyrażenie wyrażenie + wyrażenie zmienna x liczba 1 liczba 5 przypisanie zmienna = wyrażenie ; x= wyrażenie ; x= wyrażenie + wyrażenie ; x= zmienna + wyrażenie ; x= zmienna + liczba ; x=x+ liczba ; x=x+1; Języki formalne lingwistyka matematyczna Wykład2,str.14 Jak porządnie opisać język nieskończony? {λ,ab,aabb,aaabbb,...} co oznaczają kropeczki? λ słowopuste, niezawierające ani jednej litery { a n b n n 0 } lepiej,alesąniepożądaneelementyobce (liczby,zmienne,relacje,...) Język definiujemy na dwa sposoby. Przez generator cokolwiek wyprodukuje, uważamy za należące do języka akceptor cokolwiek zatwierdzi, uważamy za należące do języka Opis języka programowania przeznaczony dla programisty powinien być generatorem ma wyjaśniać, jak pisać poprawne programy. Kompilator języka programowania powinien zawierać akceptor sprawdzający, czy program na jego wejściu należy do języka.
Generatory: gramatyki bezkontekstowe Wykład2,str.15 DEFINICJA: Gramatyka bezkontekstowa G M alfabetterminalnyσ; alfabet nieterminalny lub pomocniczy N(rozłączny z Σ); skończony zbiór P produkcji postaci Nterm w, gdzie Nterm Niw (N Σ) ; X zbiórwszystkichsłów nad alfabetem X wybrany nieterminal S N nazywany symbolem początkowym albo aksjomatem gramatyki. Przykład: gramatyka M wyrażenie składnik wyrażenie wyrażenie + składnik składnik czynnik składnik składnik * czynnik czynnik a czynnik ( wyrażenie ) BNF(Backus-Naur Form): wyrażenie ::= składnik wyrażenie + składnik składnik ::= czynnik składnik * czynnik czynnik ::=a ( wyrażenie ) Generatory: gramatyki bezkontekstowe Wykład2,str.16 DEFINICJA: Wywodliwość M jeśliwpjestprodukcjaa w,todladowolnychsłów u,v (N Σ),słowouwvnazywamybezpośredniowywodliwymze słowauav,cooznaczamyuav uwv; jesliw 1 w 2,w 2 w 3,...,w n 1 w n,tosłowow n nazywamy wywodliwymzesłowaw 1,cooznaczamyw 1 w n. DEFINICJA: Język L(G) generowany przez gramatykę G Mskłada się z tych słów{ wywodliwych z aksjomatu, które już nie zawierają nieterminali:l(g) def = w Σ } S w.
Generatory: gramatyki bezkontekstowe Wykład2,str.17 wyrażenie ::= składnik wyrażenie + składnik składnik ::= czynnik składnik * czynnik czynnik ::= a ( wyrażenie ) Przykład: wywód M wyrażenie składnik składnik * czynnik czynnik * czynnik a* czynnik a*( wyrażenie ) a*( wyrażenie + składnik ) a*( składnik + składnik ) a*( czynnik + składnik ) a*(a+ składnik ) a*(a+ czynnik ) a*(a+a) Generatory: gramatyki bezkontekstowe Wykład2,str.18 Gramatyka fragmentu języka polskiego: zdanie ::= gr.podmiotu gr.orzeczenia gr.podmiotu ::= podmiot przydawka gr.podmiotu gr.orzeczenia ::= orzeczenie orzeczenie dopełnienie gr.orzeczenia okolicznik podmiot ::= Anka Basia Czesiek przydawka ::= piękna gruby stary orzeczenie ::= bije kocha dopełnienie ::= Ankę Basię Cześka okolicznik ::= wdomu nocą zdanie gr.podmiotu gr.orzeczenia przydawka gr.podmiotu gr.orzeczenia piękna gr.podmiotu gr.orzeczenia piękna podmiot gr.orzeczenia piękna Basia gr.orzeczenia piękna Basia orzeczenie dopełnienie piękna Basia kocha dopełnienie piękna Basia kocha Cześka
Gramatyki prawoliniowe Wykład2,str.19 DEFINICJA: MGramatyka bezkontekstowa G = Σ, N, P, S jest prawostronnie liniowa jeślikażdaprodukcjawpmapostać: albo Nterm ciąg-terminali (czyli: żadnych nieterminali) albo Nterm ciąg-terminali Nterm (czyli: tylko jeden nieterminal po prawej) gdzieciąg-terminali Σ a Nterm, Nterm N. Przykład: M id ::=a c b c c ::=λ a c b c 0 c 1 c prawoliniowa wyr ::=a ( wyr ) wyr + wyr bezkontekstowa ale nie prawoliniowa Rodzaje gramatyk Wykład2,str.20 Przykład: MGramatykaG 1 : id ::=a c b c c ::=λ a c b c 0 c 1 c GramatykaG 2 : id ::=a b id a id b id 0 id 1 L(G 1 )=językidentyfikatorów=l(g 2 ) G 1 jestprawostronnieliniowa G 2 jestbezkontekstowa ale nie prawostronnie liniowa dwie gramatyki różnych typów mogą określać ten sam język DEFINICJA: MJęzyk L jest regularnyjeśliist.gram.prawostronnieliniowagtaka,żel=l(g); bezkontekstowy jeśli ist. gram. bezkontekstowa G taka, że L = L(G). Przykład: JęzykidentyfikatorówL(G 2 )jestregularny.