Compiler/fortolker struktur Mellem- kode Mellemk.- optimering Kode- generering Kode- optimering Lexikalsk- analyse Syntax- analyse Semantik- analyse -

Slides:



Advertisements
Lignende præsentationer
Niveauer af abstrakte maskiner
Advertisements

Velkommen til Softwarekonstruktion
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
Symbolsk maskinsprog.
Datastrukturer Simple-type structs
Automater, sprog og compilere
Grundlæggende programmering Efterår 2001
09 – Arv og polymorfi i java
Hvordan man skriver koden.
01 – Java platform for starters. 2 NOEA2009Java-kursus – Java Platform Introduktion til Java Baggrund Hvad er Java? Faciliteter i Java.
GP5, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 5 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
FEN IntroJava AAU1 Opsamling: afvikling af Java-programmer Input fra keyboard og fil Fra en prompt Fra BlueJ Fra NetBeans.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
Delphi og C++ Builder C++ Referencer og pointere.
Endelige Automater Simple sprog (regulære sprog) kan beskrives vha. Regulære udtryk. Regulære sprog kan altid parses vha endelige automater. Nondeterministik.
Begreber og Redskaber 2. Plan for idag Noget om bestanddelene i et programmeringssprog Syntaksbeskrivelse af java Næste gang: –Binære tal –Repræsentation.
Intro til C# apps Kodegennemgang af simpel C# app
Buttom-up parsning: Hvor er vi Mellem- kode Kald til Runtimesys. Mellemk.- optimering Kode- generering Kode- optimering Leksikalsk- analyse Syntax- analyse.
Delphi og C++ Builder C++ Builder. C++ Historie Sproget blev designet for AT&T af danskeren Bjarne Stoustrup En objektorienteret videreudvikling.
Sprog og grammatik Et sprog L(G) er mængden af sætninger afledt af grammatikken G. Grammatik er en 4-tupel: G={N, ,P,S}. Hvor: N er et sæt af non-terminale.
GP6, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 6 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
W1b1 PC baseret analyse og simulering. w1b2 Definition Digital Elektronisk beregningsmaskine, der har intern hukommelse til lagring af program og mellem-regninger.
Fundamentale datastrukturer
Per P. Madsen- Proces1 Algoritmer og datastrukturer Grundprincipper og analyse af algoritmer. MM1 Lister, stakke og køer. MM2 Træer, og Hash-tabeller.
Compiler/fortolker struktur Mellem- kode Mellemk.- optimering Kode- generering Kode- optimering Lexikalsk- analyse Syntax- analyse Semantik- analyse -
Objekter og klasser Rasmus D. Lehrmann DM
Ingeniørhøjskolen i Århus Slide 1 Newton approximation ”Oversæt” til algoritme - Step 5: Skriv kode - Step 4: Skriv pseudokode - Step 3: Specificér pre-
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Procestræ under afvikling af cp init login shell cp cp src dest.
Modul placering. Analysemodellens struktur   Data model data objects relationships ERDs   Functional model data transforms DFDs   Behavioral model.
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Primitive typer. dIntProg, F08Typer.2 Subtyperelation for primitive typer byte ≤ short ≤ int ≤ long ≤ float ≤ double char boolean double d; int i; d =
Begreber og Redskaber 7. Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
Begreber og Redskaber 1. Plan for kurset Formål –Give et begrebsmæssigt grundlag for programudvikling, samt overblik over udvalg af redskaber og metoder.
Efteruddannelse Embedded C Modul 3 (Onsdag den 21/4-2010)
JavaCC Top-down (Recursive descent). Mest populære mht Java. Regulær grammatik og Context-free grammatik i en fil. Tillader EBNF: (..)*, (..)+ og (..)?
C#: Udtryk og metoder Kilde: Joe Hummel. 2 Nordjyllands Erhvervakademi – 2008 Indhold “With regards to programming statements and methods, C# offers what.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Per Printz Madsen 1 Linux kernen Monolithic kernel Support for dynamiske moduler Få kerne tråde Preemptive.
DComNet1 ISA-niveauet (2). dComNet2 Niveauer af virtuelle maskiner ISA niveauet / maskinkodeniveauet / maskinniveau.
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
1 Processer. 2 fork int fork(); Danner en ny proces med samme indhold som forældre processen. I begge processer er programtælleren placeret lige efter.
Quiz 3.1. Quiz 1 – Assignment dIntProg, E14 Hvad er værdierne af x og y efter udførelse af følgende program? 1.x er 6, y er 3 2.x er 8, y er 5 3.x er.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Multiple processer på web-site Web- server filer Kunde 1 Kunde 2 Kunde p1p2p internet.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
Grammatikker, sprog og parsing Rasmus D. Lehrmann DM
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Programmering I Java/C# Datatekniker Dit første projekt.
Fromelle sprog Per P. Madsen Afd. for proceskontrol.
Embedded SW – C & picoBlaze
1587 Server - Blandet miljø Webintegrator HF1
Interrupts. Indtil nu har hastigheden på dine blinkende LEDs været styret af et loop. Som du muligvis også har bemærket afhænger det meget af hvor travlt.
Quiz – Uge 3 – torsdag – første time
Programmering.
Quiz – Uge 3 – torsdag – første time
Forelæsning Uge 4 – Torsdag
Præsentationens transcript:

Compiler/fortolker struktur Mellem- kode Mellemk.- optimering Kode- generering Kode- optimering Lexikalsk- analyse Syntax- analyse Semantik- analyse Front end Back end

Semantik analyse Check om brug af variable svare til typereglerne for sproget. –Check procedure-kald svare til proceduren. –Check om navne bliver brug i rette sammenhæng float p1(int x) { p1= x(); x= p1(2.4,3); }

Semantik analyse Brug symboltabellen: Typisk indhold: –Navn –Adresse –Simpeltype: Funktion, char, int, float,.... –Komplextype: Pointer til symboltabellen –Hvis funktion så Returtype –Hvis funktion så Parameterliste –Brugt –Tilskrevet

Semantikanalyse: fremgangsmåde varlinelist: varline varlinelist | e varline: type varlist ”;” type: FLOAT | INT | CHAR {statement 1} varlist: IDENT ”,” varlist | IDENT {statement 2} Problem: Statement 2 afvikles før statement 1. Løsning LEX/FLEX sætter CurrentType. Statement 2 sætter typen i symboltabellen.

Eks. på Flex/Bison metode. float {CurrentType=FLOATT; return FLOATT;} int {CurrentType=INTT; return INTT;} char {CurrentType=CHART; return CHART;} [a-zA-Z][a-zA-Z0-9]* {if ((yylval.symptr= lookup_sym(yytext)) == NULL){ yylval.symptr= insert_sym(yytext); yylval.symptr->type= NULL; } return IDENTT;} varlinelist: varline varlinelist | ; varline: type varlist ”;” ; type: FLOAT {$$=FLOATT} | INT {$$=INTT} | CHAR {$$=CHART}; varlist: IDENT ”,” varlist {$1->type= CurrentType;} | IDENT {$1->type= CurrentType;};

Eks. på Flex/Bison metode. statement: ident ”=” exp {if ($1->type !=NULL){ if ($1->type || $3) error; } else error; }; exp: exp '+' exp {if ($1 != $3) error; else $$ = $1;} |.... | IDENT {$$ = $1->type;}; funktion: type IDENT ”(” parmlist ”)” funkblok {if ($2->type == NULL){ $2->type=FUNKTIONT; $2->returtype= $1; $2->parmtype= $4; } else if ($2->type != FUNKTIONT) error;};

Mellemkode. Tree-based repræsentation. Mellemkode som et parsertræ. Three-address koder: A:= b + c int main () { int a=0,b=2; while (b) { a= a+b; b--; } a= 0 b= 2 l1: ifz b goto l2 a= a + b b= b – 1 goto l1 l2:

Three-address kodeoptimering. 1.Find basic blokke. 2.Optimer hver basic blok: –Commom sub-expression –Copy propagation –Dead-code elimination –Arithmetic transform Constant folding Algebraic transform Reduction in strength –Packing af mellemvariable. 3.Loop optimering.

Basic blokke a= 0 b= 2 l1: ifz b goto l2 a= a + b b= b – 1 goto l1 l2: Blok start: Første statement Label, der hoppes til Statement efter et branch

Basic blok optimering. –Commom sub-expression Samme beregning flere gange. –Copy propagation Samme værdi i flere variable. Erstat alle med en. –Dead-code elimination Variable, der ikke bruges, slettes. –Arithmetic transform Constant folding Beregn konstanter Algebraic transform + 0, - 0, * 1 og /1 Reduction in strength Fx: 2*x -> x+x –Packing af mellemvariable Frigiv overflødig plads til mellemvariable.

Commom sub-expression b := t1 := b / 2 t2 := a * t1 t3 := t2 * b t4 := t3 + c t5 := t2 * b t6 := t5 + c d := t4 * t6 b := t1 := b / 2 t2 := a * t1 t3 := t2 * b t4 := t3 + c t5 := t3 t6 := t5 + c d := t4 * t6

Copy propagation b := t1 := b / 2 t2 := a * t1 t3 := t2 * b t4 := t3 + c t5 := t3 t6 := t5 + c d := t4 * t6 b := t1 := b / 2 t2 := a * t1 t3 := t2 * b t4 := t3 + c t5 := t3 t6 := t3 + c d := t4 * t6 b := t1 := b / 2 t2 := a * t1 t3 := t2 * b t4 := t3 + c t5 := t3 t6 := t4 d := t4 * t4

Dead-code elimination b := t1 := b / 2 t2 := a * t1 t3 := t2 * b t4 := t3 + c t5 := t3 t6 := t4 d := t4 * t4 b := t1 := b / 2 t2 := a * t1 t3 := t2 * b t4 := t3 + c d := t4 * t4

Arithmetic transform b := t1 := b / 2 t2 := a * t1 t3 := t2 * b t4 := t3 + c d := t4 * t4 b := 2 t1 := b / 2 t2 := a * t1 t3 := t2 * b t4 := t3 + c d := t4 * t4 t1 := 1 t2 := a * t1 t3 := t2 * 2 t4 := t3 + c d := t4 * t4 t2 := a t3 := t2 * 2 t4 := t3 + c d := t4 * t4

Loop optimering b a

Kodegenerering. a= 0 b= 2 l1: ifz b goto l2 a= a + b b= b – 1 goto l1 l2: Globale og static variable: Når type og contekst kendes: så symnote->adr= Nextstatic; Nextstatic=+ type.VarSize; Lokal variable: Hvis første: NextLokal= 0; Ellers: symnote->adr= NextLokal; NextLokal=+ type.VarSize; For hver linie i mellemkode: Generer koden vha informationer fra symboltabellen. Labels: Anvendelse: Kik i symboltabellen om den er defineret ellers gem i symboltabellen, hvor den bruges. Oprettelse: symnote->adr= LC. Anvendelser: sæt referencer til symnote->adr.

HomeControler DIGIINPUT DoreOpen : 1; DIGIOUTPUT StartFan : 1; RumLight : 2; ANAINPUT _Temperature: 1,TEMP; _Humidity : 4,HUMI; _TempSetTurnButton: 3,[10.0,30.0]; ANAOUTPUT _FanVelosity: 1,[0,100]; EXPORT _Temp_Stue; TempAlarm; IMPORT _OutsideTemp; _OutsideFugt; LightB;

HomeControler SEQUENCE: Ventilation RESET= Total_stop OR Ventilation_Stop; STATE: INIT FanMotor= OFF; GO TO Ventilate WHEN LightButton; GO TO HumidityTooHigh WHEN (_Humidity > _NormalHumidity+10.0); END STATE: Ventilate FanMotor= ON; GO TO INIT WHEN DELAY(NOT light, 60.0); END STATE: HumidityTooHigh FanMotor= ON; GO TO INIT WHEN _Humidity < _NormalHumidity; GO TO Pause WHEN DELAY(HumidityTooHigh, 300.0); END STATE: Pause Start_blæser= OFF; GO TO Ventilate WHEN DELAY(Pause,300.0); GO TO INIT WHEN _Humidity < _NormalHumidity; END

HomeControler: kodegenerering SEQUENCE: Ventilation # SEK RESET= Ventilation_Stop; # LOD 13 # RES STATE: INIT # STAI 11 FanMotor= OFF; # LODF # OUT 14 GO TO Ventilate WHEN ON; # LODT # GO 15 END STATE: Ventilate # STA 15 FanMotor= ON; # LODT # OUT 14 END END # ESK

HomeControler: kodegenerering LStatement:= Ident "=" Lexp ";" (Gen OUT Ident.address) Lexp:= Lexp "OR" Lexp (Gen OR) | Lexp "AND" Lexp (Gen AND) | " NOT " Lexp (Gen NOT) | "(" Lexp ")" | Ident (Gen LOD Ident.address) | "ON" (Gen LODT) | "OFF" (Gen LODF) a= b AND (c OR NOT d); LStatement Ident = Lexp ; Lexp AND Lexp Ident( Lexp ) Lexp OR Lexp NOT Lexp Ident LOD ’d’ NOT LOD ’c’ OR LOD ’b’ AND OUT ’a’