Sproghistorie Syntaks (struktur) Semantik (Indhold)

Slides:



Advertisements
Lignende præsentationer
Vektorer i planen Regneregler Definition Begreber Definition af:
Advertisements

1 Problemkompleksitet 2 Problemers kompleksitet En ineffektiv algoritme: køretiden vokser eksponentielt med input- størrelsen Et problem, der ikke kan.
Begreber og Redskaber 1 BRP.
1 Parsing. 2 Mål: Et program til indlæsning og beregning af aritmetiske udtryk Eksempel: Beregn (3*5 + 4/2) - 1 Løs et lettere problem først: Læs en streng.
Oversættelse af Java-programmer JavaBytecode javac Normalt oversættes Java-programmer til bytecode, som fortolkes af en JVM (Java Virtual Machine). Java.
Automater, sprog og compilere
Design af brugerflader8.1 Kursusgang 8 Oversigt: Sidste kursusgang Design ­ Design og beskrivelse ­ En simpel notation Eksempel på design af dialogen ­
Validering af data (Access, del 7)
Reduktion AM 2009.
FEN Diskret matematik/Seminar 3 - proofs 1 Beviser Et bevis er en argumentation, som overbeviser om, at en påstand er sand, påstanden kaldes.
VPG/Otto Knudsen1 VPR - Repetition Trådning Distribueret Programmering Sprogteori Grafer.
1 Bevisteknikker. 2 Bevisteknikker (relevant både ved design og verifikation) Teorem: Der findes uendeligt mange primtal Bevis: Antag at der findes et.
GP5, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 5 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
1 UNION-FIND. 2 inddata: en følge af heltalspar (p, q); betydning: p er “forbundet med” q uddata: intet, hvis p og q er forbundet, ellers (p, q) Eksempel.
GP 10, 7/ Grundlæggende programmering Efterår 2001 Forelæsning 10 onsdag 7/ kl. 9:15 – 12:00.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
FEN Rekursion og induktion1 Induktion og (især) rekursion Mange begreber defineres ud fra en basis og så en gentagen anvendelse af et antal regler.
Operationer på relationer
Endelige Automater Simple sprog (regulære sprog) kan beskrives vha. Regulære udtryk. Regulære sprog kan altid parses vha endelige automater. Nondeterministik.
Multi-vejs hobe med ekstra bytes Foredrag: Claus Jensen Projektmedlemmer: Jyrki Katajainen, Fabio Vitale, Claus Jensen.
SDP - Repetition Sockets Trådning Delegater Remoting Sprogteori
1 Unified Expression Language Copyright © Lund & Bendsen A/S Unified Expression Language.
Begreber og Redskaber 2. Plan for idag Noget om bestanddelene i et programmeringssprog Syntaksbeskrivelse af java Næste gang: –Binære tal –Repræsentation.
XML Rasmus D. Lehrmann DM Indhold Hvad er XML? XML standarder Hvor bruges XML? XML struktur Træ struktur Element & Attribute Syntaks i XML Stylesheets.
Buttom-up parsning: Hvor er vi Mellem- kode Kald til Runtimesys. Mellemk.- optimering Kode- generering Kode- optimering Leksikalsk- analyse Syntax- analyse.
VPG/Otto Knudsen1 VPR - Repetition Trådning Distribueret Programmering Sprogteori Grafer.
FEN Sprog1 Lidt om sprog Definition: Et sprog over et endeligt alfabet  (sigma) er en mængde af strenge dannet af tegn fra . Eksempel: Lad.
Begreber og Redskaber 1. Emner i kurset Om sprog og sprogbeskrivelse Repræsentation af tal i maskinen –Heltal, negative tal, kommatal, logiske værdier.
Sprog og grammatik Et sprog L(G) er mængden af sætninger afledt af grammatikken G. Grammatik er en 4-tupel: G={N, ,P,S}. Hvor: N er et sæt af non-terminale.
Sproghistorie Syntaks (struktur) Semantik (Indhold)
1 JavaScript Lektion 6: Repetition i JavaScript Math TIDY Litteratur: JST lektion 10.
FEN KbP/seminar 1: Specifikationer/Notationen Q 1 Kontraktbaseret programmering: Seminar 1 Om specifikationer Algoritmenotationen Q.
1 Design, analyse og verifikation. 2 Design Bevisteknikker Design ved hjælp at matematisk induktion Analyse O-notation Logaritmer Binær søgning Verifikation.
Objekter og klasser Rasmus D. Lehrmann DM
Interaktionsformer En begrebsmæssig model kan understøttes med forskellige interaktionsformer Interaktionsformen fastlægger centrale egenskaber: Hvordan.
Begreber og Redskaber 1. Rettelse til sidst Sidst vrøvlede jeg lidt om algoritmer: Ordet stammer fra Abu Ja’far Mohammed ibn Musa al- Khowarizm der i.
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Begreber og Redskaber 7. Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering.
Begreber og Redskaber 1. Programmeringssprog Sprog = mængde af sætninger ?
Begreber og Redskaber 1 BRP.
Grundlæggende XML og XML- baserede teknologier til textmodellering DTD 2. kursusgang (7/ )
Paradigmer i Programmering 4. Resten af ML -Læse fra/skrive til filer -Interaktive programmer -Separat oversættelse -Parsergeneratorer.
JavaCC Top-down (Recursive descent). Mest populære mht Java. Regulær grammatik og Context-free grammatik i en fil. Tillader EBNF: (..)*, (..)+ og (..)?
Intro Siden sidst: evaluering på opgaver og virtuel kursus.
Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner findEn findAlle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed.
DWDK – øvelsestime 3 CSS – let the fun begin!!. Tilgængelige slides Disse slides ligger på mit public drev
Semantik, model teori Et (formalt) sprog har ingen mening indtil man interpreterer dets forskellige (korrekte) udtryksformer (vff’s) mhp. en bestemt situation.
Tekst filer Tekstfiler opbygges normalt af linier, hvor disse ikke behøver at være samme længde. Når man skal arbejde med tekstfiler, ønsker man metoder.
Den relationelle model
DAIMIIntroducerende objektorienteret programmering4C.1 Systemdesign Design med flere klasser, En kaffeautomat.
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
DAIMIIntroducerende objektorienteret programmering12A.1 Moduler Packages i Java.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
DAIMIIntroducerende objektorienteret programmering2C.1 Syntaksbeskrivelse Syntaksdiagrammer og EBNF-notation.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
Indledende Programmering Uge 6 - Efterår 2006
 Bærbak & Caspersen, 2000Introducerende objektorienteret programmering2B.1 Syntaksbeskrivelse Syntaksdiagrammer og EBNF-notation.
Syntaksbeskrivelse Syntaksdiagrammer og EBNF-notation.
Grammatikker, sprog og parsing Rasmus D. Lehrmann DM
Fromelle sprog Per P. Madsen Afd. for proceskontrol.
Regulær udtryk Lad T være det terminale alfabet. og T* angive et sæt af strenge over T ex: T={a,b,c} så er: aaa, bab,bbbbbbaaaa er indeholdt i T* Et sporg.
Abstraktioner.
Embedded SW – C & picoBlaze
Sproghistorie Syntaks (struktur) Semantik (Indhold)
Algoritmer og Datastrukturer 1
Algoritmer og Datastrukturer 1
Programmering.
Forelæsning Uge 4 – Torsdag
Præsentationens transcript:

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

Regulære udtryk kan bruges til at beskrive simple sprog

Eksempel på regulære udtryk (sprog)

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

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

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

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

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

Eksempel på sprog beskrevet med BNF-grammatik

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

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

Grammatikker kan opdeles efter de krav der stilles til en parser

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

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

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

Kompiler opdeles ofte i facer

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

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

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)

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

EBNF – 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 {medlem}. medlem = navn foedselsaar [kategori] ";". navn = bogstav {bogstav}. foedselsaar = ciffer ciffer ciffer ciffer. kategori = "junior"|"senior". bogstav = "a"|...|"å"|"A"...|"Å". ciffer = "0"|...|"9"|.

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

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

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

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

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

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

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

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

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)

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}

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)

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}

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}

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

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

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

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

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 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 den aktuelle tilstand ved givent inddata Aktionstabel Indeholder aktioner Aktioner beskriver, hvad programmet skal udføre i en given tilstand ved givent inddata