Velkommen til INF Kompilatorteknikk

Like dokumenter
Velkommen til INF Kompilatorteknikk

Velkommen til INF Kompilatorteknikk

Velkommen til INF5110 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

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

Velkommen til INF2100

Velkommen til INF2100 Jeg er Dag Langmyhr

Generiske mekanismer i statisk typede programmeringsspråk

Anatomien til en kompilator - I

INF og 13. april, Stein Krogdahl, Ifi UiO

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

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

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

Obligatorisk Innlevering 2

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

UNIVERSITETET I OSLO

Kap. 8 del 1 kodegenerering INF5110 Vår2007

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

Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

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

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

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

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

INF april, 2015 Kap. 8 kodegenerering. Del 2

INF Oblig 2 semantikksjekk og kodegenerering

Syntax/semantics INF 3110/ /8/2004 1

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Velkommen til. IN1010 Objektorientert programmering Våren 2018

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

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

Obligatorisk Oppgave 1

UNIVERSITETET I OSLO

En snarvei til INF2100

Dagens Tema: Grammatikker

INF 5110, 3. februar Dette foilheftet: Kapittel 3

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

Anatomien til en kompilator - I

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

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

En oppsummering (og litt som står igjen)

Kap. 8 del 1 kodegenerering INF april, 2008

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

Skanning del I INF /01/15 1

Velkommen til. INF våren 2017

Hjemmeeksamen 2 i INF3110/4110

INF januar Forelesninger fremover:

Dagens Tema: Grammatikker

IN1010 Objektorientert programmering Våren 2019

INF1000: noen avsluttende ord

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

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

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

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

Programmeringsspråket C

Obligatorisk Oppgave 1

UNIVERSITETET I OSLO

Dagens tema: Regulære språk og uttrykk

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

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

Oversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering

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

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

Oversikt. INF5110 Obligatorisk Oppgave 1. Andreas Svendsen SINTEF

Kontekstfrie grammatikker og syntaksanalyse (parsering)

INF5110. Oblig 2 presentasjon

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

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

MAT1030 Plenumsregning 1

Kapittel 1: Datamaskiner og programmeringsspråk

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

INF2270 Datamaskinarkitektur

MAT1030 Diskret Matematikk

MED SVARFORSLAG UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

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

Obligatorisk oppgave 1 INF1020 h2005

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

INF3110 Programmeringsspråk

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

156C. Algoritmer og maskinspråk. IT1101 Informatikk basisfag. Maskinspråk: det maskinen forstår. Assembler / assemblerspråk

Kap. 8 kodegenerering INF april, 2009

Betinget eksekvering og logiske tester i shell

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Velkommen til INF1060. Introduksjon til operativsystemer og datakommunikasjon

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

Oblig 2 - Simpila. INF Kompilatorteknikk. Våren Typesjekking, sjekking av bruk av navn og blokkstrtuktur i språk.

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

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

Generiske mekanismer i statisk typede programmeringsspråk

Kapittel 1: Datamaskiner og programmeringsspråk

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

Transkript:

Velkommen til INF5110 - Kompilatorteknikk Kursansvarlige: Stein Krogdahl [steink@ifi.uio.no] Birger Møller-Pedersen [birger@ifi.uio.no] Magnus Haugom Christensen [magnushc@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 Vår forhold til kompilatorteknikk etc.: Stein og Birger har laget en Simula-kompilator sammen (på Norsk Regnesentral) Stein har undervist dette kurset mange ganger, Birger siden 2005 Magnus tok kurset i 2010 1/24/12 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 Forelesning og oppgaveløsning i passelig blanding Skal grovt sett følge opplegget fra 2011 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 Gruppearbeid: 2 og 2 sammen, inntil 3 arbeider sammen, tillatt å jobbe alene. Eksamen: Har pleid å være skriftlig Foiler Legges ut på nett 1/24/12 2

Hvorfor ta dette kurset? De færreste av dere kommer til å lage Java kompilatorer!! Men... Mange applikasjoner vil inneholde håndtering av input som krever en enkel form for parsering En del kommer til å lage tilpasninger til kodegeneratorer, eller enkel produksjon av kode basert på modeller (f.eks. UML) Eksperimentere med nye språkbegreper Aspekt-orientering: håndtere visse aspekter av et program ved spesiell aspekt-kode (krever aspekt-kompilator) Traits (samlinger av metoder som klasser kan få uavhengig av klassehierarki), generiske traits Og, domene-spesifikke språk kommer: 1/24/12 3

1/24/12 4

Domene-spesifikke språk MoSiS: EU prosjekt (IKT-Norge, SINTEF,...) TCL: domene-språk for fremtidens togkontrollsystemer CVL: standardisert språk for å beskrive variasjoner mellom produkter i en produktfamilie Kopling av disse for å beskrive variasjoner (og likheter) mellom stasjoner De skal defineres ordentlig (INF 3110 - Programmeringsspråk ) Og implementeres (INF 5110 - Kompilatorteknikk) Metamodeller i stedet for/ i tillegg til grammatikker 1/24/12 5

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. Litt om metamodeller 1/24/12 6

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/24/12 7

Anatomien til en kompilator - I 1/24/12 8

Anatomien til en kompilator - II 1/24/12 9

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 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 interpreter (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/24/12 10

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/24/12 11

Scanner Deler opp programmet i tokens Fjerner kommentarer, blanke, linjeskift () Teori: Tilstandsmaskiner, automater, regulære språk, m.m. 2 21 Leksem Token 4 2 Tilsvarende for tekstkonstanter 1/24/12 12

Parser parserings-tre (syntaks-tre) resultat av parsering abstrakt syntaks-tre syntaktisk sukker fjernet 1/24/12 13

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/24/12 14

Optimalisering på kildekode nivå t = 4 + 2 a[index] = t opprindelig t = 6 a[index] = t a[index] = 6 ett steg optimalisering nok et steg 1/24/12 15

Kodegenerering 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/24/12 16

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/24/12 17

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 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. Programdeler kan hentes under utførelse, og kobles inn i programmet Input kan være figurer, skjemaer etc. (f.eks. UML) Metamodeller i tillegg til grammatikker 1/24/12 18

Bootstrapping and porting oversetter fra oversetter til skrevet i (eller: kan utføres på) 1/24/12 19

To sammensetningsoperasjoner Bytecode Java C Vanlig C-kompilator som går på M-maskin Intel maskinkode 1/24/12 20

1/24/12 21

Bootstrapping: Step 1 Skrevet i en begrenset del av A Lager god H-kode - men sakte 1/24/12 22

Bootstrapping: Step 2 Lager god H-kode - og fort 1/24/12 23

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/24/12 24

Meta models Alternative to grammars and syntax trees Object model representing the program (not the execution) B <statement> <assignment> <if-then-else> <while-do> 1/24/12 25

1/24/12 26