Compiler

Een compiler is een programma dat broncode vertaalt in objectcode die door een specifieke centrale verwerkingseenheid (CPU) moet worden begrepen. Het vertalen van broncode naar objectcode staat bekend als compilatie. Compilatie wordt meestal gebruikt voor programma’s die broncode vertalen van een programmeertaal op hoog niveau (zoals C ++) naar een programmeertaal op laag niveau (zoals machinecode) om een ​​uitvoerbaar programma te maken. Evenzo wordt het proces decompilatie genoemd wanneer een taal op laag niveau wordt omgezet in een taal op hoog niveau.

Fasen van een compiler

Een compiler voert zijn processen in fasen uit om een ​​efficiënt ontwerp te bevorderen en transformaties van broninvoer naar doeluitvoer te corrigeren. De fasen zijn als volgt:

1. Lexicale Analyzer

Het wordt ook wel een scanner genoemd. De compiler zet de reeks tekens die in de broncode voorkomen, om in een reeks tekenreekskarakters die bekend staan ​​als tokens. Deze tokens worden gedefinieerd door reguliere expressies die worden begrepen door de lexicale analysator. Het verwijdert ook lexicale fouten, opmerkingen en witruimte.

2. Syntaxisanalysator

De syntaxisanalysator construeert de ontleedboom, die is geconstrueerd om te controleren op dubbelzinnigheid in de gegeven grammatica. De syntaxisanalysator neemt alle tokens een voor een en gebruikt contextvrije grammatica om de ontleedboom te construeren. Syntaxisfout kan worden gedetecteerd als de invoer niet in overeenstemming is met de grammatica.

3. Semantische Analyzer

De semantische analysator verifieert de ontleedboom die is geconstrueerd door de syntaxisanalysator. Het voert ook typecontrole, labelcontrole en stroomcontrolecontrole uit.

4. Tussenliggende codegenerator

De tussencodegenerator genereert tussencode voor uitvoering door een machine. Tussenliggende code wordt omgezet in machinetaal met behulp van de laatste twee fasen, die platformafhankelijk zijn.

5. Code Optimizer

De code optimizer transformeert de code zodat deze minder bronnen verbruikt en meer snelheid produceert. De betekenis van de code die wordt getransformeerd, wordt niet gewijzigd.

6. Doelcodegenerator

Dit is de laatste stap in de laatste fase van de compilatie. De doelcodegenerator schrijft code die een machine kan begrijpen en registreert ook toewijzing, instructie en selectie. De output is afhankelijk van het type assembler. De geoptimaliseerde code wordt vervolgens omgezet in machinecode en vormt de invoer voor de linker en lader.

Soorten compilers

Er zijn veel soorten compilers, zoals:

  • Cross-compiler: Het gecompileerde programma draait op een computer met een ander besturingssysteem of CPU dan die waarop de compiler draait. Het is in staat om code te maken voor een ander platform dan het platform waarop de compiler draait
  • Source-to-source compiler: Ook bekend als een transcompiler, vertaalt het broncode geschreven in een programmeertaal naar broncode van een andere programmeertaal.
  • Just-in-time (JIT) -compiler: Een compiler die de compilatie uitstelt tot de runtime. Deze compiler wordt gebruikt voor talen zoals Python en JavaScript, en draait over het algemeen binnen een interpreter.