Velkommen til INF Kompilatorteknikk

Like dokumenter
Velkommen til INF Kompilatorteknikk

Velkommen til INF Kompilatorteknikk

Velkommen til INF Kompilatorteknikk

Velkommen til INF Kompilatorteknikk

Velkommen til INF5110 Kompilatorteknikk

Velkommen til INF Kompilatorteknikk

Velkommen til INF Kompilatorteknikk

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

Anatomien til en kompilator - I

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

Dagens Tema: Grammatikker

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

INF 5110, 3. februar Dette foilheftet: Kapittel 3

INF januar Forelesninger fremover:

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

Dagens Tema: Grammatikker

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

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

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

Velkommen til INF2100 Jeg er Dag Langmyhr

Kontekstfrie grammatikker og syntaksanalyse (parsering)

UNIVERSITETET I OSLO

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

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

Hvor er vi nå - kap. 3 (+4,5)? Forenklet skisse av hva en parser gjør PARSER. Kontekstfrie grammatikker og syntaksanalyse (parsering)

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

Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

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

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).

Kap. 8 del 1 kodegenerering INF april, 2008

Obligatorisk Innlevering 2

UNIVERSITETET I OSLO

Statisk semantisk analyse - Kap. 6 Foiler ved Birger Møller-Pedersen (Forelest 10/3 og 12/ av Stein Krogdahl)

INF og 13. april, Stein Krogdahl, Ifi UiO

UNIVERSITETET I OSLO

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

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

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

INF april, 2015 Kap. 8 kodegenerering. Del 2

Anatomien til en kompilator - I

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

IN1010 Objektorientert programmering Våren 2019

En oppsummering (og litt som står igjen)

En snarvei til INF2100

Obligatorisk Oppgave 1

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

Skanning del I INF /01/15 1

Velkommen til. IN1010 Objektorientert programmering Våren 2018

Administrivia INF 3110/ INF /02/2005 1

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

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

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

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

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

INF5110. Oblig 2 presentasjon

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

Hjemmeeksamen 2 i INF3110/4110

Programmeringsspråket C

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

Kontekstfrie grammatikker og syntaksanalyse (parsering)

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

Obligatorisk oppgave 1 INF1020 h2005

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

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

MED SVARFORSLAG UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

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

Programmeringsspråket C

Generiske mekanismer i statisk typede programmeringsspråk

Velkommen til. INF våren 2017

Velkommen til INF1060. Introduksjon til operativsystemer og datakommunikasjon

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF 1000 høsten 2011 Uke september

Kontekstfrie grammatikker og syntaksanalyse (parsering)

Runtime-omgivelser Kap 7 - I

Programmeringsspråket C

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

Kapittel 1: Datamaskiner og programmeringsspråk

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

INF Oblig 2 semantikksjekk og kodegenerering

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

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

Semantikk. Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7) Semantikk. Semantikk. En måte å svare på: gi semantikken til språket!

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

Eivind Gard Lund. 24. Mars 2009 Foilene bygger på 2009 utgaven av Andreas Svendsen

Obligatorisk Oppgave 1

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

Oppgaver til kodegenerering etc. INF-5110, 12. mai, 2015

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

Dagens tema INF2270. Cs preprosessor. Separat kompilering av C funksjoner. C og minnet. Dag Langmyhr,Ifi,UiO: Forelesning 5. februar 2007 Ark 1 av 15

Transkript:

Velkommen til INF5110 - Kompilatorteknikk Kursansvarlige: Arne Maus [arnem@ifi.uio.no] Birger Møller-Pedersen [birger@ifi.uio.no] Sven-Jørgen Karlsen ( gruppelærer ) [svenjok@student.matnat.uio.no] Stein Krogdahl (støtteperson) Kursområdet: www.ifi.uio.no/inf5110 vår 2006 Plan over forelesningene, pensum etc. etter hvert som det blir klart Diverse beskjeder Vår forhold til kompilatorteknikk etc.: AM har undervist INF1000, så ham kjenner dere! SK og BMP laget en Simula-kompilator sammen, ca 1980 (på NR) SK har undervist dette kurset en del ganger Alle har arbeidet mye med programmeringsspråk (spesielt OO-språk) og implementasjon av forskjellige språkmekanismer 1/23/2006 1

Vårens opplegg 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 Men vi starter ut med fire timer pr. uke Forelesning og oppgaveløsning i passelig blanding Skal grovt sett følge opplegget fra 2005, men antakeligvis noen justeringer Oppgaver etc. på veien: Minst en obligatorisk oppgave (uten karakter) Eksamen: Har pleid å være muntlig, men skriftlig hvis mange Foiler: Blir kopiert opp på papir Deles ut på forelesningen, og kan fåes på senere forelesninger; Legges ut på nett Hva har dere av kurs? INF 2100? (Skriving av en enkel kompilator) INF 3/4110 (IN 211)? (Programmeringsspråk) 1/23/2006 2

Dagens tekst Kapittel 1: En oversikt over Hvordan en kompilator typisk er delt opp Hvilke teknikker og lagringsformer som typisk brukes i de forskjellige deler Hva er de typiske omgivelser til en kompilator Litt om notasjon for bootstrapping etc. 1/23/2006 3

Bokens oversikt over en typisk kompilator kildekode faser under kompilering Sentrale tabeller og mekanismer Mellomformer av programmet Fase: Logisk del av kompilator Gjennomløp ( Pass ): Gjennomgang av teksten/treet målkode 1/23/2006 4

Anatomien til en kompilator - I program Symboltabell tekst tokens syntaks-tre beriket syntaks-tre Finne struktur i programmet OK i henhold til grammatikk? Preprocessor Makroer Betinget kompilering Filer Scanner Dele opp i leksemer OK? Lex/ Flex lignende verktøy Parser Symboltabell (navn Yacc/ Bison lignende verktøy Checker Sjekker bruk definisjon Type sjekk Optimizer Code generator Betydning (definisjon)) Attributtgrammatikker + Div. metoder 1/23/2006 5

Anatomien til en kompilator - II prog.rel prog.rel start prog.asm call p goto start+30 start Assembler Linker/ Loader prog.abs start prog.rel call m goto start+10 call p goto start+30 call m goto start+10 1/23/2006 6

Forbehandling Er enten pre-prosessor eller er bygget inn i kompilator Hent 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, bygges derfor helst inn 1/23/2006 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/23/2006 8

Parser parserings-tre (syntaks-tre) resultat av parsering abstrakt syntaks-tre syntaktisk sukker fjernet 1/23/2006 9

Resultat av semantisk analyse Et beriket eller dekorert abstrakt syntaks-tre Kan sjekke at tilordning har samme (eller kompatible) typer har slått opp i deklarasjoner går fram av tallets form 1/23/2006 10

Optimalisering på kildekode nivå t = 4 + 2 a[index] = t opprindelig Tre-adresse-kode t = 6 a[index] = t a[index] = 6 ett steg optimalisering nok et steg 1/23/2006 11

Kodegenerering Resultat av rett fram kodegenerering Vanskelig å automatisere (basert på formell beskrivelse va 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/23/2006 12

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, også ved gjentakelse Brukes mest for kommandospråk til operativsystem etc. Utførelse typisk 10 100 ganger saktere enn ved full oversettelse Oversettelse til mellomkode som interpreteres Brukes for Java (class-filer), og mye for Smalltalk Mellomkoden er valgt slik at den er grei å utføre ( byte-kode for Java) Utføres av en enkel interpret(ator?) (Java: Java Virtual Machine) Går typisk 3-30 ganger så sent som direkte utførelse Dog: I de fleste moderne Java-systemer oversettes byte-koden til maskinkode umiddelbart før den utføres (JIT, Just-In-Time kompilering). 1/23/2006 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 dataene 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 Belastningsprofiler: Hvor mye tid er brukt i hvilke deler under kjøring? Versjons-håndterere etc. 1/23/2006 14

Nyere ting 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 Skjedd mye om å utnytte flere prosessorer til store beregninger Parallelliserende kompilatorer, som kan gies hint om hva som er lurt Objektorienterte språk er blitt meget populære Spesielle teknikker for optimalisering mm. blir da viktige. Java, tilbyr spesiell form for utførelse: Kompilator lager byte-kode, som også har alle programmets navn etc. Denne interpreteres direkte av en JVM eller JIT-kompileres Programdeler kan hentes under utførelse, og kobles inn i programmet Kan også lett hente slike programbiter over nettet Prosessor-utviklingen Input kan være figurer, skjemaer etc. (f.eks. UML) Metamodeller contra grammatikker 1/23/2006 15

Bootstrapping and porting 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/23/2006 16

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/23/2006 17

Bootstrapping: Step 1 Skrevet i en begrenset del av A Lager god H-kode - men sakte 1/23/2006 18

Bootstrapping: Step 2 Lager god H-kode -og fort 1/23/2006 19

Krysskompilering Har: A kompilator som oversetter til H-maskinkode Ønsker: A-kompilator som oversetter til K-maskin kode Steg 1: Skriv kompilator 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/23/2006 20