Professional Documents
Culture Documents
Wstp Prezentacja jest wspfinansowana przez Uni Europejsk w ramach Europejskiego Funduszu Spoecznego w projekcie pt.
Innowacyjna dydaktyka bez ogranicze - zintegrowany rozwj Politechniki dzkiej zarzdzanie Uczelni, nowoczesna oferta edukacyjna i wzmacniania zdolnoci do zatrudniania osb niepenosprawnych
Prezentacja dystrybuowana jest bezpatnie
Politechnika dzka, ul. eromskiego 116, 90-924 d, tel. (042) 631 28 83 Projekt wspfinansowany przez Uni Europejsk www.kapitalludzki.p.lodz.pl w ramach Europejskiego Funduszu Spoecznego
3
Plan wyadw
Analiza syntaktyczna
Translacja sterowana skadni Generacja kodu poredniego
4
Literatura
Podstawowa
A.V. Aho, R. Sethi, J. D. Ullman, "Compilers - Principles, Techniques, and Tools", Addison-Wesley 2007 (polskie wydanie WNT 2002) W. M. Waite, G. Goos, "Konstrukcja kompilatorw", WNT 1989 J. E. Hopcroft, R. Motwani, J. D. Ullman Wprowadzenie do teorii automatw, jzykw i oblicze, Wydanie: drugie zmienione, Wydawnictwo Naukowe PWN 2005
Uzupeniajca
John R. Levine, "Linkers and Loaders", Morgan Kaufmann Publishers 1999 (manuskrypt dostepny online) S. S. Muchnick, "Advanced Compiler Design and Implementation", Morgan Kaufmann Publishers 1997
5
Napisalimy program, jak go uruchomi?
Kompilator
Przetwarza cay program na posta zrozumia dla procesora (C/C++, Fortran)
Interpreter
Przetwarza osobno kad pojedyncz instrukcj (VBasic, Python, Jzyki skryptowe, Bash)
Rozwizania porednie
Kod poredni, interpretowany przez procesor wirtualny (Java)
6
Pierwszy kompilator?
1958
Lisp jako notacja do pisania funkcji, rczne tumaczenie na kod maszynowy i uruchamianie, propozycja funkcji eval ktra przyjmowaa jako argument wyraenie Lispa i je interpretowaa, rczne zakodowanie funkcji eval w kodzie maszynowym
7
System przetwarzania jzykw
Szkieletowy program gwny
Preprocesor Program rdowy gcc E test.c o test.i
Kompilator
Wynikowy program w asemblerze Asembler Przemieszczalny kod maszynowy Program adujcy/konsolidator Bezwzgldny kod maszynowy
8
System przetwarzania jzykw
Szkieletowy program gwny
Preprocesor Program rdowy gcc E test.c o test.i
#include <stdio.h> int main() { printf("Hello world\n"); gcc return 0; S test.c o test.s }
Kompilator
Wynikowy program w asemblerze Asembler Przemieszczalny kod maszynowy Program adujcy/konsolidator Bezwzgldny kod maszynowy
9
System przetwarzania jzykw
Szkieletowy program gwny
Preprocesor Program rdowy gcc E test.c o test.i
Kompilator
Wynikowy program w asemblerze Asembler Przemieszczalny kod maszynowy Program adujcy/konsolidator Bezwzgldny kod maszynowy
typedef unsigned char __u_char; typedef unsigned short int __u_short; typedef unsigned int __u_int; gcc Sunsigned long int __u_long; typedef test.c o test.s
obiektowe
10
System przetwarzania jzykw
.file Szkieletowy program gwny "main.c" .section .rodata .LC0: .string "Hello world" Preprocesor .text .globl main .type main, @function Program rdowy main: .LFB2: pushq %rbp Kompilator .LCFI0: movq %rsp, %rbp .LCFI1: Wynikowy $.LC0, %edi w asemblerze program movl call puts movl $0, %eax Asembler leave ret
as test.s o test.o
11
System przetwarzania jzykw
Szkieletowy program gwny
Preprocesor Program rdowy gcc E test.c o test.i
Kompilator
Wynikowy program w asemblerze Asembler Przemieszczalny kod maszynowy Program adujcy/konsolidator Bezwzgldny kod maszynowy
12
Elementy kompilatora
Program rdowy Analizator leksykalny Analizator skadniowy
Tablica symboli
Obsuga bdw
13
Elementy kompilatora
Program rdowy Analizator leksykalny
Analizator skadniowy Analizator semantyczny Gen. kodu poredniego Optymalizator kodu Generator kodu Program wynikowy
Przechowuje informacje na temat staych, zmiennych, funkcji, procedur zadeklarowanych w programie. MAKRA NIE S UMIESZCZANE W TABLICY SYMBOLI Informacje w tablicy symboli s zbierane podczas analizy leksykalnej i skadniowej, natomiast s wykorzystywane podczas analizy syntaktycznej, optymalizacji i generacji kodu
typ real real real adres 0 8 16
Tablica symboli
Obsuga bdw
14
Elementy kompilatora
Program rdowy Analizator leksykalny Analizator skadniowy
W przypadku bdu nie przerywamy procesu kompilacji, prbujemy zastosowa techniki odzyskiwania kontroli. Rodzaje bdw: leksykalne (bdnie wpisany identyfikator, sowo kluczowe lub operator) skadniowe (wyraenie arytmetyczne z niewywaonymi nawiasami) semantyczne (zastosowanie operatora do niekompatybilnego typu) logiczne (wywoanie rekurencji w nieskoczonej ptli, sprawdzanie warunku ktry nigdy nie bdzie prawdziwy)
Tablica symboli
Obsuga bdw
15
Elementy kompilatora
Program rdowy Analizator leksykalny Analizator skadniowy
Zadania: czytanie znakw z wejcia i produkcja sekwencji symboli leksykalnych dla analizatora skadniowego eliminacja komentarzy i biaych znakw informowanie o aktualnym numerze analizowanego wiersza rozwijanie makr preprocesora uzupenianie tablicy symboli
Obsuga bdw
Tablica symboli
16
Analiza leksykalna
Pojcia podstawowe
symbol leksykalny (atomy leksykalne, token)
np. id, liczba_rzeczywista, liczba_calkowita
leksem
np. ala, 3.14, 3
wzr
17
Analiza leksykalna
Wikszo symboli leksykalnych naley do jednej z grup:
nazwy (identyfikatory) sowa zarezerwowane (ustalony podzbir zbioru nazw) liczby cakowite liczby rzeczywiste acuchy znakowe
operatory:
addytywne (+, -), unarne (+, -), multiplikatywne (*, /) relacyjne (<, >, =, <=, >=, <>) logiczne (and, or, not) przypisania (:=)
18
Analizator leksykalny
Leksemy:
identyfikator
liczba
identyfikator: zbir zaczynajcy si od litery lub podkrelenia, po ktrym nastpuje dowolnie dugi cig liter, cyfr, podkrele op_add: operator dodawania lub odejmowania op_mul: operatory mnoenia i dzielenia op_przypisania: operator skadajcy si ze znaku : po ktrym nastpuje znak =
typ
adres
19
Elementy kompilatora
Program rdowy Analizator leksykalny Analizator skadniowy
Zadania: weryfikacja poprawnoci skadniowej programu rdowego wykrycie i neutralizacja bdw skadniowych transformacja struktury programu do postaci drzewa wywodu
Obsuga bdw
Tablica symboli
20
Formalna gramatyka bezkontekstowa
Gramatyka bezkontekstowa:
Zbir tokenw (symboli leksykalnych) zwanych symbolami terminalnymi
21
Analiza skadniowa
instrukcja_przypisania -> identyfikator ':=' wyraenie wyraenie -> liczba wyraenie -> identyfikator wyraenie -> wyraenie '+' wyraenie wyraenie -> wyraenie '*' wyraenie
instrukcja przypisania identyfikator wyraenie
identyfikator pozycja
:=
pocztek
tempo
22
Elementy kompilatora
Program rdowy Analizator leksykalny Analizator skadniowy
Zadania: weryfikacja poprawnoci semantycznej programu rdowego Kontrola typw Kontrola przepywu sterowania Kontrola unikalnoci Kontrola zwizana z nazw
Obsuga bdw
Tablica symboli
23
Analiza semantyczna
identyfikator pozycja poczatek
instrukcja przypisania identyfikator wyraenie
adres
tempo
identyfikator
pozycja
:=
pocztek
tempo
60
24
Elementy kompilatora
Program rdowy Analizator leksykalny Analizator skadniowy
Tablica symboli
Analizator semantyczny
Gen. kodu poredniego Optymalizator kodu Generator kodu Program wynikowy
Obsuga bdw
Zadania: generacja kodu poredniego, niezalenego od sprztu oraz wejciowego jzyka programowania umoliwia przenono kompilatora pomidzy rnymi architekturami oraz jzykami umoliwia implementacj optymalizacji niezalenych od docelowej architektury oraz wejciowego jzyka programowania
25
Generacja kodu poredniego Trjadresowy kod poredni
kady rozkaz oprcz przypisania moe mie co najwyej jeden operator podczas translacji kodu drzewa wyprowadze do kodu trjadresowego kompilator moe wstawi dodatkowe zmienne tymczasowe przechowujce tymczasowe wyniki operacji niektre z operacji trjadresowych mog mie mniej ni trzy argumenty
26 Elementy kompilatora
Program rdowy Analizator leksykalny Analizator skadniowy Analizator semantyczny Gen. kodu poredniego Optymalizator kodu Generator kodu Program wynikowy
Projekt wspfinansowany przez Uni Europejsk w ramach Europejskiego Funduszu Spoecznego
Tablica symboli
Obsuga bdw
Zadania: poprawa efektywnoci kodu wynikowego, ograniczenie rozmiaru oraz czasu wykonania programu moe by wykonywana na wielu poziomach (kod rdowy, kod poredni, kod wynikowy)
27
Przykadowe algorytmy optymalizacji
usuwanie kodu martwego eliminacja podwyrae wsplnych propagacja kopii zmienne indukcyjne redukcja mocy uycie tosamoci algebraicznych
28
Optymalizacja
konwersja z liczby typu int na liczb typu real na etapie generacji kodu
29
Optymalizacja kodu w kompilatorze gcc
30
Optymalizacja kodu w kompilatorze gcc
31
Elementy kompilatora
Program rdowy Analizator leksykalny Analizator skadniowy Analizator semantyczny Gen. kodu poredniego Optymalizator kodu Generator kodu Program wynikowy
Zadania: wygenerowanie kodu wynikowego w postaci: kodu asemblera przemieszczalnego kodu maszynowego gotowego programu wykonywalnego wybr rozkazw przydzia rejestrw
Tablica symboli
Obsuga bdw
32
Generacja kodu
pozycja := poczatek + tempo * 60
adres 0 8
tempo
real
16
Optymalizator kodu
* 60
temp1 := tempo * 60.0 pozycja := poczatek + temp1
id3
Analizator semantyczny
:=
id1 id2
Generator kodu
MOVF 16, R2 MULF #60.0, R2 MOVF 8, R1 ADDF R2, R1 MOVF R1,0
+
id3
inttoreal 60
Projekt wspfinansowany przez Uni Europejsk w ramach Europejskiego Funduszu Spoecznego
34
GCC
35
GCC
Projekt rozwijany od 23 lat (!!!). 2 miliony linii kodu. Wsparcie dla 7 jzykw programowania
C (gcc) C++ (g++) Objective C Fortran Java (GCJ) Ada (GNAT) Go arm avr m32, m64 microblaze sparc x86 ia64
Projekt wspfinansowany przez Uni Europejsk w ramach Europejskiego Funduszu Spoecznego
36
gcc
37
GCC
Pytania ?
Prezentacja jest wspfinansowana przez Uni Europejsk w ramach Europejskiego Funduszu Spoecznego w projekcie pt.
Innowacyjna dydaktyka bez ogranicze - zintegrowany rozwj Politechniki dzkiej zarzdzanie Uczelni, nowoczesna oferta edukacyjna i wzmacniania zdolnoci do zatrudniania osb niepenosprawnych
Prezentacja dystrybuowana jest bezpatnie
Politechnika dzka, ul. eromskiego 116, 90-924 d, tel. (042) 631 28 83 Projekt wspfinansowany przez Uni Europejsk www.kapitalludzki.p.lodz.pl w ramach Europejskiego Funduszu Spoecznego
40
Projekt programistyczny
41
Analizator plikw konfiguracyjnych
Wymagania:
wsparcie dla czterech typw danych:
typ cakowity typ rzeczywisty typ logiczny typ acuchowy
42
Analizator plikw konfiguracyjnych
CONFIG_PI=3.1415; CONFIG_READ_TIMEOUT = 500; CONFIG_READ_ACK = 1000; CONFIG_WRITE_TIMEOUT = 1500; CONFIG_WRITE_ACK = 1000; CONFIG_READ_TIMEOUT = CONFIG_READ_TIMEOUT + CONFIG_READ_ACK; CONFIG_WRITE_TIMEOUT = CONFIG_WRITE_TIMEOUT + CONFIG_WRITE_ACK; CONFIG_LOG_DIRECTORY = /var/log; /*To jest komentarz*/ CONFIG_ENABLE_DEBUG_MODE = TRUE;
43
Analizator plikw konfiguracyjnych class ConfigFileParser { public: ConfigFileParser(ConfigDefaultSettings *defArray); ~ConfigFileParser(); void int double std::string bool };
Projekt wspfinansowany przez Uni Europejsk w ramach Europejskiego Funduszu Spoecznego
parse(const std::string& fileName); getInt(const std::string& name); getReal(const std::string& name); getString(const std::string& name); getBool(const std::string& name);
44
Analizator plikw konfiguracyjnych
ConfigDefaultSettings defArray[] = {{"CONFIG_PI", TYPE_REAL, "", 0, 3.14, false}, {"CONFIG_READ_TIMEOUT", TYPE_INT, "", 1, 0, false}, {"CONFIG_READ_ACK", TYPE_INT, "", 1, 0, false}, {"CONFIG_WRITE_TIMEOUT ", TYPE_INT, "", 1, 0, false}, {"CONFIG_WRITE_ACK", TYPE_INT, "", 1, 0, false}, {"CONFIG_ENABLE_DEBUG_MODE", TYPE_BOOL, "", 0, 0, false}, {"CONFIG_LOG_DIRECTORY", TYPE_STRING, "/tmp/", 0, 0, false}, {"", TYPE_ERROR, "", 0, 0, false}};
int main() { ConfigFileParser config(defArray); try{ config.parse("./test.cfg"); std::cout << config.getBool("CONFIG_ENABLE_DEBUG_MODE") << std::endl; std::cout << config.getInt("CONFIG_READ_TIMEOUT") << std::endl; std::cout << config.getReal("CONFIG_PI") << std::endl; } catch (ConfigFileParserEx &ex){ std::cout << ex.getInfo() << std::endl; } return 0; }
Dzikuj za uwag
Prezentacja jest wspfinansowana przez Uni Europejsk w ramach Europejskiego Funduszu Spoecznego w projekcie pt.
Innowacyjna dydaktyka bez ogranicze - zintegrowany rozwj Politechniki dzkiej zarzdzanie Uczelni, nowoczesna oferta edukacyjna i wzmacniania zdolnoci do zatrudniania osb niepenosprawnych
Prezentacja dystrybuowana jest bezpatnie
Politechnika dzka, ul. eromskiego 116, 90-924 d, tel. (042) 631 28 83 Projekt wspfinansowany przez Uni Europejsk www.kapitalludzki.p.lodz.pl w ramach Europejskiego Funduszu Spoecznego