Ce este un design al compilatorului? Tipuri, instrumente de construcție, exemplu

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 de mașină de nivel scăzut. Traduce codul scris într-un limbaj de programare într-un alt limbaj fără a schimba sensul codului. De asemenea, compilatorul face eficient codul final, 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 compilatorului trece prin analiză lexicală, sintaxă și semantică la nivelul front-end și generarea și optimizarea codului la nivelul back-end.

compilator

Caracteristicile compilatoarelor

  • Corectitudine
  • Viteza de compilare
  • Păstrați sensul corect al codului
  • Viteza codului țintă
  • Recunoașteți structurile legale și ilegale ale programului
  • Raportare/tratare bună a erorilor
  • Ajutor pentru depanarea codului

Tipuri de compilator

Următoarele sunt diferitele tipuri de compilator:

  • Compilatoare cu o singură trecere
  • Compilatoare cu două treceri
  • Compilatoare Multipass

Compilator cu o singură trecere

Compilator cu o singură trecere
Compilator cu o singură trecere

Într-o singură trecere, codul sursă al compilatorului se transformă direct în cod mașină. De exemplu, limbajul Pascal.

Compilator cu două treceri

Compilator cu două treceri
Compilator cu două treceri

Compilatorul cu două treceri este împărțit în două secțiuni, adică.

  1. În față: Mapează codul legal în Reprezentare intermediară (IR).
  2. Capătul din spate: Mapează IR pe mașina țintă

Metoda compilatorului Two pass simplifică, de asemenea, procesul de retargeting. De asemenea, permite mai multe front-end-uri.

Compilatoare Multipass

Compilatoare Multipass
Compilatoare Multipass

Compilatorul multipass prelucrează codul sursă sau arborele de sintaxă al unui program de mai multe ori. A împărțit un program mare în mai multe programe mici și le procesează. Ea dezvoltă mai multe coduri intermediare. Toate aceste treceri multiple iau ca intrare ieșirea fazei anterioare. Deci necesită mai puțină memorie. Este, de asemenea, cunoscut sub numele de „Wide Compiler”.

Sarcinile compilatorului

Principalele sarcini îndeplinite de compilator sunt:

  • Descompune programul sursă în bucăți și le impune structura gramaticală
  • Vă permite să construiți programul țintă dorit din reprezentarea intermediară și, de asemenea, să creați tabelul de simboluri
  • Compilează codul sursă și detectează erorile din acesta
  • Gestionați stocarea tuturor variabilelor și codurilor.
  • Suport pentru compilare separată
  • Citiți, analizați întregul program și traduceți în echivalent semantic
  • Traducerea codului sursă în cod obiect în funcție de tipul de mașină

Istoria compilatorului

Reper important al istoriei compilatorului este următorul:

  • 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 analiză a fost urmărit în anii 1960 și 1970 pentru a oferi o soluție completă.

Etape pentru sistemele de procesare a limbajului

Înainte de a cunoaște conceptul de compilatoare, mai întâi trebuie să înțelegeți câteva alte instrumente care funcționează cu compilatoare.

Etape pentru sistemele de procesare a limbajului
Etape pentru sistemele de procesare a limbajului
  • Preprocesor: Preprocesorul este considerat parte a compilatorului. Este un instrument care produce intrare pentru compilator. Se ocupă de macroprocesare, augmentare, extensie de limbaj etc.
  • Interpret: Un interpret este ca un compilator care traduce limbajul de nivel înalt în limbaj de mașină de nivel scăzut. Principala diferență dintre ambele este că interpretul citește și transformă codul linie cu linie. Compilatorul citește întregul cod deodată și creează codul mașinii.
  • Montator: traduce codul limbajului de asamblare într-un limbaj ușor de înțeles de mașină. Rezultatul de ieșire al asamblatorului este cunoscut ca un fișier obiect, care este o combinație de instrucțiuni ale mașinii, precum și datele necesare pentru a stoca aceste instrucțiuni în memorie.
  • linker: Linker-ul vă ajută să legați și să îmbinați diferite fișiere obiect pentru a crea un fișier executabil. Este posibil ca toate aceste fișiere să fi fost compilate cu asamblare separate. Sarcina principală a unui linker este să caute modulele numite într-un program și să afle locația de memorie în care sunt stocate toate modulele.
  • Încărcător: î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 a le rula. De asemenea, calculează dimensiunea unui program care creează spațiu suplimentar de memorie.
  • Compiler încrucișat: Un compilator încrucișat în proiectarea compilatorului este o platformă care vă ajută să generați cod executabil.
  • Compilator de la sursă la sursă: Compilatorul sursă la sursă este un termen folosit atunci când codul sursă al unui limbaj de programare este tradus în sursa altui limbaj.

Instrumente de construcție a compilatorului

Instrumentele de construcție a compilatorului au fost introduse ca tehnologii legate de computer răspândite în întreaga lume. Ele sunt, de asemenea, cunoscute ca un compilator-compilator, compilator-generator sau translator.

Aceste instrumente folosesc un limbaj sau un algoritm specific pentru specificarea și implementarea componentei compilatorului. Urmează un exemplu de instrumente de construcție a compilatorului.

  • Generatoare de scanere: Acest instrument preia expresii regulate ca intrare. De exemplu LEX pentru Unix Operating System.
  • Motoare de traducere direcționate pe sintaxă: Acestea software-unelte oferă un cod intermediar utilizând arborele de analiză. Are scopul de a asocia una sau mai multe traduceri cu fiecare nod al arborelui de analiză.
  • Generatoare de analizoare: Un generator de parser ia o gramatică ca intrare și generează automat codul sursă care poate analiza fluxuri de caractere cu ajutorul unei gramatici.
  • Generatoare automate de coduri: Preia codul intermediar și îl 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, iar codul intermediar este comparat pentru a analiza orice relație. Este cunoscută și ca analiză a fluxului de date. Vă ajută să aflați cum sunt transmise valorile dintr-o parte a programului în alta.

De ce să folosiți un compilator?

  • Compilatorul verifică întregul program, deci nu există erori de sintaxă sau semantică.
  • Fișierul executabil este optimizat de compilator, astfel încât se execută mai rapid.
  • Vă permite să creați o structură internă î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ă limbă.
  • Generați fișiere pe disc.
  • Conectați fișierele într-un format executabil.
  • Verificați erorile de sintaxă și tipurile de date.
  • Vă ajută să vă îmbunătățiți înțelegerea semanticii limbii.
  • Ajută la rezolvarea problemelor de performanță lingvistică.
  • Oportunitate pentru un proiect de programare non-trivial.
  • Tehnicile utilizate pentru construirea unui compilator pot fi utile și în alte scopuri.

Aplicarea compilatoarelor

  • Designul compilatorului ajută la implementarea completă a limbajelor de programare de nivel înalt.
  • Suport optimizare pentru computer ArchiParalelism de tectură.
  • Proiectarea noilor ierarhii de memorie a mașinilor.
  • Folosit pe scară largă pentru traducerea programelor.
  • Folosit cu alte instrumente de productivitate software.

Rezumat

  • Un compilator este un program de calculator care vă ajută să transformați codul sursă scris într-un limbaj de nivel înalt în limbaj de mașină de nivel scăzut.
  • Corectitudinea, viteza de compilare, păstrarea corectă a sensului codului sunt câteva caracteristici importante ale designului compilatorului.
  • 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.
  • Cuvântul „compilator” a fost folosit pentru prima dată la începutul anilor 1950 de Grace Murray Hopper.
  • Pașii pentru sistemul de procesare a limbajului sunt: ​​Preprocesor, Interpret, Assembler, Linker/Loader.
  • Instrumentele importante de construcție a compilatorului sunt: ​​1) Generatoare de scanare, 2) Sintaxă-3) motoare de traducere direcționată, 4) Generatoare de analiză, 5) Generatoare automate de cod.
  • Sarcina principală a compilatorului este să verifice întregul program, astfel încât să nu existe erori de sintaxă sau semantică.

Rezumați această postare cu: