Automater, sprog og compilere - PowerPoint PPT Presentation

1 / 46
About This Presentation
Title:

Automater, sprog og compilere

Description:

Automater, sprog og compilere Per P. Madsen * * – PowerPoint PPT presentation

Number of Views:77
Avg rating:3.0/5.0
Slides: 47
Provided by: PPM1
Category:

less

Transcript and Presenter's Notes

Title: Automater, sprog og compilere


1
Automater, sprog og compilere
  • Per P. Madsen

2
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
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
Sprog og grammatik
  • Et sprog L(G) er mængden af sætninger afledt af
    grammatikken G.
  • Grammatik er en 4-tuple
  • GN,S,P,S.
  • Hvor N er et sæt af non-terminale symboler
  • S er et sæt af terminale symboler
  • P er et sæt af produktioner
  • S er sætnings- eller startsymbolet.

5
Grammatiske regler
  • start -gt   program ( ident ) globalvar begin
    statementlist end
  • ident -gt                 letter tegenlist
  • letter -gt                 a b c d
    ........ å A B ...... Å
  • tegnlist -gt             tegn tegnlist e
  • tegn -gt                  letter digit
  • digit -gt                  0 1 2 3 ......
    9
  • globalvar -gt         type identlist
  • type -gt                  char int float
  • identlist -gt            ident ident , identlist
  • statementlist -gt   statement statementlist e
  • statement -gt        ident exp
  • exp -gt                   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
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
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
Data typer
  • Simple typer char, int, float,,,
  • Statisk dynamisk
  • Strong weak.

9
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
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
Compiler og/eller fortolker
Source sprog
Target sprog
Compiler
Assembler, mellemkode fx Java.class, andet sprog
fx C.
12
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
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
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
include ltstdio.hgt float a,b,c float e5 int
ptr void viggo() a bc int main()
b2 c3 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
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
include ltstdio.hgt float a,b,c float e5 int
ptr void viggo() a bc int main()
b2 c3 viggo() printf("a f\n,a)
17
include ltstdio.hgt float a,b,c float e5 int
ptr void viggo() a bc int main()
b2 c3 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
ABS00000000 tmp.c
tmp.s4 .text00000000 _viggo
COM00000010 _b
COM00000010 _c
COM00000010 _a
tmp.s15 .text0000001e _main
COM00000020 _e
COM00000010 _ptr UNDEFINED
SYMBOLS _printf
18
Compiler/fortolker struktur
If-token Ident-token ......
IdentX(typeInt)
if viggo 3 then ....
Gen(Comp, Viggo,3) Gen(jump if not, adress)
- - - - - - - Front end - - - - - - - - -
Mellem- kode
- - - - - Compiler - - - - - -
Kald til Runtimesys.
- Fortolker -
- - - - - - - Back end - - - - - - - - -
19
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
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
Imperativ programmering
Imperativ - Bydende Gør dit. Gør dat. . . .
for (i0ilt10i) k ki
22
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
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
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
Struktureret programmering.
Sprog, hvor forløbet gennem programmet
"tydeligt" fremgår af den syntaktiske struktur af
programmet.
Et forløb fremgår "tydeligt" når
single-entry/single-exit er overholdt
"Entry" if (per.hoejde gt 1.80) printf(per er
heoj\n) else printf(per er lav\n) "Exit"
26
If
if (a2) b2 else b1
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
Dangling else
if (a) if (b) c1 else c2 er det if (a)
if (b) c1 else c2 eller if (a) if (b)
c1 else c2
28
for
for (a0 alt10 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
while
while (a gt 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
switch
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
switch (a) case 0 b 1 break
case 1 b 2 break case 2 b 3
break default b 0
31
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
Flow driven - Event driven
Event driven.
Flow driven.
Event driven systemer Grafisk user
interface. Kommandofortolkere. Operativsystemer. K
ommunikationssystemer. .....
33
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
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
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
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
UML
Navn
Bil
Motor
Farve string Årgang int motor Motor
Attributter
Effekt float AntCyl int
1
SætGSpjæld() ...
Start() Tank op()
Metoder
Personbil
Lastbil
Type string
Nettolast int
38
C
  • class Bil
  • string farve
  • int aargang
  • motor Moter1
  • public
  • void start()
  • void tankop(float liter)
  • Bil(string,int)
  • BilBil(string fa,int aar)
  • farve fa
  • aargang aar
  • class Personbil public Bil
  • string type
  • public
  • Personbil(string f, int a) Bil(f,a)

39
C
  • Personbil kadet("gul",1986)
  • Personbil fiatPtr new Personbil("blaa",1965)
  • Personbil fordPtr new Personbil
  • int intarray new int10
  • Personbil bilpark new Personbil10

40
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
Prolog
  • Declarativt dvs. hvad og ikke hvordan.
  • Logisk dvs. regler og facts i en videnbase.

Videnbase
Inferensmaskine
Facts Regler
42
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
Inferensmaskinen.
mand(per). Yes 2 ?-
1 ?-
mand(X). X per Yes 3 ?-
44
Regler
  • Konklusion - betingelser
  • Fx
  • soen(X,Y) - dreng(Y),far(X,Y).
  • soen(X,Y) - dreng(Y),mor(X,Y).

If
And
45
Inferensmaskinen.
  • 4 ?- soen(per,X).
  • X mads
  • X kaj
  • X asger
  • X peter
  • No
  • 5 ?-





46
Regler
  • Beregninger
  • Fx
  • foedt(per,1960).
  • alder(X,Y) - foedt(X,F),Y is 2010 - F.


fak(0,1). fak(X,Y) - X1 is X - 1, fak(X1,Z), Y
is ZX. div(X,Y,Res)- Y\0,Res is X/YRes is
0.
Write a Comment
User Comments (0)
About PowerShow.com