Fordítótervezés oktatóprogram:

Mi az a fordító?

A fordító egy olyan számítógépes program, amely segít a magas szintű nyelven írt forráskódot alacsony szintű gépi nyelvvé alakítani. Az egyik programozási nyelven írt kódot lefordítja egy másik nyelvre anélkül, hogy a kód jelentését megváltoztatná. A fordítóprogram a végkódot is hatékonnyá teszi, amely a végrehajtási időre és a memóriaterületre optimalizált.

A fordítási folyamat magában foglalja az alapvető fordítási mechanizmusokat és a hibafelismerést. A fordítófolyamat az elülső oldalon lexikai, szintaktikai és szemantikai elemzésen, a hátsó oldalon pedig kódgeneráláson és optimalizáláson megy keresztül.

Ebben a fordítótervezés oktatóanyagban megtudhatja

  • Mi az a fordító?
  • 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 Compilers

A multipass compiler egy program forráskódját vagy szintaxisfáját többször is feldolgozza. Egy nagy programot több kis programra oszt, és ezeket dolgozza fel. Több köztes kódot fejleszt ki. Mindegyik multipass az előző fázis kimenetét veszi bemenetként. Így kevesebb memóriát igényel. Széles fordítónak is nevezik.

A fordító feladatai

A fordító által végzett fő feladatok a következők:

  • A forrásprogramot darabokra bontja és nyelvtani szerkezetet szab rájuk
  • Elkészíti a kívánt célprogramot a köztes reprezentációból, és létrehozza a szimbólumtáblázatot is
  • Kompilálja a forráskódot és felismeri benne a hibákat
  • Kezeli az összes változó és kód tárolását.
  • Támogatja a különálló fordítást
  • Elolvassa, elemzi a teljes programot, és lefordítja szemantikailag egyenértékűre
  • A forráskódot a gép típusától függően objektumkódra fordítja

A fordító története

A fordító történetének fontos mérföldkövei a következők:

  • A “compiler” szót először Grace Murray Hopper használta az 1950-es évek elején
  • Az első fordítót John Backum és csoportja építette 1954 és 1957 között az IBM-nél
  • ACOBOL volt az első programozási nyelv, amelyet lefordítottak. több platformon 1960-ban
  • A szkennelési és elemzési kérdések tanulmányozását az 1960-as és 1970-es években folytatták a teljes megoldás érdekében

A nyelvfeldolgozó rendszerek lépései

A fordítók fogalmának megismerése előtt, először meg kell értenünk néhány más eszközt, amelyek a fordítókkal együtt dolgoznak.

A nyelvfeldolgozó rendszerek lépései
Lépések a nyelvfeldolgozó rendszerekhez

  • Preprocesszor: A preprocesszor a fordító részének tekinthető. Ez egy olyan eszköz, amely inputot állít elő a Compiler számára. Makrófeldolgozással, bővítéssel, nyelvi kiterjesztéssel stb. foglalkozik.
  • Interpreter: Az értelmező a fordítóhoz hasonlóan a magas szintű nyelvet alacsony szintű gépi nyelvre fordítja. A fő különbség a kettő között az, hogy az értelmező soronként olvassa és alakítja át a kódot. A fordító egyszerre olvassa a teljes kódot, és létrehozza a gépi kódot.
  • Assembler: Az assembly nyelvű kódot fordítja le gépileg érthető nyelvre. Az asszembler kimeneti eredménye objektumfájlként ismert, amely a gépi utasítások, valamint az ezen utasítások memóriában való tárolásához szükséges adatok kombinációja.
  • Linkelő: A linkelő segít a különböző objektumfájlok összekapcsolásában és egyesítésében egy futtatható fájl létrehozásához. Mindezeket a fájlokat esetleg külön assemblerekkel fordították le. A linkelő fő feladata, hogy megkeresse a programban a hívott modulokat, és kiderítse azt a memóriahelyet, ahol az összes modul található.
  • Betöltő: A betöltő az operációs rendszer része, amely a futtatható fájlok memóriába töltésének és futtatásának feladatait végzi. Emellett kiszámítja a program méretét, amely további memóriaterületet hoz létre.
  • Keresztkompilátor: A keresztfordító a fordítótervezésben egy olyan platform, amely segít a végrehajtható kód létrehozásában.
  • Forrásból forrásba fordító: Forrásból forrásba fordítóról akkor beszélünk, amikor egy programozási nyelv forráskódját egy másik nyelv forrásába fordítjuk.

Fordítószerkesztő eszközök

A fordítókészítő eszközök a számítógépekkel kapcsolatos technológiák világméretű elterjedésével jelentek meg. Nevezik őket fordító-fordítónak, fordító-generátornak vagy fordítónak is.

Ezek az eszközök speciális nyelvet vagy algoritmust használnak a fordító komponensének megadására és megvalósítására. Az alábbiakban a fordítószerkesztési eszközökre mutatunk példát.

  • Szkennergenerátorok: Ez az eszköz bemenetként reguláris kifejezéseket fogad el. Például LEX a Unix operációs rendszerhez.
  • Szintaxisvezérelt fordítómotorok: Ezek a szoftvereszközök a parse-fa felhasználásával köztes kódot kínálnak. Célja, hogy a parse-fa minden egyes csomópontjához egy vagy több fordítást társítson.
  • Parsergenerátorok: Az elemzőgenerátor bemenetként egy nyelvtant fogad el, és automatikusan olyan forráskódot generál, amely a nyelvtan segítségével képes elemezni a karakterek folyamát.
  • Automatikus kódgenerátorok: Közbenső kódot vesz és gépi nyelvvé alakítja át
  • Adatfolyam-motorok: Ez az eszköz hasznos a kódoptimalizáláshoz. Itt a felhasználó által megadott információkat és a köztes kódot összehasonlítják, hogy elemezzenek minden kapcsolatot. Adatfolyam-elemzésként is ismert. Segít kideríteni, hogy az értékek hogyan továbbítódnak a program egyik részéből a másikba.

Miért használjunk fordítót?

  • A fordító ellenőrzi a teljes programot, így nincsenek szintaktikai vagy szemantikai hibák
  • A végrehajtható fájlt a fordító optimalizálja, így gyorsabban végrehajtódik
  • Elkészíti a belső struktúrát a memóriában
  • Nem kell a programot ugyanazon a gépen futtatni, ahol elkészült
  • A teljes programot lefordítja más nyelvre
  • Generálja a fájlokat a lemezen.
  • A fájlok összekapcsolása végrehajtható formátumba
  • Szintaktikai hibák és adattípusok ellenőrzése
  • Segít a nyelv szemantikájának jobb megértésében
  • Segít a nyelvi teljesítményproblémák kezelésében
  • lehetőség egy nem-trivial 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, a fordítás gyorsasága, a kód jelentésének helyes megőrzése a fordítóprogram tervezésének néhány fontos jellemzője
  • A fordítók három részre oszthatók: 1) egymenetes fordítók 2)kétmenetes fordítók, és 3) többmenetes fordítók
  • A “fordító” szót először Grace Murray Hopper használta az 1950-es évek elején
  • A nyelvfeldolgozó rendszer lépései a következők: Preprocesszor, Interpreter, Assembler, Linker/Loader
  • A fordítókészítés fontos eszközei: 1) Szkenner generátorok, 2)Szintaxis-3) irányított fordítómotorok, 4) Parser generátorok, 5) Automatikus kódgenerátorok
  • A fordító fő feladata a teljes program ellenőrzése, hogy ne legyenek szintaktikai vagy szemantikai hibák

.