Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Kompilatorer - Hva foregår under panseret? BEKK fagdag

Liknende presentasjoner


Presentasjon om: "Kompilatorer - Hva foregår under panseret? BEKK fagdag"— Utskrift av presentasjonen:

1 Kompilatorer - Hva foregår under panseret? BEKK fagdag 30.08.13
Åsmund Eldhuset

2 Dagens sitat "A compiler is a computer program that transforms a series of high-level programming language statements into error messages, warnings and, occasionally, insults." – Uncyclopedia

3 Agenda Strukturen til en kompilator Litt språkteori
Intro til .Net-assemblykode Gjennomgang av koden til en fullstendig kompilator

4 Credits Dette foredraget og kompilatoren vi har utviklet er svært sterkt inspirert av øvingsopplegget i faget TDT4205 Kompilatorteknikk Foreleser: Anne C. Elster Øvingslærer: Jan Christian Meyer

5 Faser Leksikalsk analyse (lexing/scanning) Parsing Semantisk analyse
Optimalisering Kodegenerering og mer optimalisering Assembling og linking

6 i f ( x = ) { 4 2 ; } i f ( x = ) { 4 2 ; } Fase 1: Lexing
Sekvens av tegn fra inputfil  sekvens av tokens i f ( x = ) { 4 2 ; } i f ( x = ) { 4 2 ; }

7 i f ( x = ) { 4 2 ; } i f = 4 2 x Fase 2: Parsing
Sekvens av tokens  abstrakt syntakstre (AST) parse verb /pɑːz/ (grammatikk eller EDB) analysere (dvs. dele opp en setning i deler for å beskrive de ulike delenes art og innbyrdes forhold) - Kunnskapsforlagets engelskordbok i f ( x = ) { 4 2 ; } i f = 4 2 x

8 Fase 3: Semantisk analyse
AST  annotert AST Sjekker semantiske regler som ikke dekkes av grammatikken Hvilke variabeldeklarasjoner som gjelder for hver variabelreferanse Sjekke at typer stemmer overens Sjekke at variabler er deklarert før de brukes Sjekke at ikke-void-metoder har en return i alle execution paths Sjekke at det finnes en Main() Sjekke at expressions i if og while er sammenligninger i f = 4 2 x Kind: argument Index: 3 Type: int

9 * << x - x 3 13 5 Fase 4: Optimalisering Omstrukturering av AST
Constant folding Strength reduction Common subexpression elimination Loop hoisting ... * << x - x 3 13 5

10 Fase 5: Kodegenerering og mer optimalisering
Optimalisert AST  assemblykode Optimalisering av assemblykoden Eliminasjon av død kode Gjenbruk av utregnede mellomresultater Registerallokering (trengs ikke i stackmaskiner) ... pushl %ebp movl %esp, %ebp subl $0, %esp pushl $2 pushl 16(%ebp) movl $0, %edx popl %eax imull (%esp) movl %eax, (%esp) addl $0, %esp leave ret i f = 4 2 x Kind: argument Index: 3 Type: int

11 Fase 6: Assembling og linking
Assemblykode (kanskje fra flere filer)  maskinkode; kjørbart program pushl %ebp movl %esp, %ebp subl $0, %esp pushl $2 pushl 16(%ebp) movl $0, %edx popl %eax imull (%esp) movl %eax, (%esp) addl $0, %esp leave ret 5f e f 6f c d 62 72 6e 63 6d f 70 c 63 6b 00 5f 5f 6d 65 6d 70 63 67 6e 61 6c 74 6f 6b 00 5f 5f 69 6c 00 5f 5f 6c 78 73 e

12 VSL func IsPrime(number) { var divisor divisor = while divisor < number { if number / divisor * divisor == number return divisor = divisor } return 1 }

13 VSL func Main() { var n, max print "Please enter the greatest number to check:" input max n = while n <= max { if IsPrime(n) print n, " is prime" n = n } return 0 }

14 Endelige tilstandsautomater
Tokens bør kunne beskrives av regulære uttrykk (regex) Regex ↔ tilstandsautomat "Enkelt" å implementere i kode -?(0|[1-9][0-9]*)(\.[0-9]+)? blir til dette:

15 EBNF (Extended Backus-Naur form) for VSL
program = function { function } function = “func" identifier "(" [ identifier { "," identifier } ] ")" block statement = assignment_statement | return_statement | print_statement | null_statement | if_statement | while_statement | block block = "{" { declaration } { statement } "}" assignment_statement = identifier "=" expression return_statement = "return" expression print_statement = "print" print_item { "," print_item } null_statement = "continue" | "break" if_statement = "if" expression statement | "if" expression statement "else" statement while_statement = "while" expression statement input_statement = "input" identifier { "," identifier }

16 EBNF (Extended Backus-Naur form) for VSL
declaration = "var" identifier { "," identifier } print_item = expression | string expression = comparand { ("==" | "!=" | "<" | "<=" | ">" | ">=") comparand } comparand = term { ("+" | "-") term } term = factor { ("*" | "/") factor } factor = "-" factor | "(" expression ")" | integer | variable [ "(" [ expression { "," expression } ] ")" ]

17 CIL – Common Intermediate Language
Veldig høynivå assemblyspråk som brukes av .NET sin virtual machine Stackbasert → ingen registre "Vanlig" x86-assemblykode er registerbasert; litt vanskeligere å kompilere til, men ca. samme prinsipper Sterkt typet

18 CIL: Klasser C#: namespace Vsl { public class VslMain { ... } }
CIL: .namespace Vsl { class public auto ansi VslMain extends [mscorlib]System.Object { } }

19 CIL: Metoder C#: public static void DoSomething(int x, string s) { string t = ...; int y = ...; } CIL: .method public static void DoSomething(int32, string) cil managed { locals init (string, int32) }

20 CIL: Instruksjoner og utførelse
public int DoSomething(int a) { int x = 3; int y = a + x * 8; return a - y; } ldc.i4 3 stloc 0 ldarg 0 ldloc 0 ldc.i4 8 mul add stloc 1 ldarg 0 ldloc 1 sub ret Locals: ? Arguments: 7 Stack: 3 31 -24 31 7 7 3 31 3 24 8

21 CIL: Konsoll-I/O og kalling av .Net-kode
C#: Console.WriteLine("Hello world!"); int a = int.Parse(Console.ReadLine()); CIL: ldstr "Hello world!" call void [mscorlib]System.Console::Write(string) call string [mscorlib]System.Console::ReadLine() call int32 [mscorlib]System.Int32::Parse(string) stloc

22 Demo! (Det er nå dere skal juble)

23 Deres tur! Kode: https://github.com/aasmundeldhuset/Compiler
Gjør noe gøy! Forslag: Legg til ny syntaks (med .Net-kodegenereringen) Modulo-operator Mulighet for å kalle annen .Net-kode Skriv om backenden Assemblyspråk: JVM-bytecode Native x86 Høynivå språk (enten vha. all syntaksen, eller ved å simulere en stackmaskin): Java Ruby Lag din egen DSL Lag en interpreter


Laste ned ppt "Kompilatorer - Hva foregår under panseret? BEKK fagdag"

Liknende presentasjoner


Annonser fra Google