Kompilatorteknik. Görel Hedin Datavetenskap Lunds Tekniska Högskola. Temaföreläsning, Datorer i system, 2014



Relevanta dokument
Kompilatorteknik. Görel Hedin Datavetenskap Lunds Tekniska Högskola. Temaföreläsning, Datorer i system, 2009

Kompilatorteknik. Görel Hedin Datavetenskap Lunds Tekniska Högskola. Temaföreläsning, Datorer i system, 2011

Kompilatorteknik. Görel Hedin Datavetenskap Lunds Tekniska Högskola. Temaföreläsning, Datorer i system, 2010

Introduktion till programmering. Programspråk och paradigmer

DD1361 Programmeringsparadigm. Formella Språk & Syntaxanalys. Per Austrin

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

kind spelling Scanning

Exempel på typer av datorspråk EXCEL

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

Grammatik. BNF-grammatik

Program & programmering

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

Introduktion till Datalogi DD1339. Föreläsning 1 8 sept 2014

Objektorienterad programmering, allmänt

Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha?

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Imperativ programmering

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin)

Kompilatorer och interpretatorer

Imperativ programmering. Föreläsning 3

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

Föreläsning 5 5DV086 - Programspråk

Introduktion till Java

IT för personligt arbete F6

TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13:15

Deklarationer/definitioner/specifikationer

Dagens föreläsning. Modeller för programmeringsspråk. - Olika modeller programspråk Interpretator - kompilator. - Syntax - semantik.

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Software Technology. Josef Svenningsson

TDP002 Imperativ programmering

Exempel på typer av datorspråk EXCEL

Programspråkslingvistik. Sista delen av kursen. Ett programspråk

Sista delen av kursen

Inledande programmering med C# (1DV402) Introduktion till C#

lex källkod lex.l lexkompilator lex.yy.c C- kompilator lex.yy.c a.out sekvens av tokens a.out input specifikation av tokens mha reguljära uttryck

Föreläsning 2. Operativsystem och programmering

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Föreläsning 1 & 2 INTRODUKTION

Sista delen av kursen

IT OCH PROGRAMMERING I SKOLAN. Jan Erik Moström Peter Vinnervik

Det finns många flaggor till g++,

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Alfabeten, strängar och språk. String

F2: Krav på objektorienterat språk

Static vs Dynamic binding Override vs Overload. Objekt-orienterad programmering och design Alex Gerdes och Sólrún Halla Einarsdóttir, 2018

Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket?

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Inlämningsuppgift MiniPlotter

OOP Objekt-orienterad programmering

Datorarkitekturer med operativsystem ERIK LARSSON

Subtyping och variance. Objekt-orienterad programmering och design Alex Gerdes, 2018

Parsning. TDP007 Konstruktion av datorspråk Föreläsning 6. Peter Dalenius Institutionen för datavetenskap

Abstraktion. procedurabstraktion. DA2001 (Föreläsning 26) Datalogi 1 Hösten / 27

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

Dagens föreläsning. Diverse Common Lisp. Konstanter, parametrar, globala variabler

Konstruktion av datorspråk

TDIU01 (725G67) - Programmering i C++, grundkurs

Imperativ programmering. Föreläsning 2

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Viktiga begrepp. Algoritm. Array. Binärkod. Blockprogrammering. Bugg / fel och felsökning. Dataspel. Dator

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Programmering A. Johan Eliasson

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Föreläsning 23 Programmeringens historia och paradigmer

Classes och Interfaces, Objects och References, Initialization

Historik: OOP. Objektorientering. Historik: OOP (forts) En Dum Fråga

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Hjälpmedel för kompilatorkonstruktion, DVB004

Föreläsning 1 & 2 INTRODUKTION

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Tommy Färnqvist, IDA, Linköpings universitet

DAT043 - föreläsning 8

Abstraktion. Abstraktion... Abstraktion... Abstraktion...

Föreläsning 1: Intro till kursen och programmering

TDP002 - Imperativ programmering

Sökning och sortering

OMTENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13: 15

TDDC77 Objektorienterad Programmering

Objektorienterad modellering och diskreta strukturer. 13. Problem. Sven Gestegård Robertz. Datavetenskap, LTH

En kort text om programmering i C.

Tentamen Grundläggande programmering

Kapitel 2. Evolutionen av de viktigaste programmeringsspråken ISBN

Grundläggande programmering DVG A08 & ISG A04. Allmän information. Å vem är jag då. Karlstads Universitet, Johan Öfverberg 1

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Boken?!?! Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program Variabler printf

Transkript:

Kompilatorteknik Görel Hedin Datavetenskap Lunds Tekniska Högskola Temaföreläsning, Datorer i system, 2014

En typisk kompilator programkod while (a >= 0) { } kompilator maskinkod 0024 6050 2530 0000 0000 0010 Men tekniken är generell: data på format X data på format Y

Typiska steg i en kompilator while (a >= 0) { } analys optimering 0024 6050 2530 0000 0000 0010 text GE While a 0 dekorerat träd Stmt mellankod L1: LD a R1 LD 0 R2 BLT L2 BR L L2: mellankod maskinkod

kompilator Länkning, laddning, exekvering 0034 7023 0000 0001 0155 0024 0024 6050 2530 0000 0000 0010 0003 0027 0105 0177 länkare... 0000 0001 0176 0024 0024 8050 2530 0000 0000 0010 0003 0030... exekverbar fil aktiveringsposter objekt minne... 0000 0001 0176 0024 0024 8050 2530 0000 0000 0010 0003 0030... laddare stack heap statisk data kod objektfiler maskin

Varför lära sig kompilatorteknik? data på format X data på format Y Förstå programspråk Förstå programmeringsverktyg Förstå prestanda hos program (performance) Bygg dig eget språk/verktyg Mycket vanligare än du tror!!! Många domänspecifika språk (domain specific languages) Generella användbara tekniker (inte bara för kompilatorer)

Gissa språket! 1958 Lisp (defun reverse(l) (if (eq L ()) () (append (reverse (cdr L)) (list (car L))))) John McCarthy Första funkoons- orienterade språket Rekursion: dynamisk stack- allokering Dynamiskt allokerade listor: heap- allokering och garbage collecoon Metaprogrammering: program manipulerar program

procedure RSOK(y, start, slut, z, k);! value start, slut, z;! integer array y;! Algol 60 integer start, slut, z, k;! comment Värdet z söks upp i den sorterade vektorn y med hjälp av intervall-halvering. Index för z returneras i variabeln k.! begin! k := (start + slut) // 2;! if k <> start then! begin! if z < y[k] then RSOK(y, start, k, s, k)! else RSOK(y, k, slut, z, k)! end! end;! John Backus, Peter Naur, m. fl. Nästlade funkooner, blockstruktur Rekursion: dynamisk stack- allokering. En Algol- kompilator för SMIL (Siffermaskinen i Lund) implementerades av univ. lektor Torgil Ekman, LTH, 1962. 1960

class Glyph; virtual: procedure print; begin end; Glyph class Char (c); character c; begin procedure print; OutChar(c); end; 1967 Simula 67 Glyph class Line (elements); ref (Glyph) array elements; begin procedure print; begin integer i; for i := 1 step 1 until UpperBound(elements, 1) do elements(i).print; OutImage; end; end; Kristen Nygaard och Ole Johan Dahl Första objekt- orienterade språket Klasser, ärvning, virtuella procedurer, co- ruoner: dynamisk heap- allokering och garbage collecoon. En Simula- kompilator implementerades vid LTH cirka 1980.

1972 Smalltalk Smalltalk, av Alan Kay m. fl. Influenser från Lisp och Simula "Everything is an object" Dynamiskt typat ReflecOon Bytecode JIT: Just- in- Ome compilaoon (kompilera under runome).

David Ungar m. fl. 1987 Self Influenser från Smalltalk Prototyper i stället för klasser: klona objekt i stället för ag göra "new" AdapOv opomering: JIT + opomera under runome. Delar av Self- teamet implementerade HotSpot JVM 1999. (Javas virtuella maskin med adapov opomering) Hotspot JVM är snabbare än C/C++ för vissa program.

Dart 2011 PHP 1995 JavaScript 1995 Scala 2003 C# 2000 Python 1991 Java 1991 Haskell 1990 Self 1987 C++ 1985 Scheme 1975 C 1972 Smalltalk 1972 Simula 1967 Algol 1960 Lisp 1958 Fortran 1957 Numeriska beräkningar SystemadministraOon Objekt- orienterade FunkOons- orienterade Kombinerar OO och FP Webb- programmering

Typiska steg i en kompilator while (a >= 0) { } analys optimering 0024 6050 2530 0000 0000 0010 text GE While a 0 dekorerat träd Stmt mellankod L1: LD a R1 LD 0 R2 BLT L2 BR L L2: mellankod maskinkod

Java- kompilatorn while (a >= 0) { } analys 0024 6050 2530 0000 0000 0010 text GE While dekorerat träd Java bytekod Stmt klass-fil Klassfiler: binärkod för en virtuell maskin Mellankodsnivå, ej opomerade a 0

kompilator Länkning, laddning, exekvering 0034 7023 0000 0001 0155 0024 0024 6050 2530 0000 0000 0010 0003 0027 0105 0177 länkare... 0000 0001 0176 0024 0024 8050 2530 0000 0000 0010 0003 0030... exekverbar fil aktiveringsposter objekt minne... 0000 0001 0176 0024 0024 8050 2530 0000 0000 0010 0003 0030... laddare stack heap statisk data kod objektfiler maskin

Java- exekvering minne stack 0034 7023 0000 0001 0155 0024 kompilator 0024 6050 2530 0000 0000 0010 load and verify optimize JIT optimerad maskinkod maskinkod bytecode Class loader heap 0003 0027 0105 0177 JVM laddare kod klassfiler maskin

ImplementaOon av programspråk Språk Välkänd kompilator Implementa3onsspråk C gcc C Java javac Java Scala scalac Scala... Bootstrapping!

Bootstrapping Språkversion Implementeras i Språkversion Implementeras i C 1 Assembler Java 1 C C 2 C 1 Java 2 Java 1 C 3 C 2 Java 3 Java 2...... Språkversion Implementeras i Pizza Scala 1 Scala 2 Java Pizza Scala 1...

Kompilera Oll ny planorm LtoA.L program.l analys optimering program.a while (a >= 0) { } A 0024 6050 2530 0000 0000 0010 text dekorerat träd mellankod mellankod maskinkod för A

Kompilera Oll ny planorm LtoB.L program.l while (a >= 0) { } analys optimering B program.b 1776 4430 0000 0777 0044 0000 0002 0205 text dekorerat träd mellankod mellankod maskinkod för B Endast sista steget (backend) behöver bytas

Korskompilering Oll ny planorm Vi har LtoA.L Kompilerar språket L Oll maskinen A Implementerad i språket L självt. Vi har LtoA.A (skapad med bootstrapping) Vi har LtoB.L (implementerat ny backend för maskin B) Hur kan vi skapa LtoB.B (kompilerar Oll B- kod, på maskin B)? Kompilera LtoB.L med LtoA.A. Vi får LtoB.A en korskompilator Kompilera LtoB.L med LtoB.A. Vi får LtoB.B. Nu kan vi kompilera L- program på maskin B och generera B- kod.

Mer detaljer i kompilatorn while (a >= 0) { } analys optimering 0024 6050 2530 0000 0000 0010 text GE While a 0 dekorerat träd Stmt mellankod L1: LD a R1 LD 0 R2 BLT L2 BR L L2: mellankod maskinkod

Analysdelen fel fel fel while (a >= 0) { } scanner parser statisk analys: namn, typer,... text tokens träd dekorerat träd WHILE LPAR ID("a") GE INT("0") RPAR... While GE Stmt a 0 GE While a 0 Stmt

Generering av Scanner Reguljära uttryck WHILE = "while" LPAR = "(" RPAR = ")" ID = (A-Za-z) (A-za-z0-9)* INT = (0-9)+... Scannergenerator while (a >= 0) { } text scanner (tillståndsmaskin) tokens

Generering av parser Kontextfri grammatik Stmt ::= While If... While ::= WHILE LPAR Exp RPAR Stmt Exp ::= Exp BinOp Exp ID INT... BinOp ::= LT LE GT GE...... Parsergenerator "compiler compiler" while (a >= 0) { } text scanner tokens parser (tillståndsmaskin med stack) träd

Generering av staosk analysator Attributgrammatik: Trädnoderna förses med som definieras av ekvationer. syn Decl Use.decl = lookup(id); inh Decl Use.lookup(String s); eq Block.body.lookup(String s) = decls.locallookup(s); syn Type Expr.type; eq Use.type = decl.type;... Attributevaluatorgenerator Forskningsprojekt vid Datavetenskap, LTH while (a >= 0) { } text scanner parser statisk analys tokens träd dekorerat träd

Forskningsprojekt om utvidgningsbara kompilatorer java 1.4 java 5 java 7 java 8 Refaktorisering IDE-stöd Modelica Visuella språk

Orienteringsstöd

JModelica.org Kompilator och IDE utvecklad med hjälp av JastAdd

Exempel på modellering och optimering av fysikaliskt system med hjälp av JModelica.

JModelica- kompilatorn modell DAE ekvationer kompilator simulator

Kompilatorteknik generell teknik för många Ollämpningar analys optimering text dekorerat träd mellankod maskinkod

FortsäGningskurser EDAN65, Kompilatorteknik Scanning, Parsing, Analys, Kodgenerering. Implementera liten kompilator. EDAN40, Funktionsprogrammering EDAN01, Constraintprogrammering EDA230, Optimerande kompilatorer Förstå möjligheter och begränsningar hos moderna optimerande kompilatorer. EDAN20, Språkteknologi Om analys av naturligt språk EDAN70, Projekt i datavetenskap Forskningsnära projekt i t.ex. kompilatorer.