Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

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

Liknende presentasjoner


Presentasjon om: "Kompilatorer - Hva foregår under panseret? BEKK fagdag 30.08.13 Åsmund Eldhuset."— Utskrift av presentasjonen:

1 Kompilatorer - Hva foregår under panseret? BEKK fagdag Å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 1.Leksikalsk analyse (lexing/scanning) 2.Parsing 3.Semantisk analyse 4.Optimalisering 5.Kodegenerering og mer optimalisering 6.Assembling og linking

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

7 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==0) {x =42;} i f == 42 0x 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 == 42 0x x = Kind:argument Index:3 Type:int

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

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 pushl16(%ebp) movl$0, %edx popl%eax imull(%esp) movl%eax, (%esp) popl%eax addl$0, %esp leave ret i f == 42 0x 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 pushl16(%ebp) movl$0, %edx popl%eax imull(%esp) movl%eax, (%esp) popl%eax addl$0, %esp leave ret 5f e f f c d e 63 6d f c 63 6b f 5f 6d 65 6d e 61 6c f b 00 5f 5f c 00 5f 5f 6c e

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

13 VSL func Main() { var n, max print "Please enter the greatest number to check:" input max n = 2 while n <= max { if IsPrime(n) print n, " is prime" n = n + 1 } 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:

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 0

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

23 Deres tur!  Kode: https://github.com/aasmundeldhuset/Compilerhttps://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 30.08.13 Åsmund Eldhuset."

Liknende presentasjoner


Annonser fra Google