Compiler ontwerp handleiding: Wat is, Types, Tools, Voorbeeld
Wat is een Compiler?
Een compiler is een computerprogramma dat u helpt bij het omzetten van broncode geschreven in een high-level taal naar low-level machinetaal. Het vertaalt de code die in een programmeertaal is geschreven naar een andere taal zonder de betekenis van de code te veranderen. De compiler maakt de uiteindelijke code ook efficiënt, geoptimaliseerd voor uitvoeringstijd en geheugenruimte.
Het compilatieproces omvat elementaire vertaalmechanismen en foutdetectie. Het compilerproces omvat lexicale, syntaxis- en semantische analyse aan de voorkant, en codegeneratie en -optimalisatie aan de achterkant.
In deze tutorial over compilerontwerp leert u
- Wat is een compiler?
- Features of Compilers
- Types of Compiler
- Tasks of Compiler
- History of Compiler
- Steps for Language processing systems
- Compiler Construction Tools
- Why use a Compiler?
- Application of Compilers
Features of Compilers
- Correctness
- Speed of compilation
- Preserve the correct the meaning of the code
- The speed of the target code
- Recognize legal and illegal program constructs
- Good error reporting/handling
- Code debugging help
Types of Compiler
Following are the different types of Compiler:
- Single Pass Compilers
- Two Pass Compilers
- Multipass Compilers
Single Pass Compiler
In single pass Compiler source code directly transforms into machine code. For example, Pascal language.
Two Pass Compiler
Two pass Compiler is divided into two sections, viz.
- Front end: It maps legal code into Intermediate Representation (IR).
- Back end: It maps IR onto the target machine
The Two pass compiler method also simplifies the retargeting process. It also allows multiple front ends.
Multipass Compilers
De multipass-compiler verwerkt de broncode of syntaxisboom van een programma meerdere keren. Het verdeelt een groot programma in meerdere kleine programma’s en verwerkt deze. Het ontwikkelt meerdere tussenliggende codes. Al deze multipass neemt de output van de vorige fase als input. Er is dus minder geheugen nodig. Het is ook bekend als “Wide Compiler”.
Taken van de Compiler
De belangrijkste taken van de Compiler zijn:
- Breekt het bronprogramma op in stukken en legt er grammaticale structuur aan op
- Maakt het mogelijk om het gewenste doelprogramma te construeren vanuit de tussenliggende representatie en maakt ook de symbolentabel
- Compileert broncode en detecteert fouten erin
- Beheert de opslag van alle variabelen en codes.
- Ondersteuning voor gescheiden compilatie
- Leest, analyseert het gehele programma en vertaalt het naar semantisch equivalent
- Vertaalt de broncode in objectcode, afhankelijk van het type machine
Geschiedenis van de Compiler
Belangrijke mijlpalen in de geschiedenis van de Compiler zijn als volgt:
- Het woord “compiler” werd voor het eerst gebruikt in het begin van de jaren 1950 door Grace Murray Hopper
- De eerste compiler werd gebouwd door John Backum en zijn groep tussen 1954 en 1957 bij IBM
- COBOL was de eerste programmeertaal die werd gecompileerd op meerdere platformen in 1960
- De studie van de scanning en parsing kwesties werden voortgezet in de jaren 1960 en 1970 om een volledige oplossing te bieden
Stappen voor Taalverwerkingssystemen
Voordat je het concept van compilers kent, moet je eerst een paar andere gereedschappen begrijpen die met compilers werken.
- Preprocessor: De preprocessor wordt beschouwd als een onderdeel van de Compiler. Het is een hulpmiddel dat input voor de compiler produceert. Het houdt zich bezig met macroverwerking, augmentatie, taaluitbreiding, enz.
- Interpreter: Een interpreter is net als een compiler een vertaalslag van een taal op hoog niveau naar een machinetaal op laag niveau. Het belangrijkste verschil tussen beide is dat een interpreter code regel voor regel leest en transformeert. Compiler leest de hele code in één keer en creëert de machinecode.
- Assembler: Hiermee wordt assembleertaalcode vertaald naar een begrijpelijke machinetaal. Het resultaat van de assembler is een objectbestand dat een combinatie is van machine-instructies en de gegevens die nodig zijn om deze instructies in het geheugen op te slaan.
- Linker: De linker helpt u om verschillende objectbestanden te koppelen en samen te voegen tot een uitvoerbaar bestand. Al deze bestanden kunnen zijn gecompileerd met afzonderlijke assemblers. De belangrijkste taak van een linker is het zoeken naar opgeroepen modules in een programma en het achterhalen van de geheugenlocatie waar alle modules zijn opgeslagen.
- Loader: De loader is een onderdeel van het OS, dat tot taak heeft uitvoerbare bestanden in het geheugen te laden en ze uit te voeren. Het berekent ook de grootte van een programma, waardoor extra geheugenruimte wordt gecreëerd.
- Cross-compiler: Een Cross-compiler in compilerontwerp is een platform dat u helpt bij het genereren van uitvoerbare code.
- Source-to-source-compiler: Source to source-compiler is een term die wordt gebruikt wanneer de broncode van een programmeertaal wordt vertaald naar de broncode van een andere taal.
Compiler Construction Tools
Compiler construction tools werden geïntroduceerd toen computer-gerelateerde technologieën zich over de hele wereld verspreidden. Ze worden ook wel compiler-compilers, compiler- generators of translator genoemd.
Deze hulpmiddelen gebruiken een specifieke taal of algoritme voor het specificeren en implementeren van de component van de compiler. Hieronder volgen enkele voorbeelden van compilerbouwgereedschappen.
- Scanner-generatoren: Dit gereedschap neemt reguliere expressies als invoer. Bijvoorbeeld LEX voor het Unix-besturingssysteem.
- Syntax-directed translation engines: Deze software tools bieden een tussenliggende code door gebruik te maken van de parse tree. Het heeft als doel een of meer vertalingen te associëren met elke node van de parse tree.
- Parser-generatoren: Een parser generator neemt een grammatica als invoer en genereert automatisch broncode die met behulp van een grammatica stromen van tekens kan parsen.
- Automatische codegeneratoren: Neemt intermediate code en zet deze om in Machine Language
- Data-flow engines: Deze tool is nuttig voor code optimalisatie. Hier wordt informatie geleverd door de gebruiker en tussenliggende code wordt vergeleken om een relatie te analyseren. Het is ook bekend als data-flow analyse. Het helpt u om uit te vinden hoe waarden worden doorgegeven van een deel van het programma naar een ander deel.
Waarom een Compiler gebruiken?
- Compiler controleert hele programma, zodat er geen syntaxis of semantische fouten zijn
- Het uitvoerbare bestand wordt geoptimaliseerd door de compiler, zodat het sneller wordt uitgevoerd
- Hiermee kunt u interne structuur in het geheugen maken
- Het is niet nodig om het programma op dezelfde machine uit te voeren als waarop het is gebouwd
- Het hele programma in een andere taal vertalen
- Genereer bestanden op schijf
- Link de bestanden in een uitvoerbaar formaat
- Controleer op syntaxisfouten en gegevenstypen
- Helpt u om uw begrip van taalsemantiek te vergroten
- Helpt u om te gaan met taalprestatieproblemen
- Kans voor een niettrivial programming project
- The techniques used for constructing a compiler can be useful for other purposes as well
Application of Compilers
- Compiler design helps full implementation Of High-Level Programming Languages
- Support optimization for Computer Architecture Parallelism
- Design of New Memory Hierarchies of Machines
- Widely used for Translating Programs
- Used with other Software Productivity Tools
Summary
- A compiler is a computer program which helps you transform source code written in a high-level language into low-level machine language
- Correctness, snelheid van compilatie, behoud van de juiste de betekenis van de code zijn enkele belangrijke kenmerken van compiler ontwerp
- Compilers zijn onderverdeeld in drie delen 1) Single Pass Compilers 2)Two Pass Compilers, en 3) Multipass Compilers
- Het woord “compiler” werd voor het eerst gebruikt in de vroege jaren 1950 door Grace Murray Hopper
- Stappen voor Taalverwerkingssysteem zijn: Preprocessor, Interpreter, Assembler, Linker/Loader
- Belangrijke compilerbouwgereedschappen zijn 1) Scanner-generatoren, 2)Syntax-3) directed translation engines, 4) Parser-generatoren, 5) Automatic code generatoren
- De belangrijkste taak van de compiler is het gehele programma te verifiëren, zodat er geen syntax- of semantische fouten optreden