Upload
parley
View
56
Download
0
Tags:
Embed Size (px)
DESCRIPTION
VPR - Repetition. Trådning Distribueret Programmering Sprogteori Grafer. Sproghistorie. Syntaks (struktur) Semantik (Indhold). Sproghistorie. Sprog Lavniveau (maskinkode) - PowerPoint PPT Presentation
Citation preview
VPG/Otto Knudsen 1
VPR - Repetition
Trådning Distribueret Programmering Sprogteori Grafer
VPG/Otto Knudsen 2
Sproghistorie
Syntaks (struktur) Semantik (Indhold)
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
VPG/Otto Knudsen 4
Sprogteori – Kompiler
Kompiler Kildekode –> Kompiler –> Binær kode
VPG/Otto Knudsen 5
Sprogteori – Kompiler
Kompilertyper Single Pass Multi Pass Load and go Debugging Optimering
VPG/Otto Knudsen 6
Sprogteori – Kompiler
Kompiler Analyse (nedbryde)
Leksikalsk analyseScanning, Tokenizing
Syntaksanalyse – ParsingHierarkisk analyse,
Semantisk analyse Syntese (sammensætte)
VPG/Otto Knudsen 7
Sprogteori – EBNF
BNF Backus-Naur-Form
EBNF Extended Backus-Naur-Form
Udvidet med { } og [ ] Findes i flere varianter
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)
VPG/Otto Knudsen 9
EBNF – Elementer
En EBNF-grammatik består af Terminaler Nonterminaler Startsymbol Produktionsregler
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
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"|.
VPG/Otto Knudsen 12
EBNF
EBNF-grammatikken Syntaktiske regler
Beskriver, hvordan ”byggeklodserne” sammensættes
Semantiske reglerBeskriver hvilke sammensætninger, der giver mening
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!
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
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
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
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
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
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
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
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
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
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
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)
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}
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)
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}
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}
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
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
VPG/Otto Knudsen 31
Krav til EBNF-grammatikken
Hvis krav 1 og 2 ikke er opfyldte Omskriv EBNF’en vha.
venstrefaktorisering Lav ny EBNF
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
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
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