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

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

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

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

Grammatik. BNF-grammatik

Datorarkitekturer med operativsystem ERIK LARSSON

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

Kompilatorer och interpretatorer

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

Software Technology. Josef Svenningsson

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

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

Introduktion till programmering. Programspråk och paradigmer

Alfabeten, strängar och språk. String

Program & programmering

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

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

Introduktion till programmering och Python Grundkurs i programmering med Python

Imperativ programmering

kind spelling Scanning

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

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

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

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

Tentamen i. TDDA 69 Data och programstrukturer

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

F4: Assemblerprogrammering

Exempel på typer av datorspråk EXCEL

12. Relationer och funktioner

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

Föreläsning 1 & 2 INTRODUKTION

Inlämningsuppgift MiniPlotter

Föreläsning 4: for, while, do-while

PROMETHEUS. Ett typat, objektorienterat programmeringsspråk av Tim Andersson.

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

12. Relationer och funktioner

11. Reguljära uttryck och grammatiker

Assemblerprogrammering - fördjupning

Datorarkitekturer med operativsystem ERIK LARSSON

Konstruktion av datorspråk

Assemblerprogrammering för ARM del 2

Föreläsning 7: Syntaxanalys

TDP002 Imperativ programmering

11. Reguljära uttryck och grammatiker

Kompilatorer och interpretatorer

Linköpings universitet Innovativ Programmering TDP019 Projekt: Datorspråk. flip/flop. ett helt flippat språk

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

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

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

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

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

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

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

Föreläsning 7: Syntaxanalys

Föreläsning 2. Operativsystem och programmering

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Datorsystemteknik DAVA14 Föreläsning 10

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

Imperativ programmering. Föreläsning 2

Programmering och Programspråk. 7,5 högskolepoäng. Namn: (Ifylles av student) Personnummer: (Ifylles av student)

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

Digital- och datorteknik

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

TDP002 - Imperativ programmering

Allmänna anvisningar: Skriv dina svar på svarsblanketten. Markera och ange alla svar tydligt och entydigt efter instruktionerna.

Tillämpad programmering

SMD 134 Objektorienterad programmering

Tentamen i Objektorienterad modellering och diskreta strukturer

Ytterligare ett steg mot realisering av SystemJ

DD1361 Programmeringsparadigm Föreläsning 1: Intro

Kapitel 2. Evolutionen av de viktigaste programmeringsspråken ISBN

Datorspråk Breddgivande föreläsning

Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010

Uppgift 1: a) u= a c + a bc+ ab d +b cd

Tentamen den 18 mars svar Datorteknik, EIT070

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

Mjukstart i programmering

Tentamen i Digitala system - EITA15 15hp varav denna tentamen 4,5hp

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

DD1361 Programmeringsparadigm Föreläsning 1: Intro

TDIU01 - Programmering i C++, grundkurs

Programmering och Programspråk. 7,5 högskolepoäng. Namn: (Ifylles av student) Personnummer: (Ifylles av student)

OOP Objekt-orienterad programmering

Tentamen i Objektorienterad modellering och design Helsingborg

Studentportalen UNIX-konton (systemansvariga P4118) Lärare: Anna Eckerdal,

Tentamen Grundläggande programmering

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

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

Föreläsning 1 & 2 INTRODUKTION

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

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

DVG C01 TENTAMEN I PROGRAMSPRÅK PROGRAMMING LANGUAGES EXAMINATION :15-13: 15

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

Stack och subrutiner Programmeringskonventionen

Imperativ programmering. Föreläsning 3

Digital- och datorteknik

Programmering A. Johan Eliasson

Exempel på typer av datorspråk EXCEL

Transkript:

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

Kompilatorteknik källkod kompilator maskinkod Teknik för att bygga verktyg för formella språk. Till exempel kompilatorer.

Exempel på formella språk Java C C++ Python allmänna programmeringsspråk Prolog Haskell HTML XML VHDL Modelica Grammar rules specifikationsspråk för specifika domäner Makefiles allmänna databeskrivningsspråk företagsspecifika språk SGML

Exempel på verktyg för språk källkod kompilator maskinkod visualisering smart editor programanalys debugger testverktyg optimerare interpretator exekveringssystem garbage collector programtransformation

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

Scanning while WHILE while (a12>=0) { } scanning ( a12 >= 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 (a12>=0) { } program scanner while ( a12 >= tokens

Parsing while ( a12 >= tokens parsing While Ge Stmt a12 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 ( a12 >= tokens parsergenerator parser While Ge Stmt a12 0 syntaxträd

Olika typer av parsers LL LR GLR LL Left-to-right Leftmost derivation parser LR Left-to-right Rightmost derivation parser GLR Generalized LR parser

Programanalys Beräkna egenskaper hos programelement Decl While Ge bool Stmt int a12 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

Kodgenerering Decl While bool Ge Stmt int int a12 0 L1: LD a12 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,?

Exekveringssystem 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

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;

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

EDA180, Kompilatorteknik FortsäZningskurser 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