10-01-20151 Automater, sprog og compilere Per P. Madsen.

Slides:



Advertisements
Lignende præsentationer
HUNDE SPEED km h 34,4 HUNDE SPEED km h 34,1 HUNDE SPEED km h 32,8 HUNDE SPEED km h 31,9 HUNDE SPEED km h 31,8 HUNDE SPEED km h 30,9.
Advertisements

Atomer Et programmeret forløb. En måde at lære på.
SharePoint /36 2 General SettingsPermissions and ManagementCommunications Titel, description and navigation Versioning settings Advanced settings.
Hjemmesidekonstruktion Tjekspørgsmål 1.Hvad er et markup-sprog – hvad bruges det til? 2.Hvad er forskellen mellem et markup-sprog og et scriptsprog? 3.Hvad.
Niveauer af abstrakte maskiner
Velkommen til Softwarekonstruktion
Programmeringsparadigmer.
Bolig selskabernes Landsforening– Almene lejeboliger - Maj/Juni Almene lejeboliger - Danmarkspanelet - Maj/Juni 2010.
07 – Kort om OO Introduktion.
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal.
Begreber og Redskaber 1 BRP.
1 Pentium IA-32 Maskinarkitekturen Kort resume – uge 5.
Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
Symbolsk maskinsprog.
Automater, sprog og compilere

Algoritmer og Datastrukturer 1 Gerth Stølting Brodal.
Representations for Path Finding in Planar Environments.
Hvordan man skriver koden.
01 – Java platform for starters. 2 NOEA2009Java-kursus – Java Platform Introduktion til Java Baggrund Hvad er Java? Faciliteter i Java.
Kursus om borger.dk og brugen af digital signatur
Masterpages/Otto Knudsen 1 Master Pages Master Pages i ASP.NET 2.0.
Sproghistorie Syntaks (struktur) Semantik (Indhold)
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.
Pleje og Sundhed Gennemførte719 Inviterede895 Svarprocent80% FREDERICIA KOMMUNE MTU og Psykisk APV 2012 Rapportspecifikationer.
FEN IntroJava AAU1 Opsamling: afvikling af Java-programmer Input fra keyboard og fil Fra en prompt Fra BlueJ Fra NetBeans.
Objektorienteret programmering
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
NOEA/IT - FEN1 Typeparametisering/Genericity Generics i.NET 2 og C#
18 – Java Server Faces. 2 NOEA2009Java-kursus – JSF 2 Web-applikationer - 1 Brugere interagerer med en Web-browser Browseren sender forespørgsler til.
MATLAB Programmering Anders P. Ravn Institut for Datalogi Aalborg Universitet Forår 2005 d = size(s); for k = 1:d(1), for n = 1:d(2), if (s(k,n) < 0) r(k,n)
ETU 2008 | Elevtilfredshedsundersøgelse Erhvervsskolen Nordsjælland HTX (Teknisk Gymnasium) - Hillerød Baseret på 313 besvarelser.
Endelige Automater Simple sprog (regulære sprog) kan beskrives vha. Regulære udtryk. Regulære sprog kan altid parses vha endelige automater. Nondeterministik.
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal Aarhus Universitet.
Compiler/fortolker struktur Mellem- kode Mellemk.- optimering Kode- generering Kode- optimering Lexikalsk- analyse Syntax- analyse Semantik- analyse -
XML Rasmus D. Lehrmann DM Indhold Hvad er XML? XML standarder Hvor bruges XML? XML struktur Træ struktur Element & Attribute Syntaks i XML Stylesheets.
Matematik B 1.
Claus Brabrand, ITU, Denmark Mar 10, 2009EFFECTIVE JAVA Effective Java Presentation Workshop Claus Brabrand [ ] ( “FÅP”: First-year Project.
Buttom-up parsning: Hvor er vi Mellem- kode Kald til Runtimesys. Mellemk.- optimering Kode- generering Kode- optimering Leksikalsk- analyse Syntax- analyse.
MSBuild & Team Build i C#/C++ solutions VSTS ERFA d. 25 November.
1 Tråde 2 Plan Trådbegrebet Synkronisering Koordinering Eksempel: et flertrådet spil.
Delphi og C++ Builder C++ Builder. C++ Historie Sproget blev designet for AT&T af danskeren Bjarne Stoustrup En objektorienteret videreudvikling.
Grunde til at jeg elsker dig
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.
Sproghistorie Syntaks (struktur) Semantik (Indhold)
Fundamentale datastrukturer
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
Heterogene distribuerede middlewareteknologier Web Services og Ice.
Objekter og klasser Rasmus D. Lehrmann DM
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.
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Eksempler på en beregningsprocess… Puslespil ved ombytninger Maximum delsum.
Begreber og Redskaber 1. Plan for kurset Formål –Give et begrebsmæssigt grundlag for programudvikling, samt overblik over udvalg af redskaber og metoder.
Fremstilling af Simple WEB steder [ITPL] Foråret 2004
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.
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.
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.
Indledende Programmering Uge 6 - Efterår 2006
Objektorienteret analyse og design Ó Bennedsen 2001 Design - part Programmering og systemudvikling Lektion 7 Design - part 2.
Grammatikker, sprog og parsing Rasmus D. Lehrmann DM
Fromelle sprog Per P. Madsen Afd. for proceskontrol.
Sproghistorie Syntaks (struktur) Semantik (Indhold)
Programmering.
Præsentationens transcript:

Automater, sprog og compilere Per P. Madsen

Indhold. MM1: Programmeringssprog - compiler. MM2: Formelgramatik og syntaksbeskrivelsesformer. MM3: Endelige automater. MM4: LEX - et værktøj til genkendelse af regulære sprog. MM5: Top-down parsning (Predictive recursive decent ). MM6: Bottom up parsing og YACC. MM7: Back-end. MM8: Sprog typer: Imperative sprog, logiske sprog mfl. MM9: Antlr MM10: Eksamems opgave.

Sprog Et sprog er defineret ved sprogets syntaks og semantik. Sprogets opbygning ’’syntaks’’ er givet ved grammatik. Sprogets mening ’’semantik’’ er giver ved forståelsen af de enkelte sætninger.

Sprog og grammatik Et sprog L(G) er mængden af sætninger afledt af grammatikken G. Grammatik er en 4-tuple: G={N, ,P,S}. Hvor: N er et sæt af non-terminale symboler  er et sæt af terminale symboler P er et sæt af produktioner S er sætnings- eller startsymbolet.

Grammatiske regler start -> program ( ident ) globalvar begin statementlist end ident -> letter tegenlist letter -> a | b | c | d | | å | A | B | | Å tegnlist -> tegn tegnlist | e tegn -> letter | digit digit -> 0 | 1 | 2 | 3 | | 9 globalvar -> type identlist ; type -> char | int | float identlist -> ident | ident, identlist statementlist -> statement statementlist | e statement -> ident = exp ; exp -> exp + exp | exp - exp | exp * exp | exp / exp | ident; program(p1) char a1, bbb7y; begin kk= a1 + jj - d7 * jj; jj= kk * u7; end

Syntaks Syntaks: Læren om hvordan de enkelte ord sammensættes. Et syntaktisk korrekt program/sprog er et sprog bestående af sætminger afledt af den grammatik der definere sproget.

Programmeringssprog. Programmeringssprog er ofte givet ved en række egenskaber: Data typer Data strukturer og evt klasser Instruktion og kontrol flow Design filosofi Compiler og/eller fortolker

Data typer Simple typer: char, int, float,,, Statisk ~ dynamisk Strong ~ weak.

Programmeringssprog. Programmeringssprog er ofte givet ved en række egenskaber: Data typer Data strukturer og evt klasser Instruktion og kontrol flow Design filosofi Compiler og/eller fortolker

Design filosofi Imperativ programmering - Declarativ programmering. Struktueret programmering - Ustruktueret programmering. Flow-driven programmering - Event-driven programmering. Scalar programmering - Array programmering. Objekt-orienteret programmering. Logisk programmering.

Compiler og/eller fortolker Compiler Source sprogTarget sprog Fortolker Source sprog Kald til runtime-/ operativ-systemet Assembler, mellemkode fx Java.class, andet sprog fx C.

Source sprog Computersprogs anvendelse: Tekst baseret opsætning af programmer. Gemme status evt. på læsbar form. Dataformidling. XML er et dedikeret sprog til denne opgave. Opbygning af grafik. PostScript, SVG, VRML/X3D, osv. Tekstbehandling fx: LaTeX, DocBooK, HTML. Programmering af maskiner til dedikerede anvendelser. Easy-to-use lag oven på standard software. Alm. programmering C, C++, Java, Prolog. Osv.

Target sprog Target sprog: Skal kunne vidrebearbejdes af målsystemet. –Assembler til målsystemet. –Mellem kode hvis det kan vidrebearbejdes af målsystemet –Fx: C hvis der til målsystemet findes en C compiler. –Kode til en virtuelmaskine.

Target sprog Tre adr.instruktioner fx: Mellemkode. Res= opr1 Operation opr2 Alm CPU. MOVE src,dist Simple risc CPU. MOVWF dist SUBWF adr Stak maskine. Fx JVM Load opr1 Load opr2 Sub Out Res

#include float a,b,c; float e[5]; int *ptr; void viggo() { a= b+c; } int main() { b=2; c=3; viggo(); printf("a= %f\n",a); } 1.file"tmp.c" 2.section.text 3.globl _viggo 4 _viggo: pushl%ebp E5 movl%esp, %ebp D flds_b D fadds_c f D91D1000 fstps_a D popl%ebp C3 ret 12 LC3: D2025.ascii "a= %f\12\0" A00

#include float a,b,c; float e[5]; int *ptr; void viggo() { a= b+c; } int main() { b=2; c=3; viggo(); printf("a= %f\n”,a); } 14.globl _main 15 _main: e 55 pushl%ebp f 89E5 movl%esp, %ebp EC08 subl$8, %esp E4F0 andl$-16, %esp B movl$0, %eax c 29C4 subl%eax, %esp e B movl$0x , %eax A movl%eax, _b B movl$0x , %eax d A movl%eax, _c E8B9FFFF call_viggo 26 FF EC04 subl$4, %esp a D flds_a D6424F8 leal-8(%esp), %esp DD1C24 fstpl(%esp) pushl$LC c E89FFFFF call_printf 32 FF C410 addl$16, %esp C9 leave C3 ret

#include float a,b,c; float e[5]; int *ptr; void viggo() { a= b+c; } int main() { b=2; c=3; viggo(); printf("a= %f\n",a); } 36.comm _a,16 37.comm _b,16 38.comm _c,16 39.comm _e,32 40.comm _ptr, ident"GCC: (GNU) 3.3.1" GAS LISTING tmp.s page 2 DEFINED SYMBOLS *ABS*: tmp.c tmp.s:4.text: _viggo *COM*: _b *COM*: _c *COM*: _a tmp.s:15.text: e _main *COM*: _e *COM*: _ptr UNDEFINED SYMBOLS _printf

Compiler/fortolker struktur Mellem- kode Kald til Runtimesys. Mellemk.- optimering Kode- generering Kode- optimering Leksikalsk- analyse Syntax- analyse Semantik- analyse if viggo == 3 then.... If-token Ident-token IdentX(type=Int) Gen(Comp, *Viggo,3) Gen(jump if not, adress) Compiler Fortolker Front end Back end

Programmeringsparadigmer. Programmeringsparadigme: Den stil/metode, som programmerings sproget og/eller programmøren anvender. Eksempler på paradigmer:  Imperativ programmering - Declarativ programmering.  Struktueret programmering - Ustruktueret programmering.  Flow-driven programmering - Event-driven programmering.  Scalar programmering - Array programmering.  Objekt-orienteret programmering.  Logisk programmering.

Programmeringsparadigmer. Programmeringsparadigme: Den stil/metode, som programmerings sproget og/eller programmøren anvender. Eksempler på paradigmer:  Imperativ programmering - Declarativ programmering.  Struktueret programmering - Ustruktueret programmering.  Flow-driven programmering - Event-driven programmering.  Scalar programmering - Array programmering.  Objekt-orienteret programmering.  Logisk programmering.

Imperativ programmering Imperativ - Bydende Gør dit. Gør dat.. for (i=0;i<10;i++) { k= k+i; }

Declarativ programmering. Hvad og ikke hvordan. Fx HTML beskriver, hvad der skal vises. Hvordan, dvs hvilken algoritme, der skal anvendes defineres ikke. Det er HTML fortolkeren, der afgør hvordan siden skal vises. Dvs.  Deklarativ pro. beskriver, hvad et samlet system er opbygget af.  Imperativ pro. indeholder en algoritme for opbygning af systemet.

Programmeringsparadigmer. Eksempler på paradigmer:  Imperativ programmering - Declarativ programmering.  Struktueret programmering - Ustruktueret programmering.  Flow-driven programmering - Event-driven programmering.  Scalar programmering - Array programmering.  Objekt-orienteret programmering.  Logisk programmering.

Struktureret programmering.  Sproget skal hjælpe os med at forstå hvad det laver: Selvdokumenterende.  Struktur og effektivitet er ikke modsætninger.  Ofte vil strukturerede programmer være mere effektive end ustrukturerede da de er nemmere at vedligeholde og modificere.

Struktureret programmering. Sprog, hvor forløbet gennem programmet "tydeligt" fremgår af den syntaktiske struktur af programmet. "Entry" if (per.hoejde > 1.80) printf(”per er heoj\n”); else printf(”per er lav\n”); "Exit" Et forløb fremgår "tydeligt" når single-entry/single-exit er overholdt

If if (a==2) {b=2;} else {b=1;} moveq.l #2,d2 cmp.l -4(a6),d2 jbne.L2 moveq.l #2,d2 move.l d2,-8(a6) jbra.L3.L2: moveq.l #1,d2 move.l d2,-8(a6).L3:

Dangling else if (a) if (b) c=1; else c=2; er det: if (a) if (b) c=1; else c=2; eller: if (a) { if (b) c=1; else c=2; }

for for (a=0; a<10; a++) {b= a;} clr.l -4(a6).L4: moveq.l #9,d2 cmp.l -4(a6),d2 jbge.L7 jbra.L5.L7: move.l -4(a6),-8(a6).L6: addq.l #1,-4(a6) jbra.L4.L5:

while while (a > 5) {--a;}.L8: moveq.l #5,d2 cmp.l -4(a6),d2 jblt.L10 jbra.L9.L10: subq.l #1,-4(a6) jbra.L8.L9:

switch switch (a) { case 0: {b= 1;} break; case 1: {b= 2;} break; case 2: {b= 3;} break; default: {b= 0;}; } move.l -4(a6),d0 moveq.l #1,d2 cmp.l d0,d2 jbeq.L13 moveq.l #1,d2 cmp.l d0,d2 jblt.L17 tst.l d0 jbeq.L12 jbra.L15.L17: moveq.l #2,d2 cmp.l d0,d2 jbeq.L14 jbra.L15.L12: moveq.l #1,d2 move.l d2,-8(a6) jbra.L11.L13: moveq.l #2,d2 move.l d2,-8(a6) jbra.L11.L14: moveq.l #3,d2 move.l d2,-8(a6) jbra.L11.L15: clr.l -8(a6).L11:

Programmeringsparadigmer. Eksempler på paradigmer:  Imperativ programmering - Declarativ programmering.  Struktueret programmering - Ustruktueret programmering.  Flow-driven programmering - Event-driven programmering.  Scalar programmering - Array programmering.  Objekt-orienteret programmering.  Logisk programmering.

Flow driven - Event driven Event driven systemer: Grafisk user interface. Kommandofortolkere. Operativsystemer. Kommunikationssystemer Event driven. Flow driven.

Programmeringsparadigmer. Eksempler på paradigmer:  Imperativ programmering - Declarativ programmering.  Struktueret programmering - Ustruktueret programmering.  Flow-driven programmering - Event-driven programmering.  Scalar programmering - Array programmering.  Objekt-orienteret programmering.  Logisk programmering.

Objekt-orienteret programmering. Hoved Ide’. Software består af en samling velafgrænsede komponenter med bestemte egenskaber og funktionalitet og tilstand. Disse komponenter kaldes objekter. Objekter kan samarbejde vha. at sende beskeder til andre objekter (Kalde metoder i andre objekter) og processer data.

Objekt-orienteret programmering. Objekter er beskyttede ved hjælp af et veldefineret scope for de indeholdte data og metoder. public, private, protected Fordele ved OOP. –Nemmere vedligehold og genbrug af software. –Ofte nemmere at udvikle strukturen af programmet.

Objekt-orienteret programmering. En klasse er en definition af et objekt. Et objekt er en instans af en klasse. En attribut er noget data i et objekt. En metode er en funktion i et objekt. Nedarvning er når en ny klasse dannes udfra en anden klasse og derved arver denne klasses egenskaber (Attributter og metoder).

Classediagram Bil Farve : string Årgang : int motor: Motor Start() Tank op() Navn Attributter Metoder Personbil Type: string Lastbil Nettolast : int Motor Effekt: float AntCyl: int SætGSpjæld()... 1 UML

C++ class Bil{ string farve; int aargang; motor Moter1; public: void start(); void tankop(float liter); Bil(string,int); }; Bil::Bil(string fa,int aar) { farve= fa; aargang= aar; } class Personbil: public Bil{ string type; public: Personbil(string f, int a): Bil(f,a){}; Personbil(void): Bil("blaa",1900){}; };

C++ Personbil kadet("gul",1986); Personbil *fiatPtr= new Personbil("blaa",1965); Personbil *fordPtr= new Personbil; int *intarray = new int[10]; Personbil *bilpark= new Personbil[10];

Programmeringsparadigmer. Eksempler på paradigmer:  Imperativ programmering - Declarativ programmering.  Struktueret programmering - Ustruktueret programmering.  Flow-driven programmering - Event-driven programmering.  Scalar programmering - Array programmering.  Objekt-orienteret programmering.  Logisk programmering.

Prolog  Declarativt dvs. hvad og ikke hvordan.  Logisk dvs. regler og facts i en videnbase. Facts Regler Inferensmaskine Videnbase

Facts. Prædikat(objektliste) Fx: mand(per). alder(per,49). far(per,kaj). vejr(aalborg,april,regn). write(’En tekst’). consult(’fil.pl’). halt.

Inferensmaskinen. 1 ?- mand(per). Yes 2 ?- mand(X). X = per Yes 3 ?-

Konklusion :- betingelser Fx: soen(X,Y) :- dreng(Y),far(X,Y). soen(X,Y) :- dreng(Y),mor(X,Y). Regler IfAnd soen(X,Y) :- dreng(Y),far(X,Y);dreng(Y),mor(X,Y). Or

Inferensmaskinen. 4 ?- soen(per,X). X = mads X = kaj X = asger X = peter No 5 ?- ; ; ; ;

Beregninger: Fx: foedt(per,1960). alder(X,Y) :- foedt(X,F),Y is F. Regler = fak(0,1). fak(X,Y) :- X1 is X - 1, fak(X1,Z), Y is Z*X. div(X,Y,Res):- Y=\=0,Res is X/Y;Res is 0.