Výukový kurz návrhu překladače:

Co je to překladač?

Překladač je počítačový program, který pomáhá převést zdrojový kód napsaný ve vysokoúrovňovém jazyce do nízkoúrovňového strojového jazyka. Překládá kód napsaný v jednom programovacím jazyce do jiného jazyka, aniž by změnil jeho význam. Překladač také zefektivní výsledný kód, který je optimalizován z hlediska času provádění a paměťového prostoru.

Proces překladu zahrnuje základní překladové mechanismy a detekci chyb. Proces překladu prochází lexikální, syntaktickou a sémantickou analýzou na front-endu a generováním kódu a optimalizací na back-endu.

V tomto výukovém kurzu návrhu překladače se dozvíte

  • Co je to překladač?
  • Features of Compilers
  • Types of Compiler
  • Tasks of Compiler
  • History of Compiler
  • Steps for Language processing systems
  • Compiler Construction Tools
  • Why use a Compiler?
  • Application of Compilers

Features of Compilers

  • Correctness
  • Speed of compilation
  • Preserve the correct the meaning of the code
  • The speed of the target code
  • Recognize legal and illegal program constructs
  • Good error reporting/handling
  • Code debugging help

Types of Compiler

Following are the different types of Compiler:

  • Single Pass Compilers
  • Two Pass Compilers
  • Multipass Compilers

Single Pass Compiler

Single Pass Compiler
Single Pass Compiler

In single pass Compiler source code directly transforms into machine code. For example, Pascal language.

Two Pass Compiler

Two Pass Compiler
Two Pass Compiler

Two pass Compiler is divided into two sections, viz.

  1. Front end: It maps legal code into Intermediate Representation (IR).
  2. Back end: It maps IR onto the target machine

The Two pass compiler method also simplifies the retargeting process. It also allows multiple front ends.

Multipass Compilers

Multipass Compilers
Multipass Kompilátory

Multipass kompilátor zpracovává zdrojový kód nebo syntaktický strom programu několikrát. Rozdělí velký program na více malých programů a zpracuje je. Vyvíjí více mezikódů. Všechny tyto multipassy berou jako vstup výstup předchozí fáze. Vyžaduje tedy méně paměti. Je také známý jako „široký překladač“.

Úkoly překladače

Hlavní úkoly, které překladač vykonává, jsou následující:

  • Rozdělí zdrojový program na části a vnutí jim gramatickou strukturu
  • Umožňuje sestavit požadovaný cílový program z mezilehlé reprezentace a také vytvořit tabulku symbolů
  • Zkompiluje zdrojový kód a odhalí v něm chyby
  • Spravuje ukládání všech proměnných a kódů.
  • Podporuje oddělenou kompilaci
  • Čte, analyzuje celý program a překládá jej na sémanticky ekvivalentní
  • Převádí zdrojový kód na objektový kód v závislosti na typu stroje

Historie překladače

Důležité mezníky historie překladače jsou následující:

  • Slovo „kompilátor“ poprvé použila na počátku 50. let minulého století Grace Murray Hopperová
  • První kompilátor sestrojil John Backum a jeho skupina v letech 1954 až 1957 ve firmě IBM
  • COBOL byl prvním programovacím jazykem, který byl kompilovaný na více platformách v roce 1960
  • V šedesátých a sedmdesátých letech se pokračovalo ve studiu problematiky skenování a parsování s cílem poskytnout kompletní řešení

Kroky pro systémy zpracování jazyka

Předtím, než jsme se dozvěděli o konceptu kompilátorů, je třeba nejprve pochopit několik dalších nástrojů, které s překladači pracují.

Kroky pro systémy zpracování jazyka
Kroky pro systémy zpracování jazyka

  • Preprocesor: Preprocesor je považován za součást překladače. Je to nástroj, který vytváří vstup pro Překladač. Zabývá se zpracováním maker, rozšiřováním, rozšiřováním jazyka atd.
  • Překladač: Interpret je podobně jako Překladač, který překládá vysokoúrovňový jazyk do nízkoúrovňového strojového jazyka. Hlavní rozdíl mezi oběma je, že interpret čte a transformuje kód řádek po řádku. Překladač přečte celý kód najednou a vytvoří strojový kód.
  • Assembler: Překládá kód jazyka assembleru do strojově srozumitelného jazyka. Výstupní výsledek assembleru je znám jako objektový soubor, který je kombinací strojových instrukcí a také dat potřebných k uložení těchto instrukcí do paměti.
  • Linker: Linker pomáhá spojit a sloučit různé objektové soubory a vytvořit spustitelný soubor. Všechny tyto soubory mohly být zkompilovány samostatnými assemblery. Hlavním úkolem linkeru je vyhledat v programu volané moduly a zjistit místo v paměti, kde jsou všechny moduly uloženy.
  • Zaváděč: Zavaděč je součástí operačního systému, která vykonává úkoly načítání spustitelných souborů do paměti a jejich spouštění. Vypočítává také velikost programu, který vytváří další místo v paměti.
  • Křížový kompilátor: Křížový kompilátor v návrhu překladače je platforma, která pomáhá generovat spustitelný kód.
  • Překladač od zdroje ke zdroji: Source to source compiler je termín používaný při překladu zdrojového kódu jednoho programovacího jazyka do zdrojového kódu jiného jazyka.

Nástroje pro konstrukci kompilátorů

Nástroje pro konstrukci kompilátorů byly zavedeny s tím, jak se technologie související s počítači rozšířily po celém světě. Jsou také známé jako překladače-kompilátory, překladače-generátory nebo překladače.

Tyto nástroje používají specifický jazyk nebo algoritmus pro specifikaci a implementaci součásti překladače. Následují příklady nástrojů pro konstrukci kompilátorů.

  • Generátory skeneru: Tento nástroj přijímá jako vstup regulární výrazy. Například LEX pro operační systém Unix.
  • Syntakticky orientované překladače: Tyto softwarové nástroje nabízejí mezikód pomocí stromu parsování. Jeho cílem je přiřadit ke každému uzlu stromu parsování jeden nebo více překladů.
  • Generátory parserů: Generátor parseru přijímá jako vstup gramatiku a automaticky generuje zdrojový kód, který dokáže analyzovat proudy znaků pomocí gramatiky.
  • Generátory automatického kódu: Přijímá mezikód a převádí je do strojového jazyka
  • Motory datových toků: Tento nástroj je užitečný pro optimalizaci kódu. Zde jsou informace dodány uživatelem a mezikód je porovnáván za účelem analýzy případných vztahů. Je také známý jako analýza toku dat. Pomáhá zjistit, jak jsou hodnoty přenášeny z jedné části programu do druhé.

Proč používat překladač?

  • Kompilátor ověřuje celý program, takže v něm nejsou žádné syntaktické ani sémantické chyby
  • Spustitelný soubor je kompilátorem optimalizován, takže se vykonává rychleji
  • Umožňuje vytvořit vnitřní strukturu v paměti
  • Není nutné spouštět program na stejném stroji, na kterém byl sestaven
  • Přeložit celý program do jiného jazyka
  • Vytvořit soubory na disku
  • Spojení souborů do spustitelného formátu
  • Kontrola syntaktických chyb a datových typů
  • Pomáhá zlepšit porozumění sémantice jazyka
  • Pomáhá řešit problémy s výkonem jazyka
  • Příležitost k netrivial programming project
  • The techniques used for constructing a compiler can be useful for other purposes as well

Application of Compilers

  • Compiler design helps full implementation Of High-Level Programming Languages
  • Support optimization for Computer Architecture Parallelism
  • Design of New Memory Hierarchies of Machines
  • Widely used for Translating Programs
  • Used with other Software Productivity Tools

Summary

  • A compiler is a computer program which helps you transform source code written in a high-level language into low-level machine language
  • Correctness, rychlost kompilace, zachování správného významu kódu jsou některé důležité vlastnosti návrhu kompilátoru
  • Kompilátory se dělí na tři části 1) jednoprůchodové kompilátory 2)dvouprůchodové kompilátory a 3) víceprůchodové kompilátory
  • Slovo „kompilátor“ bylo poprvé použito počátkem 50. let minulého století Grace Murray Hopperovou
  • Kroky pro systém zpracování jazyka jsou: Preprocesor, Interpreter, Assembler, Linker/Loader
  • Důležitými nástroji pro konstrukci kompilátoru jsou: 1) generátory skeneru, 2)Syntax-3) řízené překladače, 4) generátory parseru, 5) generátory automatického kódu
  • Hlavním úkolem kompilátoru je ověřit celý program, aby neobsahoval syntaktické ani sémantické chyby