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