1 / 34

VPR - Repetition

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

parley
Télécharger la présentation

VPR - Repetition

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. VPR - Repetition • Trådning • Distribueret Programmering • Sprogteori • Grafer

  2. Sproghistorie • Syntaks (struktur) • Semantik (Indhold)

  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

  4. Sprogteori – Kompiler • Kompiler • Kildekode –> Kompiler –> Binær kode

  5. Sprogteori – Kompiler • Kompilertyper • Single Pass • Multi Pass • Load and go • Debugging • Optimering

  6. Sprogteori – Kompiler • Kompiler • Analyse (nedbryde) • Leksikalsk analyseScanning, Tokenizing • Syntaksanalyse– ParsingHierarkisk analyse, • Semantisk analyse • Syntese (sammensætte)

  7. Sprogteori – EBNF • BNF • Backus-Naur-Form • EBNF • Extended Backus-Naur-FormUdvidet med { } og [ ] • Findes i flere varianter

  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)

  9. EBNF – Elementer • En EBNF-grammatik består af • Terminaler • Nonterminaler • Startsymbol • Produktionsregler

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

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

  12. EBNF • EBNF-grammatikken • Syntaktiske reglerBeskriver, hvordan ”byggeklodserne” sammensættes • Semantiske reglerBeskriver hvilke sammensætninger, der giver mening

  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!

  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

  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

  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

  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

  18. 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 = navnfødselsår [kategori] semikolon. kategori = junior|senior. Valgte brikker semikolon, navn, fødselsår, junior, senior, andet, slut

  19. 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 [punktumheltal]. fortegn = plus | minus. Valgte brikker komma, heltal, punktum, plus, minus, andet, slut

  20. EBNF – Produktionsregler • Typer af produktionsregler • RekursivRegel, der beskrives vha. sig selv • RegulærRegel med gentagelser { } • SimpelAlle andre regler

  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

  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

  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

  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)

  25. 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. follow • follow(startsymbol) =  • n = f1sf2n = f1[s]f2n = 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)

  27. 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. 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. 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. 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. Krav til EBNF-grammatikken • Hvis krav 1 og 2 ikke er opfyldte • Omskriv EBNF’en vha. venstrefaktorisering • Lav ny EBNF

  32. Venstrefaktorisering • Givet n = ff1 | ff2| ... | ffn | andet(valgmulighed medfælles præfix f) • Erstat n medfø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

  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

  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

More Related