Sproghistorie Syntaks struktur Semantik Indhold Sproghistorie Sprog Lavniveau

  • Slides: 27
Download presentation
Sproghistorie • Syntaks (struktur) • Semantik (Indhold)

Sproghistorie • Syntaks (struktur) • Semantik (Indhold)

Sproghistorie • Sprog – Lavniveau (maskinkode) – Højniveau (C#, Java, Pascal, osv. ) Maskinuafhængig

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

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

Sprogteori – Kompiler • Kompilertyper – Single Pass – Multi Pass – Load and

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

Sprogteori – Kompiler • Kompiler – Analyse (nedbryde) • Leksikalsk analyse Scanning, Tokenizing •

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

Sprogteori – EBNF • BNF – Backus-Naur-Form • EBNF – Extended Backus-Naur-Form Udvidet med

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

Sprogteori - Analyse • Leksikalsk analyse – Opsplitning af input i brikker • Syntaksanalyse

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)

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

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

EBNF – Produktionsregler • Produktionsregler – Afsluttes med punktum – | betegner valgmuligheder –

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

EBNF – Eksempel Medlemsliste-EBNF medlemsliste medlem navn fødselsår kategori bogstav ciffer = = =

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

EBNF • EBNF-grammatikken – Syntaktiske regler Beskriver, hvordan ”byggeklodserne” sammensættes … – Semantiske regler

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

EBNF • Semantiske krav i EBNF-grammatikken – Kan komplicere i unødig grad • Undgå

EBNF • Semantiske krav i EBNF-grammatikken – Kan komplicere i unødig grad • Undgå derfor: – at inddrage semantiske krav, hvis det går ud overskueligheden – at rense helt for semantiske krav, hvis det går ud over forståeligheden • Balancér overskuelighed og forståelighed!

Syntaksstyret indlæsning • Syntaksstyret indlæsning – Kontrol af, hvorvidt inddata overholder de syntaktiske krav

Syntaksstyret indlæsning • Syntaksstyret indlæsning – Kontrol af, hvorvidt inddata overholder de syntaktiske krav beskrevet i EBNFgrammatikken – 3 metoder • Regelstyret indlæsning • Tabelstyret indlæsning • State Pattern – "Single Symbol Lookahead"

Syntaksstyret indlæsning • Metode: – Indlæsning af brikker • Haves: – Abstrakt beskrivelse af,

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

Syntaksstyret indlæsning • Begreber – Brik: Udeleligt sprogelement. Følge af tegn, som har selvstændig

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.

Syntaksstyret indlæsning • Konkretisering af EBNF – Fjern alle produktionsregler, hvor en brik findes

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

EBNF – Eksempel 1 Medlemsliste-EBNF medlemsliste medlem navn fødselsår kategori bogstav ciffer = =

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

EBNF – Eksempel 2 Talfølge-EBNF talfølge tal ciffer fortegn = = tal {", "

EBNF – Eksempel 2 Talfølge-EBNF talfølge tal ciffer fortegn = = tal {", " tal}. [fortegn] ciffer {ciffer} [". " ciffer {ciffer}]. "0" |. . . | "9". "+" | "-". Konkretiseret EBNF talfølge = tal {komma tal}. tal = [fortegn] heltal [punktum heltal]. fortegn = plus | minus. Valgte brikker komma, heltal, punktum, plus, minus, andet, slut

EBNF – Produktionsregler • Typer af produktionsregler – Rekursiv Regel, der beskrives vha. sig

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

EBNF-grammatikker • Typer af EBNF-grammatikker – Direkte rekursiv Grammatik, der indeholder en rekursiv produktionsregel

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

Krav til EBNF-grammatikken • Krav 1 Lad n = f 1|f 2 så må

Krav til EBNF-grammatikken • Krav 1 Lad n = f 1|f 2 så må der gælde, at first(f 1) first(f 2) = • En EBNF opfylder krav 1, hvis alle produktionsregler med valgmuligheder opfylder krav 1

Krav til EBNF-grammatikken • Krav 2 Hvis n kan være den tomme følge så

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

Krav til EBNF-grammatikken • Hvis krav 1 og 2 ikke er opfyldte – Omskriv

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

Venstrefaktorisering • Givet n = ff 1 | ff 2|. . . | ffn

Venstrefaktorisering • Givet n = ff 1 | ff 2|. . . | ffn | andet (valgmulighed med fælles præfix f) • Erstat n med følgende: n = f tmp | andet tmp = f 1 | f 2 |. . . | fn • Gentag indtil alle produktionsregler er renset for valgmuligheder med fælles præfix • Bemærk, at produktionsregler med { } og [ ] implicit indeholder en valgmulighed

Regelstyret indlæsning • Baserer sig på 7 regler: – Erklær en metode for hver

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

Tabelstyret indlæsning • Tabelstyret indlæsning – Gør brug af tilstandstabel – Gør brug af

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

Tabelstyret indlæsning • Tilstandstabel – Indeholder tilstandsovergange – Tilstandsovergange beskriver, hvilke tilstande der efterfølger

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