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

Relevanta dokument
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, 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

Introduktion till programmering. Programspråk och paradigmer

SMD 134 Objektorienterad programmering

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

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

Grammatik. BNF-grammatik

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

Kompilatorer och interpretatorer

Föreläsning 1 & 2 INTRODUKTION

Föreläsning 2. Operativsystem och programmering

Alfabeten, strängar och språk. String

Innehålls förteckning

Det finns många flaggor till g++,

Introduktion till programmering och Python Grundkurs i programmering med Python

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Datorarkitekturer med operativsystem ERIK LARSSON

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

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

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

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

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

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

Omprov 11/11. på förmiddagen.

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

En kort text om programmering i C.

kind spelling Scanning

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

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

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

Programmering A. Johan Eliasson

Repetition C-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

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

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

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

Föreläsning 1 & 2 INTRODUKTION

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

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

Typkonvertering. Java versus C

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

Introduktion C-programmering

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

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

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

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

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

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.

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

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

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

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

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

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

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

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

TDP002 Imperativ programmering

Tillämpad programmering

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

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

Assemblerprogrammering - fördjupning

OOP Objekt-orienterad programmering

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

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

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.

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

Inlämningsuppgift MiniPlotter

Datorarkitekturer med operativsystem ERIK LARSSON

Editering, Kompilering och Exekvering av Javaprogram

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

TDDC77 Objektorienterad Programmering

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

Översikt. Varför lära sig detta? Motivering Syntax och semantik Imperativa språkets byggstenar och Python. PL-boken Kap 1 (repetition):

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

Tentamen i Objektorienterad modellering och design Helsingborg

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

Konstruktion av datorspråk

F5: Högnivåprogrammering

Föreläsning 1 Datastrukturer (DAT037)

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

F5: Högnivåprogrammering

12. Relationer och funktioner

Imperativ programmering. Föreläsning 2

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

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

12. Relationer och funktioner

11. Reguljära uttryck och grammatiker

Imperativ programmering

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

Kompilatorkonstruktion

<Insert Picture Here> Snabbare Java

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Classes och Interfaces, Objects och References, Initialization

Transkript:

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

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 x(start=1); equation der(x) = - x; 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

Formella språk Designa eg formellt språk mycket vanligt i datavetenskap OJa för ag automa=sera eg systema=skt beteende Svårt ag implementera kompilatorer för hand Rimligt läg med kompilatorteknikverktyg (compiler- compilers)

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 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 Tilldelning: STORE Räkna: ADD, SUB, Kontrollstrukturer: LABELS, BRANCHES 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äGningskurser Scanning, Parsing, Analys, Kodgenerering. Implementera eget språk, egen kompilator. EDA230, Optimerande kompilatorer Förstå möjligheter och begränsningar hos moderna optimerande kompilatorer. EDA145, Programspråksteori Förstå olika typer av formell semantik. Exekveringsmodeller för funktionella och logikbaserade språk. EDAF10, Objektorienterad modellering och diskreta strukturer (oblig) EDA040, Realtidsprogrammering (oblig) EDA095, Nätverksprogrammering EDA270, Constraintprogrammering EDA120, Funktionsprogrammering EDA171, Språkbehandling och datalingvistik

Kompilatorteknik högnivåspråk while (a1 >= 0) { kompilator scanning parsing namnanalys typanalys kodgenerering kodoptimering instruktionsval registerallokering Mycket användbar teknik! Använd compiler- compilers! lågnivåspråk 0024 6050 2530 0000 0000 0010 standardbibliotek stack heap garbage collector virtuell maskin interpretator runtime-system