Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

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

Lignende præsentationer


Præsentationer af emnet: "10-01-20151 Automater, sprog og compilere Per P. Madsen."— Præsentationens transcript:

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

2 10-01-20152 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.

3 10-01-20153 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.

4 10-01-20154 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.

5 10-01-20155 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

6 10-01-20156 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.

7 10-01-20157 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

8 10-01-20158 Data typer Simple typer: char, int, float,,, Statisk ~ dynamisk Strong ~ weak.

9 10-01-20159 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

10 10-01-201510 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.

11 10-01-201511 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.

12 10-01-201512 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.

13 10-01-201513 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.

14 10-01-201514 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

15 10-01-201515 #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: 5 0000 55 pushl%ebp 6 0001 89E5 movl%esp, %ebp 7 0003 D9051000 flds_b 7 0000 8 0009 D8051000 fadds_c 8 0000 9 000f D91D1000 fstps_a 9 0000 10 0015 5D popl%ebp 11 0016 C3 ret 12 LC3: 13 0017 613D2025.ascii "a= %f\12\0" 13 660A00

16 10-01-201516 #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: 16 001e 55 pushl%ebp 17 001f 89E5 movl%esp, %ebp 18 0021 83EC08 subl$8, %esp 19 0024 83E4F0 andl$-16, %esp 20 0027 B8000000 movl$0, %eax 20 00 21 002c 29C4 subl%eax, %esp 22 002e B8000000 movl$0x40000000, %eax 22 40 23 0033 A3100000 movl%eax, _b 23 00 24 0038 B8000040 movl$0x40400000, %eax 24 40 25 003d A3100000 movl%eax, _c 25 00 26 0042 E8B9FFFF call_viggo 26 FF 27 0047 83EC04 subl$4, %esp 28 004a D9051000 flds_a 28 0000 29 0050 8D6424F8 leal-8(%esp), %esp 30 0054 DD1C24 fstpl(%esp) 31 0057 68170000 pushl$LC3 31 00 32 005c E89FFFFF call_printf 32 FF 33 0061 83C410 addl$16, %esp 34 0064 C9 leave 35 0065 C3 ret

17 10-01-201517 #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,16 41 0066 90909090.ident"GCC: (GNU) 3.3.1" 41 90909090 41 9090 GAS LISTING tmp.s page 2 DEFINED SYMBOLS *ABS*:00000000 tmp.c tmp.s:4.text:00000000 _viggo *COM*:00000010 _b *COM*:00000010 _c *COM*:00000010 _a tmp.s:15.text:0000001e _main *COM*:00000020 _e *COM*:00000010 _ptr UNDEFINED SYMBOLS _printf

18 10-01-201518 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 - - - - - - - - -

19 10-01-201519 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.

20 10-01-201520 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.

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

22 10-01-201522 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.

23 10-01-201523 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.

24 10-01-201524 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.

25 10-01-201525 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

26 10-01-201526 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:

27 10-01-201527 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; }

28 10-01-201528 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:

29 10-01-201529 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:

30 10-01-201530 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:

31 10-01-201531 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.

32 10-01-201532 Flow driven - Event driven Event driven systemer: Grafisk user interface. Kommandofortolkere. Operativsystemer. Kommunikationssystemer...... Event driven. Flow driven.

33 10-01-201533 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.

34 10-01-201534 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.

35 10-01-201535 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.

36 10-01-201536 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).

37 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

38 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){}; };

39 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];

40 10-01-201540 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.

41 10-01-201541 Prolog  Declarativt dvs. hvad og ikke hvordan.  Logisk dvs. regler og facts i en videnbase. Facts Regler Inferensmaskine Videnbase

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

43 10-01-201543 Inferensmaskinen. 1 ?- mand(per). Yes 2 ?- mand(X). X = per Yes 3 ?-

44 10-01-201544 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

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

46 10-01-201546 Beregninger: Fx: foedt(per,1960). alder(X,Y) :- foedt(X,F),Y is 2010 - 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.


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

Lignende præsentationer


Annoncer fra Google