vpr - repetition

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

Upload: parley

Post on 15-Jan-2016

56 views

Category:

Documents


0 download

DESCRIPTION

VPR - Repetition. Trådning Distribueret Programmering Sprogteori Grafer. Sproghistorie. Syntaks (struktur) Semantik (Indhold). Sproghistorie. Sprog Lavniveau (maskinkode) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: VPR - Repetition

VPG/Otto Knudsen 1

VPR - Repetition

Trådning Distribueret Programmering Sprogteori Grafer

Page 2: VPR - Repetition

VPG/Otto Knudsen 2

Sproghistorie

Syntaks (struktur) Semantik (Indhold)

Page 3: VPR - Repetition

VPG/Otto Knudsen 3

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

Page 4: VPR - Repetition

VPG/Otto Knudsen 4

Sprogteori – Kompiler

Kompiler Kildekode –> Kompiler –> Binær kode

Page 5: VPR - Repetition

VPG/Otto Knudsen 5

Sprogteori – Kompiler

Kompilertyper Single Pass Multi Pass Load and go Debugging Optimering

Page 6: VPR - Repetition

VPG/Otto Knudsen 6

Sprogteori – Kompiler

Kompiler Analyse (nedbryde)

Leksikalsk analyseScanning, Tokenizing

Syntaksanalyse – ParsingHierarkisk analyse,

Semantisk analyse Syntese (sammensætte)

Page 7: VPR - Repetition

VPG/Otto Knudsen 7

Sprogteori – EBNF

BNF Backus-Naur-Form

EBNF Extended Backus-Naur-Form

Udvidet med { } og [ ] Findes i flere varianter

Page 8: VPR - Repetition

VPG/Otto Knudsen 8

Sprogteori - Analyse

Leksikalsk analyse Opsplitning af input i brikker

Syntaksanalyse – Parsing Samling af brikker til sætninger, som

opfylder en velbeskrevet struktur (mønster)

Page 9: VPR - Repetition

VPG/Otto Knudsen 9

EBNF – Elementer

En EBNF-grammatik består af Terminaler Nonterminaler Startsymbol Produktionsregler

Page 10: VPR - Repetition

VPG/Otto Knudsen 10

EBNF – Produktionsregler

Produktionsregler Afsluttes med punktum | betegner valgmuligheder { } betegner nul eller flere

gentagelser [ ] betegner nul eller én forekomst ( ) anvendes til at samle enheder

Page 11: VPR - Repetition

VPG/Otto Knudsen 11

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"|.

Page 12: VPR - Repetition

VPG/Otto Knudsen 12

EBNF

EBNF-grammatikken Syntaktiske regler

Beskriver, hvordan ”byggeklodserne” sammensættes

Semantiske reglerBeskriver hvilke sammensætninger, der giver mening

Page 13: VPR - Repetition

VPG/Otto Knudsen 13

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!

Page 14: VPR - Repetition

VPG/Otto Knudsen 14

Syntaksstyret indlæsning

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

Page 15: VPR - Repetition

VPG/Otto Knudsen 15

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

Page 16: VPR - Repetition

VPG/Otto Knudsen 16

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

Page 17: VPR - Repetition

VPG/Otto Knudsen 17

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

Page 18: VPR - Repetition

VPG/Otto Knudsen 18

EBNF – Eksempel 1Medlemsliste-EBNFmedlemsliste = 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 EBNFmedlemsliste = medlem {medlem}. medlem = navn fødselsår [kategori] semikolon. kategori = junior|senior.

Valgte brikkersemikolon, navn, fødselsår, junior, senior, andet, slut

Page 19: VPR - Repetition

VPG/Otto Knudsen 19

EBNF – Eksempel 2Talfølge-EBNFtalfølge = tal {"," tal}. tal = [fortegn] ciffer {ciffer} ["." ciffer {ciffer}]. ciffer = "0" | ... | "9". fortegn = "+" | "-".

Konkretiseret EBNFtalfølge = tal {komma tal}. tal = [fortegn] heltal [punktum heltal]. fortegn = plus | minus.

Valgte brikkerkomma, heltal, punktum, plus, minus, andet, slut

Page 20: VPR - Repetition

VPG/Otto Knudsen 20

EBNF – Produktionsregler

Typer af produktionsregler Rekursiv

Regel, der beskrives vha. sig selv Regulær

Regel med gentagelser { } Simpel

Alle andre regler

Page 21: VPR - Repetition

VPG/Otto Knudsen 21

EBNF-grammatikker Typer af EBNF-grammatikker

Direkte rekursivGramatik, der indeholder en rekursiv produktionsregel

Indirekte rekursivGrammatik, der indeholder en produktionsregel, der anvender en non-terminal, der andetsteds direkte eller indirekte refererer til reglen

RegulærEj-rekursiv grammatik, der indeholder regulære produktionsregler

SimpelAlle andre grammatikker

Page 22: VPR - Repetition

VPG/Otto Knudsen 22

Regelstyret indlæsning

Betegnelser f, f1, f2, … , fn 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

Page 23: VPR - Repetition

VPG/Otto Knudsen 23

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

Page 24: VPR - Repetition

VPG/Otto Knudsen 24

first

first(b) = {b} first() =

n = f1f2 first(n) = first(f1f2) = first(f1), f ≠ first(n) = first(f1f2) = first(f1) first(f2)

n = f1|f2 first(n) = first(f1|f2) = first(f1) first(f2)

n1 = [f1] first(n1) = first(|f1) = first(f1)

n2 = [f1] first(n2) = first(|f1n2) = first(f1)

Page 25: VPR - Repetition

VPG/Otto Knudsen 25

firstButtom-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}

Page 26: VPR - Repetition

VPG/Otto Knudsen 26

follow

follow(startsymbol) =

n = f1sf2

n = f1[s]f2

n = f1{s}f2 follow(s) indeholder first(f2) follow(s) indeholder follow(n), hvis f2 kan være

n = f1{s} follow(s) indeholder first(s)

Page 27: VPR - Repetition

VPG/Otto Knudsen 27

followTop-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}

Page 28: VPR - Repetition

VPG/Otto Knudsen 28

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}

Page 29: VPR - Repetition

VPG/Otto Knudsen 29

Krav til EBNF-grammatikken Krav 1

Ladn = 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

Page 30: VPR - Repetition

VPG/Otto Knudsen 30

Krav til EBNF-grammatikken Krav 2

Hvisn 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

Page 31: VPR - Repetition

VPG/Otto Knudsen 31

Krav til EBNF-grammatikken

Hvis krav 1 og 2 ikke er opfyldte Omskriv EBNF’en vha.

venstrefaktorisering Lav ny EBNF

Page 32: VPR - Repetition

VPG/Otto Knudsen 32

Venstrefaktorisering Givet

n = ff1 | ff2| ... | ffn | andet(valgmulighed med fælles præfix f)

Erstat n med følgende:n = f tmp | andettmp = f1 | f2 | ... | fn

Gentag indtil alle produktionsregler er renset for valgmuligheder med fælles præfix

Bemærk, at produktionsregler med { } og [ ] implicit indeholder en valgmulighed

Page 33: VPR - Repetition

VPG/Otto Knudsen 33

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

Page 34: VPR - Repetition

VPG/Otto Knudsen 34

Tabelstyret indlæsning 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