Velkommen til INF5110 Kompilatorteknikk

Like dokumenter
Velkommen til INF Kompilatorteknikk

Velkommen til INF Kompilatorteknikk

Velkommen til INF Kompilatorteknikk

Velkommen til INF Kompilatorteknikk

Velkommen til INF Kompilatorteknikk

Velkommen til INF Kompilatorteknikk

Velkommen til INF Kompilatorteknikk

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse. INF 5110, 10/5-2011, Stein Krogdahl

Javas klasse-filer, byte-kode og utførelse (og litt om C# sin CIL-kode)

Litt om Javas class-filer og byte-kode

Generiske mekanismer i statisk typede programmeringsspråk

Anatomien til en kompilator - I

Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2)

Litt om kompilering og interpretering. Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2) Syntaks og semantikk

Bakgrunnen for INF2100. Velkommen til INF2100. Prosjektet. Hva gjør en kompilator?

Kodegenerering del 3: Tilleggsnotat fra AHU Samt litt om class-filer og byte-kode INF5110 V2007. Stein Krogdahl, Ifi UiO

Velkommen til INF2100

Kap. 8 del 1 kodegenerering INF5110 Vår2007

Obligatorisk Innlevering 2

INF og 13. april, Stein Krogdahl, Ifi UiO

Velkommen til INF2100 Jeg er Dag Langmyhr

Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

Generiske mekanismer i statisk typede programmeringsspråk INF5110 April, 2009

Hva er kompilering? Dagens tema. En kompilator En kompilator leser Minila koden og lager Flok koden.

Ark 1 av 18. programmeringsspråkenes. Velkommen til IN 211. verden. IN 211 Programmeringsspråk

Kodegenerering, del 2: Resten av Kap. 8 pluss tilleggsnotat (fra kap. 9 i ASU ) INF5110 V2007

Pensumoversikt - kodegenerering. Kap. 8 del 1 kodegenerering INF5110 v2006. Hvordan er instruksjonene i en virkelig CPU? Arne Maus, Ifi UiO

Velkommen til. IN1010 Objektorientert programmering Våren 2018

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

Dagens Tema: Grammatikker Kap. 3 i K. C. Louden

INF april, 2015 Kap. 8 kodegenerering. Del 2

Kap. 8 del 1 kodegenerering INF april, 2008

Kap.4, del 2: Top Down Parsering Kap. 5, del 1: Bottom Up Parsing INF5110, 7/ Legger ut en oppgave til kap. 4 (se beskjed).

En snarvei til INF2100

UNIVERSITETET I OSLO

Anatomien til en kompilator - I

En oppsummering (og litt som står igjen)

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet (kalt kildekoden): Hva er kompilering?

INF1000: noen avsluttende ord

INF / Kap. 5, Del 2 Stein Krogdahl, Ifi, UiO

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Kapittel 1: Datamaskiner og programmeringsspråk

Dagens Tema: Grammatikker Kap. 3 i K. C. Louden

Repetisjon. 1 binærtall. INF3110 Programmeringsspråk. Sist så vi ulike notasjoner for syntaks: Jernbanediagrammer. BNF-grammatikker.

IN1010 Objektorientert programmering Våren 2019

INF3110 Programmeringsspråk

Litt om Javas håndtering av tall MAT-INF 1100 høsten 2004

Obligatorisk oppgave 1 INF1020 h2005

Dagens Tema: Grammatikker

INF 5110, 3. februar Dette foilheftet: Kapittel 3

Velkommen til. INF våren 2017

INF5110. Oblig 2 presentasjon

Kapittel 1: Datamaskiner og programmeringsspråk

Obligatorisk Oppgave 1

Dagens Tema: Grammatikker Kap. 3 i K. C. Louden

Kjøresystemer. Hva er et kjøresystem? Den abstrakte maskinen SIMPLESEM (2.6) Klassifisering av språk: Parametre (2.7.7) Statiske språk (

Den siste dagen. Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Veien videre... Eksamen

Generiske mekanismer i statisk typede programmeringsspråk

Programmeringsspråket C

Operativsystemer og grensesnitt

Skanning del I INF /01/15 1

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

UNIVERSITETET I OSLO

Syntax/semantics - I INF 3110/ /29/2005 1

Kap. 5, Del 3: INF5110, fra 1/3-2011

INF Repetisjon: Hvordan bygge treet og analysere? 8. september Typisk situasjon. De problematiske syntaks-diagrammene

Dagens Tema: Grammatikker

Scanning - I Kap. 2. Hva scanneren gjør

INF januar Forelesninger fremover:

INF3110 Programmeringsspråk. Velkommen til kurset INF 3110/4110. Programmeringsspråk 1/24

INF 3110/4110. Velkommen til kurset. Programmeringsspråk. Først det praktiske

Velkommen. Velkommen til INF2270. Datamaskinarkitektur. Motto: Datamaskinen på tvers

Typisk: Kan det være både nøkkelord og navn, så skal det ansees som nøkkelord

Beskrivelse av programmeringsspråket Compila15 INF Kompilatorteknikk Våren 2015

INF april, 2015 Stein Krogdahl Ifi, UiO. Svar på oppgaver til kap. 8. Ble lagt ut 24. april

Typisk: Kan det være både nøkkelord og navn, så skal det ansees som nøkkelord

Oppgaver til kodegenerering etc. INF-5110, 16. mai, 2014

Kap. 5, del 2 LR(1)- og LALR(1)-grammatikker INF5110 V2008

INF Oblig 2 semantikksjekk og kodegenerering

INF1000 Eksamensforberedelser og -tips. Høst 2014 Siri Moe Jensen

Anbefalt litteratur: Pensum-bøker: Forelesere: Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Dagens tema: 12 gode råd for en kompilatorskriver

Kontekstfrie grammatikker og syntaksanalyse (parsering)

UNIVERSITETET I OSLO

INF2270 Datamaskinarkitektur

Kap. 5, del 1: Parsering nedenfra-opp (Bottom up parsing) INF5110. Stein Krogdahl Ifi, UiO

Programmeringsspråket C

Runtime-omgivelser Kap 7 - I

Obligatorisk oppgave 1 INF Kompilatorteknikk Våren 2012 Frist mandag 19. mars

Obligatorisk Oppgave 1

Dagens tema: Regulære språk og uttrykk

Runtimesystemer Kap 7 - I

Oversikt. Informatikk. INF1000: Grunnkurs i objektorientert programmering. Utenom INF1000 Informasjon & hjelp

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

Generiske mekanismer i statisk typede programmeringsspråk

Introduksjon til programmering og programmeringsspråk. Henrik Lieng Høgskolen i Oslo og Akershus

Transkript:

Velkommen til INF5110 Kompilatorteknikk 15. januar 2013 Kursansvarlige: Stein Krogdahl [steink@ifi.uio.no] Ragnhild Kobro Runde [ragnhilk@ifi.uio.no] Henning Berg (oblig-ansvarlig) [hennb@ifi.uio.no] Kursområdet: www.uio.no/studier/emner/matnat/ifi/inf5110/v12 Plan over forelesningene, pensum etc. etter hvert som det blir klart Diverse beskjeder 1/16/2013 1

Vårens opplegg 2013 Lærebok etc: Kenneth C. Louden: Compiler Construction, Principles and Practice Antakeligvis også noe stoff fra andre kilder Skal i gjennomsnitt være tre timer undervisning pr. uke Forelesning og oppgaveløsning i passelig blanding Vil grovt sett følge opplegget fra 2012 Obligatoriske oppgaver: Oblig 1: Legges ut ca midten av februar, frist midten av mars Oblig 2: Legges ut ca starten av april, frist starten av mai Blir til sammen en kompilator for et enkelt språk som vi definerer Normalt at 2 og 2 arbeider sammen og det er tillatt å jobbe alene. Kan søke om å få arbeide 3 sammen Eksamen: 5. juni kl. 14:30 (4 timer). Har pleid å være skriftlig. Foiler Legges ut på nett 1/16/2013 2

Hvorfor bør man vite noe om kompilatorer? De færreste av dere kommer til å lage f.eks. en Java-kompilatorer! Men... Mange applikasjoner vil inneholde håndtering av input som kan sees som enkle former for programmeringsspråk, og kan greiest behandles som det. En del kommer til å lage eller modifisere kodegeneratorer av forskjellige typer, f.eks. enkel produksjon av kode basert på modeller (f.eks. UML) Man kan ønske å eksperimentere med nye språkbegreper. Noen vi har sett på her på huset er: Aspekt-orientering: Håndtere visse aspekter av et program ved spesiell aspekt-kode (krever aspekt-kompilator) Traits: Samlinger av metoder som klasser kan ta inn, uavhengig av klassehierarkier. Package Templates: Generelle samlinger av klasser som kan hentes inn i programmer, og samtidig tilpasses lokale behov. Domenespesifikke språk: språk som er rettet mot helt spesielle anvendelser 1/16/2013 3

Dagens tekst Kapittel 1: En oversikt over Hvordan en kompilator typisk er bygget opp Hvilke teknikker og lagringsformer som typisk brukes i de forskjellige deler Litt om notasjon for kompilering, bootstrapping, etc. 1/16/2013 4

Bokens oversikt over en typisk kompilator kildekode faser under kompilering Er nå ofte en del av treet Fase: Logisk del av kompilator Sentrale tabeller og mekanismer Mellomformer av programmet Gjennomløp ( Pass ): Gjennomgang av teksten/treet Men: Er mindre viktig enn før siden treet kan holds i interlageret. målkode 1/16/2013 5

Anatomien til en kompilator - I 1/16/2013 6

Pre-prosessor Enten eget program eller bygget inn i kompilator Henter f.eks. inn filer #include <filnavn> Betinget kompilering #vardef #a = 5; #c = #a + 1 - - - #if (#a < #b ) - - - #else - - - #endif Makroer, definisjon #makrodef hentdata (#1, #2) - - - - #1 - - - - - - - - - #2 - - - #1 - - - #enddef Bruk av makroer ( ekspansjon ) #hentdata(kari, per) ---> - - - - kari - - - - - - - - - per - - - kari - - - Passer f.eks. til å utvide språket med nye konstruksjoner PROBLEM: Ofte tull med linjenummer og med syntaktiske konstruksjoner, bygges derfor helst inn 1/16/2013 7

Scanner Deler opp programmet i tokens Fjerner kommentarer, blanke, linjeskift () Teori: Tilstandsmaskiner, automater, regulære språk, m.m. 2 0 21 1 2 a.. Leksem Token 4 2 21 index 22 Tilsvarende for tekstkonstanter 1/16/2013 8

Parser parserings-tre (syntaks-tre) resultat av parsering abstrakt syntaks-tre «syntaktisk sukker» er fjernet 1/16/2013 9

Resultat av semantisk analyse Et beriket eller dekorert abstrakt syntaks-tre. Har satt inn: Bindinger til deklarasjoner Type-informasjon Kan sjekke at tilordning har samme (eller kompatible) typer har slått opp deklarasjonen, og har satt peker til denne går fram av tallets form 1/16/2013 10

Optimalisering på kildekode nivå (ikke markert på figuren) t = 4 + 2 a[index] = t opprinnelig t = 6 a[index] = t a[index] = 6 ett steg optimalisering nok et steg 1/16/2013 11

Anatomien til en kompilator - II 1/16/2013 12

Kodegenerering og optimalisering Resultat av rett fram kodegenerering Vanskelig å automatisere (basert på formell beskrivelse av språk og maskin) Beregn adressen til a[index] Etter optimalisering på mål-kode nivå Shifter istedet for å doble Bruker maskinens adresseringsmekanismer fullt ut 1/16/2013 13

Diverse begreper og problemstillinger Front-end og Back-end : Tilsvarer oftest analyse og syntese Hvordan behandles separatkompilering av programbiter? Hvordan behandler kompilatoren feil i programmet? Hvordan er data administrert under utførelsen? Statisk, stakk, heap Språk som kan oversettes i ett gjennomløp F.eks. C og Pascal: Deklarasjoner kan ikke brukes før de er nevnt i prog.teksten Er ikke så viktig lenger, pga. mye intern lagerplass Feilfinnings-hjelpemidler ( debuggers ) Kan arbeide interaktivt med en programutførelse vha. variablenavn etc. Kan legge inn breakpoints 1/16/2013 14

Oversettelse og interpretering Oversettelse Man oversetter til maskinkoden for en gitt maskin Maskinkoden leveres i forkjellige former fra kompilatoren: Ferdig utførbar binær kode (må alltid til denne formen før utførelse) Relokerbar kode, kan settes sammen med andre relokerbare biter Tekstlig assembler-kode, må prosesseres av assembler Full interpretering Utføres direkte fra programteksten/syntakstre Brukes mest for kommandospråk til operativsystem etc. Utførelse typisk 10 100 ganger saktere enn ved full oversettelse Oversettelse til mellomkode som interpreteres (eller kan oversettes til maskin-kode) Brukes for Java (class-filer), og mye for Smalltalk Mellomkoden er valgt slik at den er grei å utføre (byte-kode for Java) Kan utføres av en enkel interpreter (Java: Java Virtual Machine) Interpretering går typisk 3-30 ganger så sent som oversatt kode. Dog: I de fleste moderne Java-systemer oversettes byte-koden til maskinkode (av JVM-en) umiddelbart før den utføres (JIT, Just-In-Time kompilering). Også diverse mellomvarianter brukes. 1/16/2013 15

Senere utvikling innen kompilatorer etc. Lager (spesielt intern-lager) er blitt billig, og dermed stort Man kan ha hele programmer inne i maskinen under kompilering 200 byte pr. linje gir 50 000 linjer på 10 Mbyte Lagrene ble store nok til dette rundt 1990 Objektorienterte språk er blitt meget populære Spesielle teknikker for optimalisering mm. blir da viktige Java tilbyr spesiell form for utførelse (også forrige side): Kompilator lager byte-kode, som også har alle programmets navn etc. Programdeler kan hentes under utførelse, og kobles inn i programmet Byte-koden kan enten utføres direkte eller oversettes til maskinkode. Dette gjøres i Input kan være figurer, skjemaer etc. (f.eks. UML) Metamodeller i tillegg til grammatikker 1/16/2013 16

Bootstrapping og porting En beskrivelses-måte Compiler for language A written in language B Existing Compiler for language B Running compiler for language A oversetter fra oversetter til S T H skrevet i (eller: kan utføres på) 1/16/2013 17

To sammensetningsoperasjoner A B B C A C H H H Bytecode A B A B H H K K Java C M Vanlig C-kompilator som går på M-maskin Intel maskinkode 1/16/2013 18

Bootstrapping: Lage en kompilator som er skrevet i eget språk A, går fort, og lager god kode Steg 1: Skrevet i en begrenset del av A Lager god H-kode - men sakte 1/16/2013 19

Bootstrapping: Steg 2 Lager god H-kode - og fort 1/16/2013 20

Krysskompilering Har A kompilator som oversetter til H-maskinkode Ønsker: A-kompilator som går på K-maskin, som oversetter til K-kode Steg 1: Skriv om kompilatoren slik at den produserer K-kode (f.eks. vha ny back-end) går på H-maskin, produserer K-kode (kryss-kompilator) Steg 2: Oversetter den nye kompilatoren til K-kode. Gjøres på en H-maskin vha krysskompilatoren 1/16/2013 21