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

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

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, 2014

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

Program & programmering

Software Technology. Josef Svenningsson

Kompilatorer och interpretatorer

SMD 134 Objektorienterad programmering

Backcode. Jonathan Crusoe TDP019 Projekt: Datorspråk Linköpings universitet

Grammatik. BNF-grammatik

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

Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID

Kompilatorer och interpretatorer

Föreläsning 1 & 2 INTRODUKTION

Introduktion till programmering. Programspråk och paradigmer

Reguljära uttryck Grammatiker Rekursiv nedåkning Allmänna kontextfria grammatiker. Syntaxanalys. Douglas Wikström KTH Stockholm

Alfabeten, strängar och språk. String

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

Innehålls förteckning

Introduktion till programmering och Python Grundkurs i programmering med Python

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Det finns många flaggor till g++,

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

kind spelling Scanning

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

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

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

Datorarkitekturer med operativsystem ERIK LARSSON

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

Föreläsning 7: Syntaxanalys

En kort text om programmering i C.

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

Föreläsning 2. Operativsystem och programmering

Omprov 11/11. på förmiddagen.

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

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

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

Föreläsning 1 & 2 INTRODUKTION

Programmering A. Johan Eliasson

Arbeta med databas. Översikt. Lektion 1: Arbeta med Entity Data Models. Arbeta med Entity Data Models. LINQ (Language Integrated Query).

Konstruktion av datorspråk

Typkonvertering. Java versus C

Kursupplägg. Examination. Föreläsning 1: Intro till kursen och. Kursmaterial. programmering. Kursboken: Programmera med a multimedia approach

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT / 26

Programmering för språkteknologer I, VT2012. Rum

Repetition C-programmering

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

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

Föreläsning 7: Syntaxanalys

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

"if"-satsen. Inledande programmering med C# (1DV402)

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

TDDI82 - Projekt. Christoffer Holm. Institutionen för datavetenskap (IDA)

Programmering i C++ EDA623 Något om C# EDA623 (Föreläsning 14) HT / 17

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

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

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

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

F5: Högnivåprogrammering

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU

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

F5: Högnivåprogrammering

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

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

Introduktion C-programmering

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.

OOP Objekt-orienterad programmering

Editering, Kompilering och Exekvering av Javaprogram

Datorarkitekturer med operativsystem ERIK LARSSON

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

Föreläsning 6: Metoder och fält (arrays)

TDDC77 Objektorienterad Programmering

HT1 2013, FÖRELÄSNING 14 (INFÖR TENTAN)

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

Objektorienterad Programmering DAT043. Föreläsning 1 15/1-18 Moa Johansson

Inlämningsuppgift MiniPlotter

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

Tentamen i Objektorienterad modellering och design Helsingborg

Föreläsning 1 Datastrukturer (DAT037)

Assemblerprogrammering - fördjupning

Programmering. Hur, var, när och varför. 22 November. Lars Ohlén Tieto

12. Relationer och funktioner

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

Innehåll. EDAA35 Föreläsning 5. Kursinformation: tidigare laborationer som inte är godkända. Kursinformation: Presentation av lab 4

12. Relationer och funktioner

Föreläsning 1. Presentation av kursen Vad är programmering? Lite om java och utvecklingsmiljöer Aktivitetsdiagram Ett första program

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

Digital- och datorteknik

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

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

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll

Tillämpad programmering

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

TDP002 Imperativ programmering

Tentamen den 14 januari 2015 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik

Föreläsning 3. Programmering, C och programmeringsmiljö

Datorsystemteknik DAVA14 Föreläsning 10

Transkript:

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

Vad är en kompilator? programkod while (a >= 0) { kompilator maskinkod 0024 6050 2530 0000 0000 0010 Kompilatorn översätter från ett högnivåspråk (lämpligt för människor att programmera i) till ett lågnivåspråk (lämpligt för maskiner att exekvera).

Typiska steg i en kompilator kompilator while (a >= 0) { scanning parsing namnanalys typanalys kodgenerering kodoptimering instruktionsval registerallokering 0024 6050 2530 0000 0000 0010

Run=me- system while (a >= 0) { kompilator 0024 6050 2530 0000 0000 0010 standardbibliotek stack heap garbage collector virtuell maskin interpretator runtime-system

Kompilatorteknik while (a >= 0) { kompilator 0024 6050 2530 0000 0000 0010 runtime-system Kompilatorteknik handlar om design, teori och algoritmer som används i kompilatorer och runtime-system.

Kompilatorer använder kompilatorteknik. Många andra verktyg också! compilers integrated editors debuggers source-to-source translators source code analyzers bug finders reverse engineering tools testing tools

högnivåspråk while (a >= 0) { kompilator lågnivåspråk 0024 6050 2530 0000 0000 0010 Några exempel på högnivåspråk

// The classic Hello World program public class HelloWorld { public static void main(string[] args) { System.out.println("Hello, World!");

// The classic Hello World program object HelloWorld { def main(args: Array[String]) { println("hello, world!") Scala

"The classic Hello World program" Transcript show: 'Hello, world!'. Smalltalk

// The classic Hello World program #include <stdio.h> main() { printf ("Hello World!\n");

Kompilatorteknik används för programmeringsspråk. Men för många andra formella språk också!

model HelloWorld "A differential equation Real y(start=1); equation der(y) = - y; end HelloWorld; Modelica A language for modeling and simulating physical systems.

<?xml version="1.0"?> <hello- world> <greeter>a Programmer</greeter> <greeting>hello, World!</greeting> </hello- world> XML extensible Markup Language

Konstruera en kompilator beskrivning av mitt språk kompilator-kompilator recept Pannkaka tag 4 ägg, vispa program i mitt språk kompilator för mitt språk genererad kod

Typiska steg i en kompilator kompilator while (a >= 0) { scanning parsing namnanalys typanalys kodgenerering kodoptimering instruktionsval registerallokering 0024 6050 2530 0000 0000 0010

Programrepresenta=oner while (a1 >= 0) { text scanning while ( a1 >= tokens parsing While Ge Stmt a1 0 syntaxträd Ge a1 0 While Stmt programmodell kodgenerering L1: LD a1 R1 LD 0 R2 BLT L2 BR L1 L2: mellankod optimering 0024 6050 2530 0000 0000 0010 maskinkod

Scanning while WHILE while (a1 >= 0) { scanning ( a1 >= tokens LPAREN ID GE Tillståndsmaskiner w h i l e WHILE A-Z, a-z A-Z, a-z, 0-9 ID

Scanner- generering WHILE = [ w ] [ h ] [ i ] [ l ] [ e ] LPAREN = [ ( ] ID = [ A-Z, a-z ] [ A-Z, a-z, 0-9 ]* scannerspecifikation (reguljära uttryck) scannergenerator while (a1 >= 0) { program scanner while ( a1 >= tokens

Parsing while ( a1 >= tokens parsing While Ge Stmt a1 0 syntaxträd Stmt ::= While Assign While ::= WHILE LPAREN Expr RPAREN Stmt Expr ::= Eq Ge ID INT Ge ::= Expr GE Expr parserspecifikation (kontext-fri grammatik)

Parsergenerering Stmt ::= While Assign While ::= WHILE LPAREN Expr RPAREN Stmt Expr ::= Eq Ge ID INT Ge ::= Expr GE Expr parserspecifikation (kontext-fri grammatik) while ( a1 >= tokens parsergenerator parser While Ge Stmt a1 0 syntaxträd

Scanner och parser- generatorer De klassiska UNIX- verktygen från Bell Labs (70- talet) Lex: a Lexical Analyzer Generator Yacc: Yet Another Compiler Compiler Några andra populära: Flex & Bison (GNU s version av Lex och Yacc) ANTLR, CUP, JavaCC,

Programrepresenta=oner while (a1 >= 0) { text scanning while ( a1 >= tokens parsing While Ge Stmt a1 0 syntaxträd Ge a1 0 While Stmt programmodell kodgenerering L1: LD a1 R1 LD 0 R2 BLT L2 BR L1 L2: mellankod optimering 0024 6050 2530 0000 0000 0010 maskinkod

Programanalys Beräkna egenskaper hos programelement Decl While Ge bool Stmt int a1 0 int Namnanalys: Vilken användning hör ihop med vilken deklaration? Typanalys: Vilken typ har varje uttryck? Är typerna korrekta? Kontrollflödesanalys: I vilken ordning kan satserna exekveras? Dataflödesanalys: Hur beror variabler och tilldelningar på varandra?

Generera hela kompilatorn (forskningsprojekt JastAdd) Scanner-spec scannergenerator scanner Parser-spec parsergenerator parser Namnanalys Kompilator- kompilator Kompilator Typanalys JastAdd analysator Kodgenerering

Programrepresenta=oner while (a1 >= 0) { text scanning while ( a1 >= tokens parsing While Ge Stmt a1 0 syntaxträd Ge a1 0 While Stmt programmodell kodgenerering L1: LD a1 R1 LD 0 R2 BLT L2 BR L1 L2: mellankod optimering 0024 6050 2530 0000 0000 0010 maskinkod

Kodgenerering Decl While bool Ge Stmt int int a1 0 L1: LD a1 R1 LD 0 R2 BLT L2 BR L1 L2:... Access av variabler: LOAD (LD) Tilldelning: STORE Räkna: ADD, SUB, Kontrollstrukturer: LABELS, BRANCHES (BLT, BR, ) Men hur skall minnet hanteras? Och objekt, klasser, metoder,?

Run=me- system Primärminnet PC Info om klasser Kod för metoder PC Program counter Sta=sk informa=on SP Dynamisk informa=on Stack av ak=veringsposter (metodinstanser) SP Stack Pointer. Första lediga platsen i stacken. HP Heap av objekt (klassinstanser) HP Heap pointer. Första lediga platsen i heapen. Garbage collec=on

Programrepresenta=oner while (a1 >= 0) { text scanning while ( a1 >= tokens parsing While Ge Stmt a1 0 syntaxträd Ge a1 0 While Stmt programmodell kodgenerering L1: LD a1 R1 LD 0 R2 BLT L2 BR L1 L2: mellankod optimering 0024 6050 2530 0000 0000 0010 maskinkod

Op=mering, exempel while () { a = 1; a = 1; while () { Loop invariant code motion a = (b*c)+(b*c)/2 t = b*c a = t+t/2 Common subexpression elimination a = min(x, y); Inlining if (x < y) t = x; else t = y; a = t;

Programrepresenta=oner while (a1 >= 0) { text scanning while ( a1 >= tokens parsing While Ge Stmt a1 0 syntaxträd Ge a1 0 While Stmt programmodell kodgenerering L1: LD a1 R1 LD 0 R2 BLT L2 BR L1 L2: mellankod optimering 0024 6050 2530 0000 0000 0010 maskinkod

EDA180, Kompilatorteknik Fortsäcningskurser Scanning, Parsing, Analys, Kodgenerering. Implementera eget språk, egen kompilator. EDA230, Optimerande kompilatorer Förstå möjligheter och begränsningar hos moderna optimerande kompilatorer. EDAF10, Objektorienterad modellering och diskreta strukturer (oblig) EDA040, Realtidsprogrammering (oblig) EDA095, Nätverksprogrammering EDA270, Constraintprogrammering EDA120, Funktionsprogrammering EDA171, Språkbehandling och datalingvistik

Kompilatorteknik språkbeskrivning kompilator-kompilator while (a >= 0) { kompilator 0024 6050 2530 0000 0000 0010 Mycket användbar teknik! Använd compiler- compilers! runtime-system