Lestes C++ compiler
Obsah 1. Úvod 2. Architektura 3. Implementace 4. Framework 5. Závěr
Cíle projektu 4 překladač jazyka C++ 4 platforma pro další vývoj 4 implementace jazyka v souladu s normou (ISO/IEC 14882:2003)
Proč je to těžké 4 norma C++ –styl –interpretační obtíže –provázanost celku 4 jazyk –rozsáhlost –syntaktická nejednoznačnost –vyhodnocování výrazů –šablony
Nejednoznačnosti v C++ int i, j; class C { /*... */ }; int f() { C (j) = 5, i++; // výraz C (j) = 5, i; // deklarace }
Obsah 1. Úvod 2. Architektura 3. Implementace 4. Framework 5. Závěr
Architektura překladače
4 Abstract Syntax (AS) –kopíruje gramatiku normy –strom 4 Semantic Structures (SS) –sémantika zdrojového kódu 4 Pseudoinstructions (PI) –architekturně nezávislý mezikód –orientovaný acyklický graf (DAG) Druhy vnitřní reprezentace
Obsah 1. Úvod 2. Architektura 3. Implementace 4. Framework 5. Závěr
Preprocesor 4 vlastní implementace –makra s parametry –podmínky –#include –rozšířené znakové sady (utf8) –trigrafy ( ??= ), digrafy ( %: )
Syntaktická analýza nejednoznačnosti řešeny back-trackingem int f() { int (*p) (int); int (*q) (0); int (*r) + 1; } 4 deklarace vs. výraz 4 inicializátor vs. deklarace parametru
Sémantická analýza 4 přetížené funkce a operátory 4 deklarace 4 interakce se syntaktickou analýzou 4 pořadí vedlejších efektů
Pořadí vedlejších efektů (a++,++b)+(c++,++d) ab dc Povolená pořadí acbd abcd cdab cadb
Backend 4 machine description – způsob popisu cílové architektury 4 implementace pro IA32
Obsah 1. Úvod 2. Architektura 3. Implementace 4. Framework 5. Závěr
Framework 4 garbage collector 4 dumper 4 generátor struktur 4 ladicí výpisy 4 chybové hlášky
Generátor struktur 4 XML popis vnitřních struktur kompilátoru 4 transformace XSLT procesorem do C++ 4 podpora vybraných návrhových vzorů 4 automatická podpora pro GC a dumper
Garbage collector 4 vlastní implementace mark & sweep 4 smart pointers
Dumper 4 zobrazení vnitřních struktur překladače 4 ladění, výukové účely 4 XML výstup 4 XSLT transformace do HTML
Dumper
Ladicí výpisy 4 stromová struktura 4 konfigurační soubor XML
Chybové hlášky 4 chyby, varování 4 pozice chyby 4 specifikace v XML 4 potenciální možnost lokalizace
Obsah 1. Úvod 2. Architektura 3. Implementace 4. Framework 5. Závěr
Shrnutí (1) 4 design –klíčové vlastnosti C++ –modularita 4 prostředí pro vývoj –odstínění od rutinních činností –snadné ladění –vhled do činnosti překladače
Shrnutí (2) 4 funkční překladač – podmnožina jazyka – rozšiřitelnost 4 dokumentace –včetně návrhu neimplementovaných vlastností
int factorial(int n) { if ( n<=1 ) { return 1; } return n*factorial(n-1); } _Z9factoriali: push EBP mov EBP, ESP add ESP,-52 push EDI push ESI push EBX mov EAX,0 mov DWORD [EBP-4],EAX mov EAX,DWORD [EBP+8] mov DWORD [EBP-8],EAX mov EAX,DWORD [EBP-8] mov EBX,DWORD [EBP-4] cmp EAX,EBX sete CL mov BYTE [EBP-12],CL mov AL,BYTE [EBP-12] cmp AL,0 jz mov EAX,1 mov DWORD [EBP-16],EAX mov EAX,DWORD [EBP-16] mov EBX,EAX...