Forskellen mellem kompilator og samler

Forfatter: Laura McKinney
Oprettelsesdato: 1 April 2021
Opdateringsdato: 12 Kan 2024
Anonim
Как устроен garbage collector в Go 1.9 - Андрей Дроздов, Avito
Video.: Как устроен garbage collector в Go 1.9 - Андрей Дроздов, Avito

Indhold


Compiler og Assembler spiller en vigtig rolle i udførelsen af ​​et program. Nogle compilere genererer direkte den eksekverbare kode i stedet for samlingskoden. Kompilatoren tager den forbehandlede kildekode og oversætter den til samlingskoden. Samleren tager samlingskoden fra kompilatoren og oversætter den til den flytbare maskinkode. I denne artikel har jeg drøftet forskellene mellem kompilator og samler ved hjælp af sammenligningstabellen vist nedenfor, bare kig.

  1. Sammenligningstabel
  2. Definition
  3. Vigtige forskelle
  4. Konklusion

Sammenligningstabel

Grundlag for sammenligningCompiler assembler
GrundlæggendeGenererer samlingen sprogkode eller direkte den eksekverbare kode.Genererer den flytbare maskinkode.
InputForbehandlet kildekode.Samlingens sprogkode.
Faser / beståKompilationsfaserne er leksikalsk analysator, syntaksanalysator, semantisk analysator, mellemliggende kodegenerering, kodeoptimering, kodegenerering.Assembler foretager to pas over det givne input.
ProduktionSamlingskoden genereret af kompilatoren er en mnemonic version af maskinkode.Den flytbare maskinkode genereret af en samler repræsenteres af binær kode.


Definition af Compiler

Det compiler er et computerprogram, der læser programmet skrevet på et kildesprog, oversætter det til ækvivalent samling sprog og videresender samlingens sprogkode til assembler. Mens oversættelsen af ​​kildekoden til samlingskoden rapporterer kompilatoren også fejl i kildekoden til dens bruger.

Kompilatorer er også klassificeret som single-pass, multi-pass, load-and-go, debugging og optimering. Klassificering udføres på baggrund af, hvilken funktion en kompilator udfører, og hvordan den er konstrueret. På trods af disse kompleksiteter forbliver kompilatorens grundlæggende opgave den samme.

Samlingen udføres i to dele, analyse del og syntese del. Det analyse del bryder kildekoden i bestanddele og danner den mellemliggende repræsentation af kildekoden. Det syntese del danner målkoden fra den mellemliggende repræsentation.


Samlingen udføres i følgende faser:

Leksikalisk analysator, syntaksanalysator, semantisk analysator, mellemliggende kodegenerator, kodeoptimeringsværktøj, kodegenerator, symboltabel og fejlhåndterer.

  • Det leksikalsk analysator læser tegnene i kildekoden og grupperer dem i strømme af symboler. Hvert token repræsenterer den logiske rækkefølge af karakterer som nøgleord, identifikatorer, operatører. Karaktersekvensen, der danner et token kaldes lexeme.
  • Det syntaksanalysator analyserer token opnået fra leksikalsk analysator og grupperer tegn i en hierarkisk struktur.
  • Det semantisk analysator tjekker kildekoden for nogen semantisk fejl.
  • Mellemkodegenerator genererer mellemrepræsentation af kildekoden
  • Det kode Optimizer optimerer mellemkoden til hurtigere kørende maskinkode.
  • Det kode generator til sidst genererer den målkode, der er en flytbar maskinkode eller en samlingskode.
  • Det symbol bord er en datastruktur, der indeholder posten for hver identifikator i kildekoden.
  • Fejlhåndterer registrerer fejlen i hver fase og håndterer disse fejl.

Definition af samler

Nogle compilere udfører samlingen og genererer direkte en flytbar maskinkode i stedet for monteringskode, som videre sendes direkte til linker / loader. Det assembler tager som input den samlingen kode, der er genereret af compileren og oversætter den til flytbar maskinkode.

Lad os se, hvordan maskinkoden er forskellig fra monteringskoden. Samlingskode er huskeregel version af maskinkode. Det betyder, at samlingskoden bruger navne til at repræsentere operationer, og den giver endda navn til hukommelsesadresserne. På de andre hænder maskinkode anvendelser binære koder til repræsentation af operationer og hukommelsesadresser.

Selv den enkleste form for samler fungerer to pas over input. Det første pas registrerer alle identifikatorer i samlingskoden, der angiver lagerplads og gemmer dem i symbol bord (undtagen symboltabel for samlere). Det lagerplads tildeles til den identifikator, der er fundet i den første gennemgang.

I anden pas, indgangen scannes igen, og denne gang betjeningskode er oversat til en række af bits der repræsenterer denne operation i maskinkoden. Andet pas oversættes også identifikatorer ind i adresser defineret i symboltabellen. Således genererer den anden gennemgang flytbar maskinkode.

  1. Den vigtigste forskel mellem kompilator og samler er, at compiler genererer samlingskode, og nogle compilere kan også direkte generere eksekverbar kode, mens assembler genererer flytbar maskinkode.
  2. Kompilatoren tager som input forbehandlet kode genereret af forbehandler. På de andre hænder tager samleren samling kode som input.
  3. Samlingen finder sted i to faser, som er analysefase og syntese fase. I analysefasen gennemføres input leksikalsk analysator, syntaksanalysator, semantisk analysator hvorimod synteseanalysen finder sted via mellemliggende kode generator, kode optimizer, kode generator. På de andre hænder passerer samleren indgangen igennem to faser. Den første fase detekterer identifikatorerne og tildeler adresser til dem i den anden fase samles koden til binær kode.
  4. Samlingskoden genereret af kompilatoren er en mnemonic version af maskinkode. Imidlertid er den flytbare maskinkode genereret af samleren en binær flytningskode.

Konklusion:

Det er muligvis ikke nødvendigt med samleren, da nogle compilere direkte genererer eksekverbar kode. Hvis assembler bruges, kræver det linker til at linke alle de indbyggede biblioteker til bibliotekets funktioner, der bruges i kildekoden.