Tutorial de proiectare a compilatorului: Ce este, tipuri, instrumente, exemple

Ce este un compilator?

Un compilator este un program de calculator care vă ajută să transformați codul sursă scris într-un limbaj de nivel înalt în limbaj mașină de nivel scăzut. Acesta traduce codul scris într-un limbaj de programare într-un alt limbaj, fără a schimba sensul codului. Compilatorul face, de asemenea, codul final eficient, care este optimizat pentru timpul de execuție și spațiul de memorie.

Procesul de compilare include mecanisme de traducere de bază și detectarea erorilor. Procesul de compilare trece prin analiza lexicală, sintactică și semantică în partea frontală, precum și prin generarea și optimizarea codului în partea din spate.

În acest tutorial de proiectare a compilatorului, veți învăța

  • Ce este un compilator?
  • 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 Compilatoare

Compilatorul multipass procesează de mai multe ori codul sursă sau arborele sintactic al unui program. Acesta împarte un program mare în mai multe programe mici și le procesează. Dezvoltă mai multe coduri intermediare. Toate aceste multipass iau ca intrare ieșirea din faza anterioară. Așadar, necesită mai puțină memorie. Este cunoscut și sub numele de „Wide Compiler”.

Sarcinile compilatorului

Principalele sarcini îndeplinite de compilator sunt:

  • Sparge programul sursă în bucăți și le impune o structură gramaticală
  • Permite construirea programului țintă dorit din reprezentarea intermediară și, de asemenea, creează tabelul de simboluri
  • Compilează codul sursă și detectează erorile din acesta
  • Gestionează stocarea tuturor variabilelor și codurilor.
  • Suportă compilarea separată
  • Citește, analizează întregul program și îl traduce în echivalent semantic
  • Traduce codul sursă în cod obiect în funcție de tipul de mașină

Istoria Compilatorului

Repere importante ale istoriei Compilatorului sunt următoarele:

  • Cuvântul „compilator” a fost folosit pentru prima dată la începutul anilor 1950 de Grace Murray Hopper
  • Primul compilator a fost construit de John Backum și grupul său între 1954 și 1957 la IBM
  • COBOL a fost primul limbaj de programare care a fost compilat pe mai multe platforme în 1960
  • Studiul problemelor de scanare și parsare au fost continuate în anii 1960 și 1970 pentru a oferi o soluție completă

Pași pentru sistemele de procesare a limbajului

Până la cunoașterea conceptului de compilator, trebuie mai întâi să înțelegeți câteva alte instrumente care lucrează cu compilatoare.

Etapele pentru sistemele de procesare a limbajului

Etapele pentru sistemele de procesare a limbajului
  • Preprocesor: Preprocesorul este considerat ca fiind o parte a compilatorului. Este un instrument care produce date de intrare pentru Compilator. Se ocupă cu procesarea macro, augmentarea, extinderea limbajului etc.
  • Interpretor: Un interpretor este ca și Compilatorul care traduce limbajul de nivel înalt în limbaj de mașină de nivel scăzut. Principala diferență între cele două este că interpretul citește și transformă codul linie cu linie. Compilatorul citește întregul cod dintr-o dată și creează codul mașină.
  • Asamblorator: Acesta traduce codul în limbaj de asamblare în limbaj inteligibil pentru mașină. Rezultatul de ieșire al asamblorului este cunoscut sub numele de fișier obiect, care este o combinație de instrucțiuni de mașină, precum și de date necesare pentru a stoca aceste instrucțiuni în memorie.
  • Linker: Linkerul vă ajută să legați și să îmbinați diverse fișiere obiect pentru a crea un fișier executabil. Este posibil ca toate aceste fișiere să fi fost compilate cu asamblatoare separate. Sarcina principală a unui linker este de a căuta modulele apelate într-un program și de a afla locația de memorie în care sunt stocate toate modulele.
  • Loader: Încărcătorul este o parte a sistemului de operare, care îndeplinește sarcinile de încărcare a fișierelor executabile în memorie și de rulare a acestora. De asemenea, acesta calculează dimensiunea unui program care creează spațiu de memorie suplimentar.
  • Cross-compiler: Un compilator încrucișat în proiectarea compilatoarelor este o platformă care vă ajută să generați cod executabil.
  • Source-to-source Compiler: Compilatorul sursă-sursă este un termen utilizat atunci când codul sursă al unui limbaj de programare este tradus în codul sursă al unui alt limbaj.

Instrumente de construcție a compilatoarelor

Instrumentele de construcție a compilatoarelor au fost introduse pe măsură ce tehnologiile legate de calculatoare s-au răspândit în întreaga lume. Ele mai sunt cunoscute și sub denumirea de compilator-compilatoare, compilator-generatoare sau traducător.

Aceste instrumente utilizează un limbaj sau un algoritm specific pentru specificarea și implementarea componentei compilatorului. În continuare sunt prezentate exemple de instrumente de construcție a compilatoarelor.

  • Generatoare de scanere: Acest instrument ia ca intrare expresii regulate. De exemplu LEX pentru sistemul de operare Unix.
  • Motoare de traducere orientate spre sintaxă: Aceste instrumente software oferă un cod intermediar prin utilizarea arborelui de analiză (parse tree). Are scopul de a asocia una sau mai multe traduceri cu fiecare nod al arborelui parse.
  • Generatoare de parsere: Un generator de parser ia ca intrare o gramatică și generează automat un cod sursă care poate analiza fluxuri de caractere cu ajutorul unei gramatici.
  • Generatoare automate de cod: Preia codul intermediar și le convertește în limbajul mașinii
  • Motoare de flux de date: Acest instrument este util pentru optimizarea codului. Aici, informațiile sunt furnizate de utilizator și codul intermediar este comparat pentru a analiza orice relație. Este, de asemenea, cunoscut sub numele de analiză a fluxului de date. Vă ajută să aflați modul în care valorile sunt transmise de la o parte a programului la o altă parte.

De ce să folosiți un compilator?

  • Compilatorul verifică întregul program, astfel încât să nu existe erori de sintaxă sau semantice
  • Fișierul executabil este optimizat de către compilator, astfel încât se execută mai rapid
  • Permite crearea unei structuri interne în memorie
  • Nu este nevoie să executați programul pe aceeași mașină pe care a fost construit
  • Traduceți întregul program în alt limbaj
  • Generează fișiere pe disc
  • Legitimați fișierele într-un format executabil
  • Verificați dacă există erori de sintaxă și tipuri de date
  • Ajută la îmbunătățirea înțelegerii semanticii limbajului
  • Ajută la gestionarea problemelor de performanță a limbajului
  • Oportunitate de a nutrivial 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, viteza de compilare, păstrarea corectă a sensului codului sunt câteva caracteristici importante ale proiectării compilatoarelor
  • Compilatoarele sunt împărțite în trei părți 1) Compilatoare cu o singură trecere 2)Compilatoare cu două treceri și 3) Compilatoare cu mai multe treceri
  • „Compilator” a fost cuvântul folosit pentru prima dată la începutul anilor 1950 de Grace Murray Hopper
  • Pasii pentru sistemul de procesare a limbajului sunt: Preprocesor, Interpretor, Asamblor, Linker/Loader
  • Instrumentele importante de construcție a compilatoarelor sunt: 1) Generatoare de scanare, 2)Motoare de traducere dirijată a sintaxei-3), 4) Generatoare de parser, 5) Generatoare de cod automat
  • Sarcina principală a compilatorului este de a verifica întregul program, astfel încât să nu existe erori de sintaxă sau semantice

.