1 / 27

Sproghistorie

Sproghistorie. Syntaks (struktur) Semantik (Indhold). 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. Sprogteori – Kompiler. Kompiler

jeroen
Télécharger la présentation

Sproghistorie

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. 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. Sprogteori – Kompiler • Kompiler • Kildekode –> Kompiler –> Binær kode

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

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

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

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

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

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

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

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

  12. 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!

  13. Syntaksstyret indlæsning • 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"

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

  15. Syntaksstyret indlæsning • Begreber • Brik: 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.

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

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

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

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

  20. EBNF-grammatikker • Typer af EBNF-grammatikker • Direkte rekursivGrammatik, 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

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

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

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

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

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

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

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