Wat is het verschil tussen Single Pass en Multipass Compiler

De grootste verschil tussen single-pass en multipass-compiler is dat een single-pass-compiler is een compiler die de broncode slechts één keer door elke compilatie-eenheid doorgeeft terwijl een multipass-compilator de compilatie in meerdere passages verdeelt, waarbij elke pass wordt voortgezet met het resultaat van de vorige pass.

Een computerprogramma is een set instructies voor de computer om een ​​bepaalde taak uit te voeren. Gewoonlijk schrijven programmeurs programma's met programmeertalen op hoog niveau. De computer begrijpt deze instructies echter niet. Daarom is het noodzakelijk om de broncode om te zetten in een machine-begrijpbare machinecode. Een compiler is een software die de broncode omzet in machinecode, en de single-pass en multipass-compiler zijn twee soorten compilers.

Key Areas Covered

1. Wat is een single-pass-compiler
     - Definitie, functionaliteit
2. Wat is een multipass-compileerprogramma?
     - Definitie, functionaliteit
3. Wat is het verschil tussen Single Pass en Multipass Compiler
     - Vergelijking van belangrijke verschillen

Sleutelbegrippen

Single Pass-compiler, multipass-compiler

Wat is een single-pass-compiler

Er zijn een aantal fasen in het compilatieproces. Een single-pass-compiler maakt een enkele passage door de brontekst, ontleedt, analyseert en genereert code slechts eenmaal. Met andere woorden, hierdoor kan de broncode slechts eenmaal door elke compilatie-eenheid passeren. Het vertaalt elke codegedeelte onmiddellijk in zijn uiteindelijke machinecode. 

Figuur 1: Compiler

Hoofdfasen van de single pass-compiler zijn lexicale analyse, syntactische analyse en codegenerator. Ten eerste scant de lexicale analyse de broncode en verdeelt deze in tokens. Elke programmeertaal heeft een grammatica. Het vertegenwoordigt de syntaxis en de wettelijke verklaringen van de taal. Vervolgens bepaalt de syntactische analyse de taalconstructies die door de grammatica worden beschreven. Ten slotte genereert de codegenerator de doelcode. Over het algemeen optimaliseert de single pass-compiler de code niet. Bovendien is er geen generatie van tussencodes.  

Wat is Multipass-compileerprogramma?

Een multipass-compiler zorgt ervoor dat de broncode meerdere keren doorloopt met parseren, analyseren, genereren, etc. terwijl er na elke fase een tussencode wordt gegenereerd. Het converteert het programma in een of meer tussenvoorstellingen in stappen tussen broncode en machinecode. Het herverwerkt de gehele compilatie-eenheid in elke opeenvolgende passage.

Elke passage neemt het resultaat van de vorige passage als de invoer en creëert een tussenliggende uitvoer. Op dezelfde manier verbetert de code in elke passage totdat de laatste pass de definitieve code genereert. Een multipass-compiler voert extra taken uit, zoals het genereren van tussencodes, machine-afhankelijke code-optimalisatie en machineonafhankelijke code-optimalisatie.

Figuur 2: Multipass-compileerprogramma

Multipass-compilers bieden meerdere voordelen. Ze zijn machine-onafhankelijk en bevatten een modulaire structuur. De codegeneratie ontkoppelt van de andere compilatiestappen. Daarom kunnen de passen opnieuw worden gebruikt voor verschillende machines of hardware. Bovendien vertegenwoordigt het meer complexe en expressieve talen.

Verschil tussen Single Pass en Multipass Compiler

Definitie

Een single-pass-compiler is een type compiler dat slechts één keer door de delen van elke compilatie-eenheid loopt, waarbij elk codegedeelte onmiddellijk wordt vertaald in de uiteindelijke machinecode. Een multipass-compiler is een type compiler dat de broncode of abstracte syntaxisboom van een programma verschillende keren verwerkt. Vandaar dat deze definities het belangrijkste verschil tussen single-pass en multipass-compiler verklaren.

Snelheid

Snelheid is een groot verschil tussen de single-pass en de multipass-compiler. Een multipass-compiler is langzamer dan de single-pass-compiler omdat elke pass een tussenliggend bestand leest en schrijft.

Synoniemen

Een single-pass-compiler wordt ook wel een smalle compiler genoemd, terwijl een multipass-compiler een brede compiler wordt genoemd.

strekking

Bovendien heeft een single pass-compiler een beperkte scope, terwijl een multipass-compiler een groter bereik heeft.

Code optimalisatie

Een ander verschil tussen de single-pass en multipass-compiler is dat er geen code-optimalisatie is in de single-pass-compiler, in tegenstelling tot de multipass-compiler, die code-optimalisatie heeft.

Tussenliggende codes

Tussenliggende codes maken ook een verschil tussen de single-pass en de multipass-compiler. Er is geen tussenliggende codegeneratie in compilers met één enkele doorloop. Er is echter een tussencode-generatie in multipass-compilers.

Compilatietijd

Bovendien vergt een compileer voor een enkele pass een minimale tijd om te compileren in vergelijking met een multipass-compiler.

Geheugenconsumptie

Ook is het geheugengebruik in een multipass-compiler hoger dan dat van een single-pass-compiler. Dit is dus een ander verschil tussen de single-pass en de multipass-compiler.

Programmeertalen

Programmeertalen zoals Pascal kunnen worden geïmplementeerd met behulp van een single-pass-compiler, terwijl programmeertalen zoals Java kunnen worden geïmplementeerd met behulp van een multipass-compiler. Dit is dus nog een ander verschil tussen de single-pass en de multipass-compiler.

Conclusie

Single-pass en multipass-compiler zijn twee soorten compilers. Het verschil tussen single-pass en multipass-compiler is dat een single-pass-compiler een compiler is die de broncode slechts één keer door elke compilatie-eenheid doorgeeft terwijl een multipass-compilator de compilatie in meerdere passages verdeelt, waarbij elke pass wordt voortgezet met het resultaat van de vorige pass.

Referentie:

1. "pass1 en 2 compiler." Scribd, Scribd, hier beschikbaar.
2. "One-pass compiler." Wikipedia, Wikimedia Foundation, 23 maart 2018, hier beschikbaar.
3. "Multi-Pass Compiler." Wikipedia, Wikimedia Foundation, 8 feb. 2018, hier beschikbaar.

Afbeelding met dank aan:

1. "Compiler" door I, Surachit (CC BY-SA 3.0) via Commons Wikimedia
2. "Multi-passcompiler" door Kenstruys - Eigen werk (Public Domain) via Commons Wikimedia