Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Sproghistorie Syntaks (struktur) Semantik (Indhold)

Lignende præsentationer


Præsentationer af emnet: "Sproghistorie Syntaks (struktur) Semantik (Indhold)"— Præsentationens transcript:

1 Sproghistorie Syntaks (struktur) Semantik (Indhold)

2 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

3 Regulære udtryk kan bruges til at beskrive simple sprog

4 Eksempel på regulære udtryk (sprog)

5 Regulære sprog er kun en delmængde af de sprog, der kan beskrives med regulære udtryk

6 Regulære sprog kan genkendes af en DFA (deterministisk final automat)

7 Med BNF/EBNF kan man beskrive grammatik for mere komplicerede sprogs

8 Med BNF/EBNF kan man beskrive grammatik for mere komplicerede sprogs

9 Med BNF/EBNF kan man beskrive grammatik for mere komplicerede sprogs

10 Eksempel på sprog beskrevet med BNF-grammatik

11 Parse tree for if ( x == y) x = z; else x = y;

12 Et problem er at en grammatik kan være flertydig i udledningen af et parse-træ

13 Grammatikker kan opdeles efter de krav der stilles til en parser

14 LALR(1) kræver mindre memory end LR(1), hvilket betyder meget

15 Sprogteori – Kompiler Kompiler
Kildekode –> Kompiler –> Binær kode

16 Sprogteori – Kompiler Kompilertyper Single Pass Multi Pass Load and go
Debugging Optimering

17 Kompiler opdeles ofte i facer

18 Sprogteori – Kompiler Kompiler Analyse (nedbryde)
Leksikalsk analyse Scanning, Tokenizing Syntaksanalyse – Parsing Hierarkisk analyse Semantisk analyse Syntese (sammensætte)

19 Sprogteori – EBNF BNF EBNF Backus-Naur-Form
Extended Backus-Naur-Form Udvidet med { } og [ ] Findes i flere varianter

20 Sprogteori - Analyse Leksikalsk analyse Syntaksanalyse – Parsing
Opsplitning af input i brikker Syntaksanalyse – Parsing Sammensætning af brikker til sætninger, som opfylder en velbeskrevet struktur (mønster)

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

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

23 EBNF – Eksempel Medlemsliste-EBNF medlemsliste = medlem {medlem}.
medlem = navn foedselsaar [kategori] ";". navn = bogstav {bogstav}. foedselsaar = ciffer ciffer ciffer ciffer. kategori = "junior"|"senior". bogstav = "a"|...|"å"|"A"...|"Å". ciffer = "0"|...|"9"|.

24 EBNF EBNF-grammatikken
Syntaktiske regler Beskriver, hvordan ”byggeklodserne” sammensættes … Semantiske regler Beskriver hvilke sammensætninger, der giver mening …

25 EBNF Semantiske krav i EBNF-grammatikken Undgå derfor:
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!

26 Syntaksstyret indlæsning
Kontrol af, hvorvidt inddata overholder de syntaktiske krav beskrevet i EBNF-grammatikken 3 metoder Regelstyret indlæsning Tabelstyret indlæsning State Pattern "Single Symbol Lookahead” LL(1) Left-to-right parse, Leftmost-derivation

27 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

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

29 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

30 EBNF – Eksempel 1 Medlemsliste-EBNF Konkretiseret EBNF Valgte brikker
medlemsliste = medlem {medlem}. medlem = navn foedselsaar [kategori] ";". navn = bogstav {bogstav}. foedselsaar = ciffer ciffer ciffer ciffer. kategori = "junior"|"senior". bogstav = "a"|...|"å"|"A"...|"Å". ciffer = "0"|...|"9"|. Konkretiseret EBNF medlem = navn foedselsaar [kategori] semikolon. kategori = junior|senior. Valgte brikker semikolon, navn, foedselsaar, junior, senior, andet, slut

31 EBNF – Eksempel 2 Talfølge-EBNF Konkretiseret EBNF Valgte brikker
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

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

33 EBNF-grammatikker Typer af EBNF-grammatikker
Direkte rekursiv Grammatik, 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

34 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

35 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

36 first n = f1f2 n = f1|f2 n1 = [f1] n2 = {f1} first(b) = {b}
first(n) = first(f1f2) = first(f1), f1 ≠  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)

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

38 follow n = f1sf2 n = f1[s]f2 n = f1{s}f2 n = f1{s}
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)

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

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

41 Krav til EBNF-grammatikken
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

42 Krav til EBNF-grammatikken
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

43 Krav til EBNF-grammatikken
Hvis krav 1 og 2 ikke er opfyldte Omskriv EBNF’en vha. venstrefaktorisering Lav ny EBNF …

44 Venstrefaktorisering
Givet n = ff1 | ff2| ... | ffn | andet (valgmulighed med fælles præfix f) Erstat n med følgende: n = f tmp | andet tmp = 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

45 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

46 Tabelstyret indlæsning
Gør brug af tilstandstabel Gør brug af aktionstabel Gør brug af "Single Symbol Lookahead" Krav 1 og 2 stilles til grammatikkerne Kan ikke håndtere rekursive grammatikker

47 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 "Sproghistorie Syntaks (struktur) Semantik (Indhold)"

Lignende præsentationer


Annoncer fra Google