Compiler
Fra Wikipedia, den frie encyklopædi
Sammenskrivningsforslag Denne artikel er foreslået sammenskrevet med Kompiler. (Diskutér forslaget). Hvis sammenskrivningen sker, skal en administrator kontaktes. Denne vil sørge for at historikken holdes samlet. Kopiér ikke bare fra én artikel til en anden. |
En compiler (også kaldet oversætter) er et program, der oversætter et andet program (kaldet kildekoden) til et tredje program. Et eksempel på en compiler er en java-compiler, der oversætter java-kildekode til java-bytecode (.class fil), der kan udføres af en java-virtual maskine (som er en form for fortolker). Et andet eksempel kunne være en C-compiler, der oversætter C-kildekode til en binær fil, der kan udføres direkte.
En compiler oversætter typisk fra kildekode, der kan læses af et menneske, til et binært format, der kun kan læses af andre programmer. En compiler indeholder typisk kontrol af fejl i kildekoden og optimering mht. udførelsestid og lagerforbrug af den resulterende kode. Derfor kan det resulterende binæreprogram typisk udføres hurtigere og med mindre brug af plads. Dette er i modsætning til en fortolker der udføre kildekoden direkte, linje for linje, og derfor ikke kan udføre programmet så hurtigt som hvis det var compileret.
En anden fordel ved at compilere er at man kan nøjes med at give den binære version af programmet til andre så de kun kan udføre programmet, men ikke umiddelbart kan rette i programmet.
Til nogle programmeringssprog, som f.eks. BASIC, findes både compiler og fortolker. Når man udvikler i den slags sprog bruger man typisk en fortolker, mens programmet udvikles (debugger/fejlfinder), og en compiler, når resultatet skal afleveres til kunden.
I C-programmering compilerer man typisk til at binært format der kaldes mellemkode. Det er "byggeklodser" der kan sættes sammen med andre stumper af mellemkode til et endeligt udførbart binært program. Til at konvertere mellemkoden til det endelige program bruges et værktøj der hedder en linker.
En decompiler er en compiler, der ud fra resulterende kode forsøger at genskabe kildekoden.
En compiler, der er beregnet til at køre på én computertype, men som leverer maskinkode beregnet til kørsel på en anden type computer, omtales som en krydsoversætter, (engelsk: cross compiler).
Oversættelsen foregår i flere trin.
- Der kan være en præ-proces, der udvider makroer
- Kommentarer fjernes fra kildekoden.
- Der foretages en leksikalsk analyse, der resulterer i en liste af symboler, som kan genkendes af oversætteren. Eksempelvis gøres
'abekat=abe+kat;' <- (en samlet tekststreng)
til
'abekat', '=', 'abe', '+', 'kat', ';' <- (nu delt i flere tekststrenge og evt. i hvert sit objekt)
Processen hånderer også, at programmeringssprog som C og Java eksempelvis både bruger '+', '++', '+=', '=' og '=='.
- Der opbygges et parsetræ, ud fra programmeringssprogets grammatik.
- Der udføres en semantisk analyse, der eksempelvis kan afsløre om variabler, der bliver brugt også er definerede korrekt.
- Eventuel optimering ved beskæring af parsetræet.
- Generering af assemblerkode ud fra data i parsetræet.
Der dannes en fil med output for hver fil med kildekode, der kan udføres. Kildefiler, der kun indeholder definitioner af konstanter og variabler resulterer ikke i en outputfil.
Resultatet af oversættelsen skal behandles af en en assembler og siden en linker før der er kommet et færdigt program ud af det.
Indholdsfortegnelse |
[redigér] Se også
[redigér] Eksterne henvisninger
- Vejviser: Compilers
[redigér] Open source
[redigér] Hele compilere
- GCC, the GNU Compiler Collection, includes front ends for C, C++, Objective-C, Fortran, Java, and Ada, as well as libraries for these languages (libstdc++, libgcj,...), This file documents the internals of the GNU compilers
[redigér] Compiler værktøjer
- ANTLR Parser Generator, history
- Primært om Bison og Flex:
- Using Flex and Bison by Aaron Montgomery Citat: "...Scanners, Parsers and Abstract Syntax Trees, oh my! What Are Flex and Bison (And, Why Do I Need Them)..."
- Meet lex, yacc, flex, and bison
- Flex and Bison for Metrowerks CodeWarrior
- flex++/bison++ for Win32
- Welcome to BtYacc -- BackTracking Yacc
- Ældre:
- Andet:
- My research centers on parsers and compiler technology for object-oriented languages