Compiler: Forskelle mellem versioner

Content deleted Content added
m Bot: Kosmetiske ændringer
Linje 3:
Sagt på en anden måde er det typisk et transformationsværktøj for programmører der oversætter/transformerer højniveau kode (der kan skrives, læses og forstås af mennesker) til et lavere niveau som f.eks. det sprog en computer forstår (ultimativt binære instruktions sæt). Det behøver ikke nødvendigvis at være fra høj- til lavniveau men kan også være fra eet højniveaus sprog til et andet (fra [[Java (programmeringssprog)|java]] til [[XML]]). En javacompiler ([[javac]]) oversætter fra java programmeringssproget til java byte kode som kan fortolkes/forstås af en java [[virtuel maskine]] (JVM).
 
Et eksempel på en compiler er en [[Java_Java (programmeringssprog)|java]]-compiler, der oversætter java-[[kildekode]] til java-bytecode (.class fil), der kan udføres af en java-[[Virtuel_maskineVirtuel maskine|virtual maskine]] (som er en form for [[fortolker]]). Et andet eksempel kunne være en C-compiler, der oversætter [[C_C (programmeringssprog)|C]]-kildekode til en binær fil, der kan udføres direkte.
 
== Teknikken ==
Linje 12:
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_C (programmeringssprog)|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.
Linje 49:
Med [[javac]] oversættes Hello.java til en såkaldt class-fil, der indeholder det det oversatte program i såkaldt bytecode. Denne kode er instruktioner til en java-maskine (evt. en virtuel java-maskine, JVM).
 
Delen '''public class Hello extends java.lang.Object{ public Hello();''' bliver eksempelvis til...
 
0: aload_0
Linje 71:
...hvilket en JVM kan forstå og fortolke!
 
== Se også ==
*[[fortolker]]
*[[GNU bison]]
*[[Yacc]]
 
== Eksterne henvisninger ==
*Vejviser: [http://directory.google.com/Top/Computers/Programming/Compilers/ Compilers]
=== Open source ===
==== Hele compilere ====
*[http://gcc.gnu.org/ 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,...)], [http://gcc.gnu.org/onlinedocs/gccint/ This file documents the internals of the GNU compilers]
**[http://theochem.ki.ku.dk/on_line_docs/gcc/gcc_toc.html Using and Porting the GNU Compiler Collection (GCC)]
**[http://coyotegulch.com/reviews/linux_compilers/ Linux C and C++ Compilers. A comparison via benchmarks on Opteron and Pentium]
 
==== Compiler værktøjer ====
*[http://www.antlr.org/ ANTLR Parser Generator], [http://www.antlr.org/history.html history]
**[http://www.bearcave.com/software/antlr/antlr_expr.html Why Use ANTLR?]
Linje 98:
*[http://www.cs.may.ie/~jpower/ My research centers on parsers and compiler technology for object-oriented languages]
 
==== Sproggrammatikker til compilere ====
*[http://www.thefreecountry.com/sourcecode/grammars.shtml Free Programming Language Grammars for Compiler Construction]
 
[[kategoriKategori:Udviklingsværktøjer]]
 
[[af:Vertalerkonstruksie]]