Sastādītāja fāzes ar piemēru

Satura rādītājs:

Anonim

Kādas ir sastādītāja projektēšanas fāzes?

Kompilators darbojas dažādās fāzēs, un katra fāze pārveido avota programmu no viena attēlojuma uz citu. Katrā fāzē tiek ņemti dati no iepriekšējā posma un tie tiek padoti nākamajai kompilatora fāzei.

Kompilatorā ir 6 fāzes. Katra no šīm fāzēm palīdz pārveidot mašīnkodu augsta līmeņa valodā. Sastādītāja fāzes ir:

  1. Leksiskā analīze
  2. Sintakses analīze
  3. Semantiskā analīze
  4. Starpkodu ģenerators
  5. Kodu optimizētājs
  6. Kodu ģenerators
Sastādītāja fāzes

Visas šīs fāzes pārveido pirmkodu, sadalot to žetonos, izveidojot parsēšanas kokus un optimizējot avota kodu pēc dažādām fāzēm.

Šajā apmācībā jūs uzzināsiet:

  • Kādas ir sastādītāja projektēšanas fāzes?
  • 1. fāze: Leksiskā analīze
  • 2. fāze: sintakses analīze
  • 3. fāze: semantiskā analīze
  • 4. fāze: Starpproduktu ģenerēšana
  • 5. fāze: koda optimizācija
  • 6. fāze: koda ģenerēšana
  • Simbolu tabulas pārvaldība
  • Kļūda, apstrādājot rutīnu:

1. fāze: Leksiskā analīze

Leksiskā analīze ir pirmais posms, kad kompilators skenē pirmkodu. Šo procesu var atstāt pa kreisi pa labi, raksturs pēc rakstura, un grupēt šīs rakstzīmes marķieros.

Šeit rakstzīmju plūsma no avota programmas tiek grupēta jēgpilnās secībās, identificējot marķierus. Tas padara atbilstošo biļešu ievadīšanu simbolu tabulā un nodod šo marķieri nākamajai fāzei.

Šīs fāzes galvenās funkcijas ir:

  • Identificējiet leksiskās vienības avota kodā
  • Klasificējiet leksiskās vienības klasēs, piemēram, konstantes, rezervētos vārdus, un ievadiet tos dažādās tabulās. Tas ignorēs komentārus avota programmā
  • Identificējiet marķieri, kas nav valodas sastāvdaļa

Piemērs :

x = y + 10

Žetoni

X identifikators
= Uzdevumu operators
identifikators
+ Papildinājumu operators
10 Skaits

2. fāze: sintakses analīze

Sintakses analīze ir saistīta ar struktūras atklāšanu kodā. Tas nosaka, vai teksts atbilst paredzētajam formātam. Šīs fāzes galvenais mērķis ir pārliecināties, vai programmētāja uzrakstītais pirmkods ir pareizs vai nav pareizs.

Sintakses analīze balstās uz noteikumiem, kuru pamatā ir konkrētā programmēšanas valoda, konstruējot parsēšanas koku ar žetonu palīdzību. Tas arī nosaka avota valodas struktūru un valodas gramatiku vai sintaksi.

Šeit ir šajā posmā veikto uzdevumu saraksts:

  • Iegūstiet marķierus no leksiskā analizatora
  • Pārbauda, ​​vai izteiksme ir sintaktiski pareiza vai nav
  • Ziņot par visām sintakses kļūdām
  • Izveidojiet hierarhisku struktūru, kas ir pazīstama kā parsēšanas koks

Piemērs

Jebkurš identifikators / numurs ir izteiksme

Ja x ir identifikators un y + 10 ir izteiksme, tad x = y + 10 ir paziņojums.

Apsveriet parsēšanas koku šim piemēram

(a+b)*c

Parsēšanas kokā

  • Iekšējais mezgls: reģistrēts ar operatoru un divi faili bērniem
  • Lapas: ieraksti ar 2 / vairāk laukiem; viens marķierim un cita informācija par marķieri
  • Pārliecinieties, ka programmas komponenti jēgpilni sader kopā
  • Apkopo informāciju par tipu un pārbauda tipa saderību
  • Pārbaudes operandus atļauj avota valoda

3. fāze: semantiskā analīze

Semantiskā analīze pārbauda koda semantisko konsekvenci. Lai pārbaudītu, vai dotais avota kods ir semantiski konsekvents, tas izmanto iepriekšējās fāzes sintakses koku kopā ar simbolu tabulu. Tas arī pārbauda, ​​vai kods nodod atbilstošu nozīmi.

Semantiskais analizators pārbaudīs, vai nav tipu neatbilstības, nesaderīgi operandi, funkcija, kas izsaukta ar nepareiziem argumentiem, nedeklarēts mainīgais utt.

Semantiskās analīzes fāzes funkcijas ir:

  • Palīdz jums saglabāt apkopoto tipa informāciju un saglabāt to simbolu tabulā vai sintakses kokā
  • Ļauj veikt tipa pārbaudi
  • Tipa neatbilstības gadījumā, ja nav precīzu tipa korekcijas noteikumu, kas apmierinātu vēlamo darbību, tiek parādīta semantiska kļūda
  • Apkopo informāciju par tipu un pārbauda tipa saderību
  • Pārbauda, ​​vai avota valoda atļauj operandus

Piemērs

float x = 20.2;float y = x*30;

Iepriekšminētajā kodā semantiskais analizators pirms pavairošanas uzrāda veselu skaitli 30, lai peldētu 30,0

4. fāze: Starpproduktu ģenerēšana

Kad semantiskās analīzes posms ir beidzies kompilatorā, ģenerē mērķa mašīnas starpkodu. Tas attēlo programmu kādai abstraktai mašīnai.

Starpposma kods ir starp augsta līmeņa un mašīnu līmeņa valodu. Šis starpkods ir jāveido tādā veidā, lai to būtu viegli tulkot mērķa mašīnas kodā.

Starpkodu ģenerēšanas funkcijas:

  • To vajadzētu ģenerēt no avota programmas semantiskā attēlojuma
  • Tur tulkošanas laikā aprēķinātās vērtības
  • Palīdz tulkot starpkodu mērķvalodā
  • Ļauj saglabāt pirmavotu kārtību pēc prioritātes
  • Tajā ir pareizs instrukcijas operandu skaits

Piemērs

Piemēram,

total = count + rate * 5

Starpposma kods ar adreses koda metodi ir:

t1 := int_to_float(5)t2 := rate * t1t3 := count + t2total := t3

5. fāze: koda optimizācija

Nākamais posms ir koda optimizācija vai starpposma kods. Šajā posmā tiek noņemta nevajadzīgā koda rinda un sakārtota pārskatu secība, lai paātrinātu programmas izpildi, netērējot resursus. Šīs fāzes galvenais mērķis ir uzlabot starpkodu, lai ģenerētu kodu, kas darbojas ātrāk un aizņem mazāk vietas.

Šīs fāzes galvenās funkcijas ir:

  • Tas palīdz jums noteikt kompromisu starp izpildi un sastādīšanas ātrumu
  • Uzlabo mērķa programmas darbības laiku
  • Ģenerē racionalizētu kodu, kas joprojām atrodas starpposma attēlojumā
  • Noņemama koda noņemšana un atbrīvošanās no neizmantotajiem mainīgajiem
  • Pārskatu, kas nav mainīti, noņemšana no cilpas

Piemērs:

Apsveriet šādu kodu

a = intofloat(10)b = c * ad = e + bf = d

Var kļūt

b =c * 10.0f = e+b

6. fāze: koda ģenerēšana

Kodu ģenerēšana ir kompilatora pēdējā un pēdējā fāze. Tas iegūst ievadi no koda optimizācijas fāzēm un rezultātā izveido lapas kodu vai objekta kodu. Šīs fāzes mērķis ir piešķirt krātuvi un ģenerēt pārvietojamu mašīnkodu.

Tas arī piešķir mainīgajam atmiņas vietas. Starpkoda instrukcijas tiek pārveidotas par mašīnu instrukcijām. Šajā fāzē optimizācijas vai starpposma kods tiek iekļauts mērķa valodā.

Mērķa valoda ir mašīnas kods. Tāpēc šajā fāzē tiek atlasītas un piešķirtas arī visas atmiņas vietas un reģistri. Šajā fāzē ģenerētais kods tiek izpildīts, lai ņemtu ieejas un ģenerētu paredzamos rezultātus.

Piemērs:

a = b + 60,0

Iespējams, tiktu tulkots reģistros.

MOVF a, R1MULF #60.0, R2ADDF R1, R2

Simbolu tabulas pārvaldība

Simbolu tabulā ir ieraksts katram identifikatoram ar laukiem identifikatora atribūtiem. Šis komponents kompilatoram atvieglo identifikatora ieraksta meklēšanu un ātru izgūšanu. Simbolu tabula palīdz arī pārvaldīt darbības jomu. Simbolu tabula un kļūdu apstrādātājs attiecīgi mijiedarbojas ar visām fāzēm un simbolu tabulas atjauninājumu.

Kļūda, apstrādājot rutīnu:

Kompilatora projektēšanas procesā kļūda var rasties visos zemāk norādītajos posmos:

  • Leksiskais analizators: nepareizi uzrakstīti žetoni
  • Sintakses analizators: trūkst iekavas
  • Starpkodu ģenerators: operatoram neatbilstoši operandi
  • Kodu optimizētājs: kad izrakstu nevar sasniegt
  • Kodu ģenerators: nesasniedzami paziņojumi
  • Simbolu tabulas: vairāku deklarēto identifikatoru kļūda

Visbiežāk sastopamās kļūdas ir nederīga rakstzīmju secība skenēšanā, nederīgas marķieru secības pēc veida, darbības jomas kļūda un parsēšana semantiskajā analīzē.

Kļūda var rasties jebkurā no iepriekš minētajām fāzēm. Pēc kļūdu atrašanas fāzei ir jārisina kļūdas, lai turpinātu apkopošanas procesu. Par šīm kļūdām jāziņo kļūdu apstrādātājam, kurš apstrādā kļūdu, lai veiktu kompilēšanas procesu. Parasti par kļūdām tiek ziņots ziņojuma veidā.

Kopsavilkums

  • Kompilators darbojas dažādās fāzēs, un katra fāze pārveido avota programmu no viena attēlojuma uz citu
  • Sešas kompilatora noformēšanas fāzes ir 1) Leksiskā analīze 2) Sintakses analīze 3) Semantiskā analīze 4) Starpkodu ģenerators 5) Koda optimizētājs 6) Koda ģenerators
  • Leksiskā analīze ir pirmais posms, kad kompilators skenē pirmkodu
  • Sintakses analīze ir saistīta ar struktūras atklāšanu tekstā
  • Semantiskā analīze pārbauda koda semantisko konsekvenci
  • Kad semantiskās analīzes posms ir beidzies kompilatorā, ģenerējiet mērķa mašīnas starpposma kodu
  • Kodu optimizācijas fāze noņem nevajadzīgo koda rindiņu un sakārto paziņojumu secību
  • Kodu ģenerēšanas fāze iegūst ievadi no koda optimizācijas fāzes un rezultātā izveido lapas kodu vai objekta kodu
  • Simbolu tabulā ir ieraksts katram identifikatoram ar laukiem identifikatora atribūtiem
  • Kļūdu apstrādes kārtība daudzos posmos apstrādā kļūdas un ziņojumus