Atšķirība starp kompilatoru un montētāju

Autors: Laura McKinney
Radīšanas Datums: 1 Aprīlis 2021
Atjaunināšanas Datums: 11 Maijs 2024
Anonim
Translators |Assembler| Compiler| Interpreter| Coding Academy
Video: Translators |Assembler| Compiler| Interpreter| Coding Academy

Saturs


Sastādītājam un montētājam ir liela loma programmas izpildē. Daži kompilatori tieši ģenerē izpildāmo kodu, nevis montāžas kodu. Kompilators ņem sākotnēji apstrādātu avota kodu un pārveido to montāžas kodā. Montētājs paņem montāžas kodu no kompilatora un tulko to uz pārvietojamo mašīnas kodu. Šajā rakstā es esmu apspriedis atšķirības starp kompilatoru un montētāju, izmantojot salīdzināšanas diagrammu, kas parādīta zemāk, vienkārši apskatiet.

  1. Salīdzināšanas tabula
  2. Definīcija
  3. Galvenās atšķirības
  4. Secinājums

Salīdzināšanas tabula

Salīdzināšanas pamatsSastādītājs Montētājs
PamataĢenerē montāžas valodas kodu vai tieši izpildāmo kodu.Ģenerē pārvietojamo mašīnas kodu.
IevadeIepriekš apstrādāts avota kods.Montāžas valodas kods.
Fāzes / caurlaidesApkopošanas fāzes ir leksiskais analizators, sintakse analizators, semantiskais analizators, starpposma koda ģenerēšana, koda optimizācija, koda ģenerēšana.Montieris izdara divas piespēles pa doto ievadi.
IzejaKompilatora ģenerētais montāžas kods ir mašīnas koda mnemoniska versija.Pārvietojamo mašīnas kodu, ko ģenerējis montētājs, attēlo ar bināro kodu.


Sastādītāja definīcija

sastādītājs ir datorprogramma, kas lasa programmu, kas rakstīta avota valodā, pārveido to līdzvērtīgā versijā montāžas valoda un pārsūta montāžas valodas kodu Montētājs. Lai arī avota koda tulkošana uz montāžas kodu, kompilators arī ziņo par kļūda avota kodā tā lietotājam.

Sastādītājus klasificē arī kā vienreizējas, daudzkārtējas, kravas un aiziešanas, atkļūdošana un optimizēšana. Klasifikācija tiek veikta, pamatojoties uz to, kādu funkciju veic kompilators un kā tā ir uzbūvēta. Neskatoties uz šīm sarežģītībām, kompilatora pamata uzdevums paliek tāds pats.

Kompilācija tiek veikta divās daļās, analīzes daļa un sintēzes daļa. analīzes daļa sadala avota kodu komponentos un veido starpposma avota kodu. sintēzes daļa no starpposma attēlojuma veido mērķa kodu.

Apkopošana tiek veikta šādās fāzēs:


Leksiskais analizators, sintakse analizators, semantiskais analizators, starpposma kodu ģenerators, koda optimizētājs, kodu ģenerators, simbolu tabula un kļūdu apstrādātājs.

  • leksiskais analizators nolasa avota koda rakstzīmes un sagrupē tās žetonu plūsmas. Katrs marķieris apzīmē tādu zīmju loģisko secību kā atslēgvārds, identifikatori, operatori. Tiek saukta rakstzīmes secība, kas veido marķieri Lexeme.
  • sintakse analizators parsē marķieri, kas iegūts no leksiskā analizatora, un grupē marķierus a hierarhiskā struktūra.
  • semantiskais analizators pārbauda avota kodu semantiskā kļūda.
  • Starpposma kodu ģenerators ģenerē starpposma attēlojums no avota koda
  • koda optimizētājs optimizē starpposma kodu ātrāk darbināmam mašīnas kodam.
  • kodu ģenerators beidzot ģenerē mērķa kodu, kas ir pārvietojams mašīnas kods vai montāžas kods.
  • simbolu tabula ir datu struktūra, kas satur katra avota koda identifikatora ierakstu.
  • Kļūdu apstrādātājs atrod kļūdu katrā fāzē un apstrādā šīs kļūdas.

Montāža definīcija

Daži kompilatori veic montētāja uzdevumu un tieši ģenerē pārvietojamu mašīnas kodu, nevis montāžas kodu, kas tālāk tiek tieši nodots linker / iekrāvējam. montētājs kā ievadi ņem kompilatora ģenerēto montāžas kodu un pārveido to pārvietojams mašīnas kods.

Ļaujiet mums redzēt, kā mašīnas kods atšķiras no montāžas koda. Montāžas kods ir mnemonisks mašīnas koda versija. Tas nozīmē, ka montāžas kods operāciju attēlošanai izmanto nosaukumus un tas pat piešķir nosaukumus atmiņas adresēm. No otras puses mašīnas kods izmanto binārie kodi operāciju un atmiņas adrešu attēlošanai.

Izpildās pat visvienkāršākā montētāja forma divas piespēles pār ievadi. pirmā piespēle atrod visu identifikatori montāžas kodā, kas apzīmē glabāšanas vietu, un glabā tos simbolu tabula (izņemot simbolu tabulu). tiek piešķirta uzglabāšanas vieta uz identifikatoru, kas rodas pirmajā caurlaidē.

Iekš otrā piespēle, ievade tiek skenēta vēlreiz, un šoreiz operācijas kods ir tulkots uz a bitu secība attēlojot šo operāciju mašīnas kodā. Otrā caurlaide arī tulko identifikatori iekšā adreses definēts simbolu tabulā. Tādējādi otrā caurlaide ģenerē pārvietojams mašīnas kods.

  1. Galvenā atšķirība starp kompilatoru un montētāju ir tā, ka sastādītājs ģenerē montāžas kodu, un daži kompilatori var arī tieši ģenerēt izpildāmu kodu, savukārt montētājs ģenerē pārvietojamu mašīnas kodu.
  2. Kompilators kā ievadi ņem iepriekš apstrādāts kods kuru ģenerējis priekšapstrādātājs. No otras puses, montētājs ņem montāžas kods kā ievadi.
  3. Apkopošana notiek divās fāzēs analīzes fāze un sintēzes fāze. Analīzes fāzē tiek ievadīta informācija leksiskais analizators, sintakse analizators, semantiskais analizators tā kā sintēzes analīze notiek caur starpposma kodu ģenerators, koda optimizētājs, koda ģenerators. No otras puses, montētājs izvada ievadi caur divas fāzes. Pirmajā fāzē tiek identificēti identifikatori un tiem piešķirtās adreses, otrajā posmā montāžas kods tiek tulkots binārā kodā.
  4. Kompilatora ģenerētais montāžas kods ir a mnemonisks variants mašīnas koda. Tomēr montētāja ģenerētais pārvietojamais mašīnas kods ir a binārs pārvietojams kods.

Secinājums:

Montāža, iespējams, nav nepieciešama, jo daži kompilatori tieši ģenerē izpildāmu kodu. Ja tiek izmantots montētājs, tas prasa saistītāju, lai visas iebūvētās bibliotēkas tiktu sasaistītas ar avota kodā izmantotajām bibliotēkas funkcijām.