Velkommen til INF Kompilatorteknikk

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

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

Generiske mekanismer i statisk typede programmeringsspråk

Velkommen til INF2100

Velkommen til INF2100 Jeg er Dag Langmyhr

Anatomien til en kompilator - I

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

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

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

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

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

INF og 13. april, Stein Krogdahl, Ifi UiO

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

Kap. 8 del 1 kodegenerering INF5110 Vår2007

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

Obligatorisk Innlevering 2

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

UNIVERSITETET I OSLO

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

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

Syntax/semantics INF 3110/ /8/2004 1

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Obligatorisk Oppgave 1

INF april, 2015 Kap. 8 kodegenerering. Del 2

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

Oversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering

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

Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

INF1000: noen avsluttende ord

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

Velkommen til. IN1010 Objektorientert programmering Våren 2018

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

INF Oblig 2 semantikksjekk og kodegenerering

Anatomien til en kompilator - I

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

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

Obligatorisk oppgave 1 INF1020 h2005

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

Hjemmeeksamen 2 i INF3110/4110

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

En snarvei til INF2100

Programmeringsspråket C

MED SVARFORSLAG UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

Dagens tema: 12 gode råd for en kompilatorskriver

INF5110. Oblig 2 presentasjon

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

MAT1030 Plenumsregning 1

Oversikt. INF5110 Obligatorisk Oppgave 1. Andreas Svendsen SINTEF

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

Skanning del I INF /01/15 1

Dagens Tema: Grammatikker

INF 5110, 3. februar Dette foilheftet: Kapittel 3

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

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

Dagens tema: Regulære språk og uttrykk

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

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

Velkommen til. INF våren 2017

En oppsummering (og litt som står igjen)

Generiske mekanismer i statisk typede programmeringsspråk

Obligatorisk Oppgave 1

MAT1030 Diskret Matematikk

Viktig. Rettet i koden. Oppgaven. Obligatorisk oppgave 2 - Kort om oppgaven og litt informasjon. Fredrik Sørensen OMS-gruppen, IfI

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

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

Kap. 8 kodegenerering INF april, 2009

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

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

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

Dagens Tema: Grammatikker

INF januar Forelesninger fremover:

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

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

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

Nybegynnerkurs i C. Øyvind Grønnesby. 14. oktober Introduksjon Typer Operatorer Kontrollstrukturer Pekere Makroer Lenker

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

Betinget eksekvering og logiske tester i shell

INF3110 Programmeringsspråk

IN1010 Objektorientert programmering Våren 2019

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

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

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

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

Transkript:

Velkommen til INF5110 - Kompilatorteknikk Kursansvarlige: Stein Krogdahl [steink@ifi.uio.no] Birger Møller-Pedersen [birger@ifi.uio.no] Eyvind Wærstad Axelsen (oblig-ansvarlig) [eyvinda@ifi.uio.no] Kursområdet: www.uio.no/studier/emner/matnat/ifi/inf5110/v15 Plan over forelesningene, pensum etc. etter hvert som det blir klart Diverse beskjeder 20/01/15 1

Vårens opplegg 2015 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 2014 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 og det er tillatt å jobbe alene Kan søke om å få arbeide 3 sammen Eksamen: 3. juni kl. 14:30 (4 timer). Pleier å være skriftlig Foiler Legges ut på nett 20/01/15 2

Hvorfor bør man vite noe om kompilatorer? De færreste av dere kommer til å lage f.eks. en Java kompilator!! Men... Mange applikasjoner vil inneholde håndtering av input data som kan sees som enkle former for programmer i et 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) Eksperimentere med nye språkbegreper, som f.eks. 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 Package Templates: Generelle samlinger av klasser som kan hentes inn i programmer, og samtidig tilpasses spesielle behov. Domene-spesifikke språk: Språk som er rettet mot spesielle anvendelser 20/01/15 3

Domene-spesifikke språk MoSiS: EU prosjekt (IKT-Norge, SINTEF,...) TCL: domene-språk for fremtidens togkontrollsystemer (ABB) CVL: standardisert (OMG) 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 20/01/15 4

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, men det kommer mer i en separat forelesning 20/01/15 5

Bokens oversikt over en typisk kompilator kildekode faser under kompilering Front End Back End Sentrale tabeller og mekanismer Mellomformer av programmet Fase: Logisk del av kompilator Gjennomløp ( Pass ): Gjennomgang av teksten/treet. Men: Er mindre viktig enn før siden treet kan holds i interlageret. målkode 20/01/15 6

Anatomien til en kompilator - I 20/01/15 7

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 20/01/15 8

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

Parser parserings-tre (syntaks-tre) resultat av parsering abstrakt syntaks-tre syntaktisk sukker fjernet 20/01/15 10

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 integer integer array of integer integer har slått opp i deklarasjoner integer går fram av tallets form integer 20/01/15 11

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 20/01/15 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 20/01/15 13

Anatomien til en kompilator - II 20/01/15 14

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 20/01/15 15

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). 20/01/15 16

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: 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 20/01/15 17

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 skrevet i (eller: kan utføres på) 20/01/15 18

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 20/01/15 19

Compiler for language A written in language B Existing Compiler for language B Running compiler for language A A H A H B B H H H 20/01/15 20

Bootstrapping Lage en kompilator som er skrevet i eget språk, går fort og lager god kode Steg 1 S T Skrevet i en begrenset del av A HS Lager god H-kode - men sakte 20/01/15 21

Bootstrapping Steg 2 Lager god H-kode - og fort 20/01/15 22

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 20/01/15 23

Metamodels Alternative to grammars and syntax trees Object model representing the program (not the execution) <program> <declaration>* <statement> * <declaration> <variable> <arrray> program * statement declaration * declaration variable array <statement> <assignment> <if-then-else> <while-do> statement assignment if-then-else while-do 20/01/15 24

assignment target subscript expression source expression index array array 20/01/15 25