compiler design
Főnév
compiler design (tsz. compiler designs)
- (informatika) Compiler Design – magyarul: fordítóprogram-tervezés – az a számítástudományi terület, amely egy magas szintű programozási nyelven írt kódot átalakít gépi szintű vagy más alacsony szintű kódra, hogy a számítógép végrehajthassa azt. A compiler (fordítóprogram) elemzi, értelmezi és optimalizálja a forráskódot, majd kimeneti kódot generál belőle.
A fordítótervezés az elméleti informatika, formális nyelvek, automaták, algoritmusok és optimalizálási technikák alkalmazási területe.
🧠 1. Mi az a compiler (fordítóprogram)?
Egy compiler bemenetként egy forrásprogramot (pl. C, Java), kimenetként pedig egy célprogramot (pl. gépi kód, assembly, vagy bytecode) állít elő.
📥 Forráskód → Fordító → 📤 Gépi kód / Assembly / Intermediate code
🔄 2. Compiler működési lépései (fázisai)
A fordító több, jól elkülöníthető fázisból épül fel:
| Fázis | Leírás |
|---|---|
| 1. Lexikális elemzés (Lexer) | A forráskód karaktereit tokenekre bontja (szavak, szimbólumok, literálok) |
| 2. Szintaktikai elemzés (Parser) | Ellenőrzi a program szintaxisát (grammatikai szabályok) és parse fát épít |
| 3. Szemantikai elemzés | Értelmi vizsgálat: típusellenőrzés, változók deklarációja |
| 4. Köztes kódgenerálás (IR) | Nyelvfüggetlen, absztrakt gépi kód generálása |
| 5. Optimalizálás | Kód átalakítása hatékonyabbá – pl. hurkok gyorsítása, halott kód eltávolítás |
| 6. Kódgenerálás | A köztes kód lefordítása célgéphez illeszkedő assembly/gépi kódra |
| 7. Kódgenerálás utáni optimalizálás | Regiszter-allokáció, utasítássorrend optimalizálás |
🧾 3. Lexikális elemzés – Tokenizálás
Példa:
Forráskód:
int x = 5 + 3;
→ Tokenek:
int(kulcsszó)x(azonosító)=(operátor)5,3(számok)+,;(operátor, elválasztó)
Eszköz: Lex, Flex (C/C++-hoz)
🌳 4. Szintaktikai elemzés – Parser
- A nyelv formális grammatikájára épül (pl. BNF formában).
- Az elemző parse fákat / szintaxisfákat hoz létre.
Típusok:
- LL parser (top-down)
- LR parser (bottom-up)
Eszköz: Yacc, Bison
🧬 5. Köztes reprezentáció (IR – Intermediate Representation)
- Nyelvfüggetlen, egyszerűbb, optimalizálható forma.
- Példák:
- Three-address code (TAC)
- Static Single Assignment (SSA)
- LLVM IR
⚙️ 6. Kódgenerálás és optimalizálás
A kimeneti kód lehet:
- Gépi kód (x86, ARM),
- Assembly,
- Bytecode (pl. Java JVM, .NET CLR),
- WebAssembly (WASM)
Optimalizálási célok:
- Sebesség (runtime performance)
- Memóriahasználat
- Energiafogyasztás
- Kódméret
📦 7. Compiler típusok
| Típus | Leírás |
|---|---|
| Ahead-of-Time (AOT) | Klasszikus fordító (pl. GCC, javac) |
| Just-in-Time (JIT) | Futás közben fordít (pl. Java JVM, .NET CLR, V8 engine) |
| Cross-compiler | Más platformra fordít |
| Transpiler | Egy nyelvet egy másik magas szintű nyelvre fordít (pl. TypeScript → JavaScript) |
| Interpreter | Nem fordít, hanem közvetlenül végrehajt (pl. Python, Bash) |
🛠️ 8. Népszerű fordítók és compiler-keretrendszerek
| Név | Nyelv(ek) | Leírás |
|---|---|---|
| GCC | C, C++, Fortran | GNU Compiler Collection |
| Clang/LLVM | C, C++, Swift, Rust | Modern, moduláris compiler backend |
| javac | Java → bytecode | |
| V8 | JavaScript JIT (Chrome) | |
| TypeScript compiler (tsc) | TypeScript → JavaScript | |
| Rustc | Rust nyelv fordítója |
🔐 9. Komolyabb kihívások compiler-tervezésben
- Hibakezelés és hibaüzenetek minősége
- Multiplatform támogatás
- Optimalizálás különböző architektúrákra
- Formális nyelvek és grammatikák kezelése
- Biztonságos, determinisztikus fordítás
📌 10. Összefoglalás
A compiler design nem csupán gépi kód generálás – ez egy komplex rendszer, amely formális nyelveket dolgoz fel, optimalizál, és biztonságosan vezérli a program végrehajtását. A fordítók a modern szoftverfejlesztés láthatatlan alapkövei: nélkülük nem lenne működő program, sem mobilapp, sem játék, sem operációs rendszer.
- compiler design - Szótár.net (en-hu)
- compiler design - Sztaki (en-hu)
- compiler design - Merriam–Webster
- compiler design - Cambridge
- compiler design - WordNet
- compiler design - Яндекс (en-ru)
- compiler design - Google (en-hu)
- compiler design - Wikidata
- compiler design - Wikipédia (angol)