Göm menyn

Grunderna till interpretator och kompilator

Interpretatorer och kompilatorer i allmänhet

Enkelt uttryckt så kan vi säga att kompilatorer och interpretatorer är översättare. De tar ett program skrivet i ett programeringsspråk så som Python eller Java och översätter det till maskinkod som datorn sedan kan utföra.

En kompilator tar ett helt program och översätter det till en körbar fil (tänk .exe eller .app). En interpretator å andra sidan fungerar mer som en tolk, som översätter rad för rad i och med att programmet körs. Båda metoderna har sina fördelar och nackdelar; till exempel kan en kompilator ge bättre hjälp med att hitta problem medan en interpretator ofta gör debugging enklare.

Det är ganska få som jobbar med att utveckla interpretorer till stora språk, men i många olika sammanhang behöver man skriva verktyg för att tolka mindre domänspecifika språk. Dessutom kan interpretatorn tjäna som en modell för att lösa närliggande problem.

Analys av källkod

En kompilator/interpretator består av ett antal steg, som analyserar och översätter källkoden.

  • Lexikalisk analys: Bildar så kallade tokens utifrån källkodens text.
  • Syntaktisk analys (parsning): Kontrollerar att koden är syntaktiskt korrekt och bygger sedan upp en datastruktur (oftast en trädstruktur) som motsvarar källkoden för vidare bearbetning i nästa steg.
  • Semantisk analys: Kontrollerar till exempel typfel.
  • Det finns ytterligare steg beroende på vilken typ av verktyg vi vill bygga (interpretator, kompilator etc).

Alt text

Introduktion till laboration 5

Er uppgift är att skriva en interpretator till ett enkelt imperativt språk som vi kallar Calc. Exempel på program i Calc:

Definition av språket Calc

Program Abstrakt syntax Konkret syntax
PROGRAM Ett program består av en följd av satser ['calc', STATEMENT-1,
..., STATEMENT-n]
STATEMENT En sats kan vara en tilldelning, en upprepning, ett val, en inmatning eller en utmatning Se exempel för de enskilda typerna av satser
ASSIGNMENT En tilldelning består av en variabel och ett uttryck ['set', VARIABLE, EXPRESSION]
REPETITION En upprepning består av ett villkorsuttryck och en följd av satser ['while', CONDITION,
STATEMENT-1, ..., STATEMENT-n]
SELECTION Ett val består av ett villkorsuttryck följt av en eller två satser ['if', CONDITION, STATEMENT-TRUE, STATEMENT-FALSE]
INPUT En inmatning består av namnet på en variabel ['read', VARIABLE]
OUTPUT En utmatning består av namnet på en variabel ['print', VARIABLE]
EXPRESSION Ett matematiskt uttryck kan vara en konstant, en variabel eller ett binäruttryck Se exemepl för de enskilda typerna av uttryck
BINARYEXPR Ett binäruttryck består av två uttryck med en operator i mitten [EXPRESSION-1, BINARYOPER, EXPRESSION-2]
CONDITION Ett villkor består av två uttyrck med en villkorsoperator i mitten [EXPRESSION-1, CONOPER, EXPRESSION-2]
BINARYOPER En binäroperator symboliserar ett av de fyra grundläggande räknesätten '+', '-', '*', '/'
CONDOPER En villkorsoperator är större än, mindre än eller lika med '>', '<', '='
CONSTANT En konstant är ett tal i Python 14, 2.78
VARIABLE En variabel är en sträng i Python 'a', 'summa'

En grammatik för språk

Ett alternativt sätt till att definiera språket är genom att formulera en grammatik, det vill säga en uppsättning regler för hur språket är uppbyggt. Detta kan till exempel göras på Backus-Neur-form (BNF).


Sidansvarig: Peter Dalenius
Senast uppdaterad: 2016-08-15