Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

VPG/Otto Knudsen1 VPR - Repetition Trådning Distribueret Programmering Sprogteori Grafer.

Lignende præsentationer


Præsentationer af emnet: "VPG/Otto Knudsen1 VPR - Repetition Trådning Distribueret Programmering Sprogteori Grafer."— Præsentationens transcript:

1 VPG/Otto Knudsen1 VPR - Repetition Trådning Distribueret Programmering Sprogteori Grafer

2 VPG/Otto Knudsen2 Sproghistorie Syntaks (struktur) Semantik (Indhold)

3 VPG/Otto Knudsen3 Sproghistorie Sprog Lavniveau (maskinkode) Højniveau (C#, Java, Pascal, osv.) Maskinuafhængig kode, som omsættes til maskinkode via kompilering, fortolkning eller en mellemting af disse

4 VPG/Otto Knudsen4 Sprogteori – Kompiler Kompiler Kildekode –> Kompiler –> Binær kode

5 VPG/Otto Knudsen5 Sprogteori – Kompiler Kompilertyper Single Pass Multi Pass Load and go Debugging Optimering

6 VPG/Otto Knudsen6 Sprogteori – Kompiler Kompiler Analyse (nedbryde) Leksikalsk analyse Scanning, Tokenizing Syntaksanalyse – Parsing Hierarkisk analyse, Semantisk analyse Syntese (sammensætte)

7 VPG/Otto Knudsen7 Sprogteori – EBNF BNF Backus-Naur-Form EBNF Extended Backus-Naur-Form Udvidet med { } og [ ] Findes i flere varianter

8 VPG/Otto Knudsen8 Sprogteori - Analyse Leksikalsk analyse Opsplitning af input i brikker Syntaksanalyse – Parsing Samling af brikker til sætninger, som opfylder en velbeskrevet struktur (mønster)

9 VPG/Otto Knudsen9 EBNF – Elementer En EBNF-grammatik består af Terminaler Nonterminaler Startsymbol Produktionsregler

10 VPG/Otto Knudsen10 EBNF – Produktionsregler Produktionsregler Afsluttes med punktum | betegner valgmuligheder { } betegner nul eller flere gentagelser [ ] betegner nul eller én forekomst ( ) anvendes til at samle enheder

11 VPG/Otto Knudsen11 EBNF – Eksempel Medlemsliste-EBNF medlemsliste = medlem {medlem}. medlem = navn fødselsår [kategori] ";". navn = bogstav {bogstav}. fødselsår = ciffer, ciffer, ciffer, ciffer. kategori = "junior"|"senior". bogstav = "a"|...|"å"|"A"...|"Å". ciffer = "0"|...|"9"|.

12 VPG/Otto Knudsen12 EBNF EBNF-grammatikken Syntaktiske regler Beskriver, hvordan ”byggeklodserne” sammensættes Semantiske regler Beskriver hvilke sammensætninger, der giver mening

13 VPG/Otto Knudsen13 EBNF Semantiske krav i EBNF-grammatikken Kan komplicere i unødig grad Undgå derfor: at inddrage semantiske krav, hvis det går ud over overskueligheden at rense helt for semantiske krav, hvis det går ud over forståeligheden Balancér overskuelighed og forståelighed!

14 VPG/Otto Knudsen14 Syntaksstyret indlæsning Kontrol af, hvorvidt inddata overholder de syntaktiske krav beskrevet i EBNF- grammatikken 2 metoder Regelstyret indlæsning Tabelstyret indlæsning Single Symbol Lookahead

15 VPG/Otto Knudsen15 Syntaksstyret indlæsning Metode: Indlæsning af brikker Haves: Abstrakt beskrivelse af, hvorledes inddata skal se ud (EBNF) Konkret inddata-strøm Mål: Kontrol af overensstemmelse mellem konkret inddata og abstrakt beskrivelse (EBNF) Strategi: Konkretisér EBNF’en og abstrahér over inddata

16 VPG/Otto Knudsen16 Syntaksstyret indlæsning Begreber Brik: Udeleligt sprogelement. Følge af tegn, som har selvstændig betydning i forhold til inddata Leksem: Den originale streng, som indeholder en brik. Det er som regel det længste leksem, der afgør en brik

17 VPG/Otto Knudsen17 Syntaksstyret indlæsning Konkretisering af EBNF Fjern alle produktionsregler, hvor en brik findes på venstresiden Fjern derved overflødiggjorte produktionsregler Indsæt de valgte brikker på pladserne svarende til terminalerne

18 VPG/Otto Knudsen18 EBNF – Eksempel 1 Medlemsliste-EBNF medlemsliste = medlem {medlem}. medlem = navn fødselsår [kategori] ";". navn = bogstav {bogstav}. fødselsår = ciffer, ciffer, ciffer, ciffer. kategori = "junior"|"senior". bogstav = "a"|...|"å"|"A"...|"Å". ciffer = "0"|...|"9"|. Konkretiseret EBNF medlemsliste = medlem {medlem}. medlem = navn fødselsår [kategori] semikolon. kategori = junior|senior. Valgte brikker semikolon, navn, fødselsår, junior, senior, andet, slut

19 VPG/Otto Knudsen19 EBNF – Eksempel 2 Talfølge-EBNF talfølge = tal {"," tal}. tal = [fortegn] ciffer {ciffer} ["." ciffer {ciffer}]. ciffer = "0" |... | "9". fortegn = "+" | "-". Konkretiseret EBNF talfølge = tal {komma tal}. tal = [fortegn] heltal [punktum heltal]. fortegn = plus | minus. Valgte brikker komma, heltal, punktum, plus, minus, andet, slut

20 VPG/Otto Knudsen20 EBNF – Produktionsregler Typer af produktionsregler Rekursiv Regel, der beskrives vha. sig selv Regulær Regel med gentagelser { } Simpel Alle andre regler

21 VPG/Otto Knudsen21 EBNF-grammatikker Typer af EBNF-grammatikker Direkte rekursiv Gramatik, der indeholder en rekursiv produktionsregel Indirekte rekursiv Grammatik, der indeholder en produktionsregel, der anvender en non-terminal, der andetsteds direkte eller indirekte refererer til reglen Regulær Ej-rekursiv grammatik, der indeholder regulære produktionsregler Simpel Alle andre grammatikker

22 VPG/Otto Knudsen22 Regelstyret indlæsning Betegnelser f, f 1, f 2, …, f n betegner en følge af brikker og non-terminaler n betegner en non-terminal b betegner en brik s betegner en non-terminal eller en brik  betegner den tomme mængde  betegner den tomme følge

23 VPG/Otto Knudsen23 Regelstyret indlæsning first Mængden af brikker, som følgen kan starte med follow Mængden af brikker, som kan efterfølge en given non-terminal eller brik

24 VPG/Otto Knudsen24 first first(b) = {b} first(  ) =  n = f 1 f 2 first(n) = first(f 1 f 2 ) = first(f 1 ), f ≠  first(n) = first(f 1 f 2 ) = first(f 1 )  first(f 2 ) n = f 1 |f 2 first(n) = first(f 1 |f 2 ) = first(f 1 )  first(f 2 ) n 1 = [f 1 ] first(n 1 ) = first(  |f 1 ) = first(f 1 ) n 2 = [f 1 ] first(n 2 ) = first(  |f 1 n 2 ) = first(f 1 )

25 VPG/Otto Knudsen25 first Buttom-up-strategi first(navn) = {navn}... osv. med alle brikkerne first(kategori) = first(junior|senior) = first(junior)  first(senior) = {junior, senior} first(medlem) = first(navn fødselsår [kategori] semikolon) = first(navn) = {navn} first(medlemsliste) = first(medlem {medlem}) = first(medlem) = {navn}

26 VPG/Otto Knudsen26 follow follow(startsymbol) =  n = f 1 sf 2 n = f 1 [s]f 2 n = f 1 {s}f 2 follow(s) indeholder first(f 2 ) follow(s) indeholder follow(n), hvis f 2 kan være  n = f 1 {s} follow(s) indeholder first(s)

27 VPG/Otto Knudsen27 follow Top-down-strategi follow(medlemsliste) =  follow(medlem) = first({medlem}) = first(medlem) = {navn} follow(medlem) = follow(medlemsliste) =  follow(medlem) = {navn} follow(navn) = first(fødselsår) = {fødselsår} follow(fødselsår) = first([kategori] semikolon) = {junior, senior, semikolon} follow(kategori) = first(semikolon) = {semikolon} follow(semikolon) = follow(medlem) = {navn} follow(junior) = follow(kategori) = {semikolon} follow(senior) = follow(kategori) = {semikolon}

28 VPG/Otto Knudsen28 Eksempel – first / follow Sportsklub-EBNF sportsklub = medlem {medlem}. medlem = navn junior semikolon | navn senior semikolon. Brikker: navn, junior, senior, semikolon Bottom-up: first(navn) = {navn} first(junior) = {junior} first(senior) = {senior} first(semikolon) = {semikolon} first(medlem) = {navn} first(sportsklub) = {navn} Top-down: follow(sportsklub) = Ø follow(medlem) = {navn} follow(navn) = {junior, senior} follow(junior) = {semikolon} follow(senior) = {semikolon} follow(semikolon) = {navn}

29 VPG/Otto Knudsen29 Krav til EBNF-grammatikken Krav 1 Lad n = f1|f2 så må der gælde, at first(f1)  first(f2) =  En EBNF opfylder krav 1, hvis alle produktionsregler med valgmuligheder opfylder krav 1

30 VPG/Otto Knudsen30 Krav til EBNF-grammatikken Krav 2 Hvis n kan være den tomme følge  så må der gælde, at first(n)  follow(n) =  En EBNF opfylder krav 2, hvis alle produktionsregler, der kan være tomme opfylder krav 2

31 VPG/Otto Knudsen31 Krav til EBNF-grammatikken Hvis krav 1 og 2 ikke er opfyldte Omskriv EBNF’en vha. venstrefaktorisering Lav ny EBNF

32 VPG/Otto Knudsen32 Venstrefaktorisering Givet n = ff 1 | ff 2 |... | ff n | andet (valgmulighed med fælles præfix f ) Erstat n med følgende: n = f tmp | andet tmp = f 1 | f 2 |... | f n Gentag indtil alle produktionsregler er renset for valgmuligheder med fælles præfix Bemærk, at produktionsregler med { } og [ ] implicit indeholder en valgmulighed

33 VPG/Otto Knudsen33 Regelstyret indlæsning Baserer sig på 7 regler: Erklær en metode for hver produktionsregel/non-terminal [ ] medfører en if-sætning { } medfører en while-sætning | medfører en if-elseif-konstruktion Kan håndtere rekursive grammatikker

34 VPG/Otto Knudsen34 Tabelstyret indlæsning Tilstandstabel Indeholder tilstandsovergange Tilstandsovergange beskriver, hvilke tilstande der efterfølger den aktuelle tilstand ved givent inddata Aktionstabel Indeholder aktioner Aktioner beskriver, hvad programmet skal udføre i en given tilstand ved givent inddata


Download ppt "VPG/Otto Knudsen1 VPR - Repetition Trådning Distribueret Programmering Sprogteori Grafer."

Lignende præsentationer


Annoncer fra Google