Repetisjon. 1 binærtall. INF3110 Programmeringsspråk. Sist så vi ulike notasjoner for syntaks: Jernbanediagrammer. BNF-grammatikker.

Like dokumenter
INF3110 Programmeringsspråk

Dagens tema: Regulære språk og uttrykk

Hva er syntaks? En overskrift i en norsk avis: Dagens tema Grundig repetisjon og utdyping:

Dagens tema Grundig repetisjon og utdyping: Syntaks kontra semantikk

Syntaksanalyse. Skanner (repetisjon) Parsering top-down bottom-up LL(1)-parsering Recursive descent Forutsetninger. IN 211 Programmeringsspråk

Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2)

Litt om kompilering og interpretering. Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2) Syntaks og semantikk

Syntax/semantics - I INF 3110/ /29/2005 1

Språktyper og syntaksanalyseteknikker. Dagens temaer. Hvordan lage en deterministisk automat? Fra jernbanediagram til ID-automat

Syntax/semantics INF 3110/ /8/2004 1

Kap.4, del 2: Top Down Parsering Kap. 5, del 1: Bottom Up Parsing INF5110, 7/ Legger ut en oppgave til kap. 4 (se beskjed).

Dagens Tema: Grammatikker Kap. 3 i K. C. Louden

Kap. 5, Del 3: INF5110, fra 1/3-2011

Kap. 5, del 1: Parsering nedenfra-opp (Bottom up parsing) INF5110. Stein Krogdahl Ifi, UiO

Kap. 5, del 1: Parsering nedenfra-opp (Bottom-up parsering) INF / Stein Krogdahl Ifi, UiO

Kap. 4 del I Top Down Parsering INF5110 v2006. Stein Krogdahl Ifi, UiO

INF 5110, 3. februar Dette foilheftet: Kapittel 3

Hvor er vi nå - kap. 3 (+4,5)? Forenklet skisse av hva en parser gjør PARSER. Kontekstfrie grammatikker og syntaksanalyse (parsering)

Kap.4 del I Top Down Parsering INF5110 v2005. Arne Maus Ifi, UiO

Dagens Tema: Grammatikker Kap. 3 i K. C. Louden

INF5110 V2012 Kapittel 4: Parsering ovenfra-ned

INF januar Forelesninger fremover:

Dagens Tema: Grammatikker

Kap. 4: Ovenfra-ned (top-down) parsering

INF5110 Kap. 5: Parsering nedenfra-og-opp (Bottom-up parsing) 21/ Stein Krogdahl Ifi, UiO. Angående Oblig 1:

Kontekstfrie grammatikker og syntaksanalyse (parsering)

INF5110, onsdag 19. februar, Dagens tema: Parsering ovenfra-ned (top-down)

2/22/2011. Høyre- og venstreavledninger. I dag. Chomsky-normalform (CNF) Chomsky-normalform (CNF) PARSING. Jan Tore Lønning & Stephan Oepen

Dagens Tema: Grammatikker

Oppgaver til INF 5110, kapittel 5

INF5110 V2013 Stoff som i boka står i kap 4, men som er generelt stoff om grammatikker

Kap. 5, del 1: Parsering nedenfra-opp (Bottom-up parsering) 16/ Stein Krogdahl Ifi, UiO

Kap.4 del 2 Top Down Parsering INF5110 v2005. Arne Maus Ifi, UiO

Bottom up parsering (nedenfra-og-opp) Kap. 5 del 1 Intro til parsering nedenfra-og-opp samt LR(0) og SLR(1) grammatikker INF5110 v2006

INF2820 Datalingvistikk V2011. Jan Tore Lønning & Stephan Oepen

Dagens Tema: Grammatikker Kap. 3 i K. C. Louden

Oppgave 2. INF5110 oppgave 2 på eksamen v04 med teori. FirstMengder. Arne Maus Ifi. Eks. 4.9 Beregning av First-mengde. terminal

Hjemmeeksamen 1 i INF3110/4110

Kap. 5, Del 2: INF / (og 2/3 og 3/3)

Kap. 5, del 2 LR(1)- og LALR(1)-grammatikker INF5110 V2008

INF2820 Datalingvistikk V2012

INF2820 Datalingvistikk V2012. Jan Tore Lønning

INF /2, 2015 Kap. 5, Del 2 Stein Krogdahl, Ifi, UiO

2/24/2012. Context-Free Grammars. I dag. Avledning. Eksempel: grammar1 PARSING. Jan Tore Lønning

Kontekstfrie grammatikker og syntaksanalyse (parsering)

INF / Kap. 5, Del 2 Stein Krogdahl, Ifi, UiO

INF2820 Datalingvistikk V2017 Forelesning 1.2 Jan Tore Lønning

Syntaksanalyse. Dagens tema: Språkdiagrammene Jernbanediagrammene er et ypperlig utgangspunkt for å analysere et program: INF2100 INF2100 INF2100

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

Oppgave 2. Eksamen INF2820, 2015, oppgave 2. La gramatikk G være:

Kap. 5 del 2: LR(1)- og LALR(1)-grammatikker INF5110 V2005. Stein Krogdahl, Ifi, UiO

Kap. 5, Del 2: SLR(1), LR(1)- og LALR(1)-grammatikker INF /2-2011

Hva er kompilering? Dagens tema. En kompilator En kompilator leser Minila koden og lager Flok koden.

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet (kalt kildekoden): Hva er kompilering?

Dagens tema: INF2100. Syntaksanalyse. Hva annet gjør en kompilator? Sjekking av navnebruk. Testutskrifter

Kap. 4, del I: Top Down Parsering Pluss oppgave til kapittel 3 INF5110 V2008

Kap. 5, Del 2: SLR(1), LR(1)- og LALR(1)-grammatikker INF5110 V2009

INF2820 Datalingvistikk V Gang Jan Tore Lønning

INF2820 V2017 Oppgavesett 5 Gruppe 21.2

Oppgaver til INF 5110, kapittel 5 Fullt svar på oppgave 5.4, og en del andre oppgaver med svar

Kontekstfrie grammatikker og syntaksanalyse (parsering)

MAT1030 Diskret Matematikk

UNIVERSITETET I OSLO

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Om oppgaveteksten på noe punkt er uklar eller upresis, kan du gjøre egne presiseringer. Formulér i så fall disse tydelig i oppgavebesvarelsen din.

Skanning del I INF /01/15 1

Forelesning 33. Repetisjon. Dag Normann mai Innledning. Kapittel 11

UNIVERSITETET I OSLO

Om syntaks og syntaksanalyse IN 211. Stein Krogdahl. Christian-Emil Ore

MAT1030 Diskret matematikk

Innledning. MAT1030 Diskret matematikk. Kapittel 11. Kapittel 11. Forelesning 33: Repetisjon

Oppgaver til INF 5110, kapittel 4, med svarforslag Gjennomgått torsdag 14. febr Disse foilene er justert 15/2, kl. 11

Oppgaver til INF 5110, kapittel 5, med svarforslag Gjennomgått torsdag 26. febr Dette er versjon fra 28/7

Løsningsforslag. Oppgavesettet består av 9 oppgaver med i alt 20 deloppgaver. Ved sensur vil alle deloppgaver telle omtrent like mye.

Oversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering

Matematikk for IT Eksamen. Løsningsforslag

INF2820 Datalingvistikk V Gang 26.2 Jan Tore Lønning

INF 2820 V2015: Obligatorisk innleveringsoppgave 3

INF2080 Logikk og beregninger

Skanning del I. Kapittel 2 INF 3110/ INF

INF2820 Datalingvistikk V Gang Jan Tore Lønning

Semantisk Analyse del I

UNIVERSITETET I OSLO

Løsningsforslag til ukeoppgaver i INF3110/4110

Oppgave 1. La G1 være grammatikken med hovedsymbol S og følgende regler:

Hovedstoffet i kap 4: 16. Februar Ifi, UiO

UNIVERSITETET I OSLO

Scanning - I Kap. 2. Hva scanneren gjør

MAT1030 Diskret Matematikk

Velkommen til INF5110 Kompilatorteknikk

Statisk semantisk analyse - Kap. 6

Typisk: Kan det være både nøkkelord og navn, så skal det ansees som nøkkelord

Typisk: Kan det være både nøkkelord og navn, så skal det ansees som nøkkelord

Dagens plan. INF3170 Logikk. Induktive definisjoner. Eksempel. Definisjon (Induktiv definisjon) Eksempel

Løsningsforslag til eksamen i IN 211 høsten 2001

Oppgave 1. Spørsmål 1.1 (10%) Gitt det regulære uttrykket: a((bcd)+(cd))*cd

Statisk semantisk analyse - Kap. 6

INF2820 V2017 Oppgavesett 5 arbeidsoppgaver

Løsningsforslag. Emnekode: Emne: Matematikk for IT ITF Eksamenstid: Dato: kl til kl desember Hjelpemidler: Faglærer:

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Transkript:

INF3 Programmeringsspråk INF3 Programmeringsspråk Dagens tema Syntaks (Komp 47, kap 3 (og noe 4)) Repetisjon Regulære språk i klassisk NF Regulære språk i utvidet NF Regulære språk i jerbanediagrammer Regulære språk og automater Fra ikke-deterministisk automat til deterministisk Repetisjon Sist så vi ulike notasjoner for syntaks: Jernbanediagrammer NF-grammatikker Utvidet NF Endelige, deterministiske automater Endelige, ikke-deterministiske automater Vi så også hvordan slike ble brukt til å generere eller godkjenne strenger fra språket /23 Forelesning 7 823 Forelesning 7 823 2/23 INF3 Programmeringsspråk INF3 Programmeringsspråk Inndeling av språk som kan beskrives med NF-grammatikk: Type 3-språk («regulære språk») har ett metasymbol på venstresiden og kun grunnsymboler på høyresiden, eventuelt med et metasymbol til sist binærtall binærtall binærtall Slike språk brukes til å angi søkekriterier (regulære uttrykk) i Perl, Emacs, grep, egrep, awk, mfl Hvorfor brukes regulære språk til søking? Det er enkelt å angi et ganske kraftig søkekriterium 2 Det er lett å lage en meget rask automat som sjekker lovlige uttrykk Type 2-språk («kontekst-frie») har bare ett metasymbol på venstresiden Omtrent alle programmeringsspråk benytter en kontekst-fri grammatikk til å definere språkets syntaks Det gir en klar men lettlest definisjon av syntaksen Det er en basis for å skrive en syntakstolker («parser») Type -språk («kontekst-sensitive») krever at høyresiden er minst like lang som venstresiden Dette gjør det mulig å sjekke navnebindinger og finne typefeil le brukt til Algol-68 men lite siden Type -språk har ingen restriksjoner Disse har bare teoretisk interesse Forelesning 7 823 3/23 Forelesning 7 823 4/23

INF3 Programmeringsspråk INF3 Programmeringsspråk Ulike representasjoner av regulære språk La oss som eksempel se på et regulært språk for binære tall med binærer Lovlige ord er Imidlertid er det ikke lov med ledende -er eller binærpunktum uten foregående eller etterfølgende sifre, så følgende er ikke tillatt: Ulike representasjoner av regulære språk Representasjon : Klassisk NF tall fp ifp ifp ifp ifp fp fp ep ep ep ep (Symbolet betegner et tomt alternativ) Forelesning 7 823 5/23 Forelesning 7 823 6/23 INF3 Programmeringsspråk INF3 Programmeringsspråk Parseringstrær Vi sjekker om et uttrykk er lovlig i følge grammatikken ved å se om det lar seg gjøre å lage et parseringstre: tall ifp ifp fp ep Representasjon 2: Utvidet NF I «utvidet NF» krever vi for et regulært språk at det ikke er metasymboler i høyresiden Denne høyresiden kalles da et regulært uttrykk Definisjonen av tall som regulært uttrykk blir tall [[ [[ ]] ]] [[ [[ ]] + ]]? Notasjon Selv om essensen er den samme, kan notasjonen for regulære uttrykk variere fra ett program til et annet Forelesning 7 823 7/23 Forelesning 7 823 8/23

INF3 Programmeringsspråk INF3 Programmeringsspråk Representasjon 3: Jernbanediagram Siden jernbanediagram bare er en mer visuell form for utvidet NF, kan vi angi en regulær grammatikk med et diagram hvor det ikke finnes metasymboler tall Representasjon 4: Deterministisk automat Herdefinererviendeterministisk automat) hvor tegnene fører oss fra én tilstand til neste Tilstanden merket er starttilstanden, men de med er lovlig slutttilstander Forelesning 7 823 9/23 Forelesning 7 823 /23 INF3 Programmeringsspråk INF3 Programmeringsspråk Hvorfor er deterministisk automater så nyttige? En deterministisk automat kan lett representeres av en matrise som angir neste tilstand Tilstand Slutt 2 3 F 2 F F 4 Ja 3 3 3 4 Ja 4 5 5 F 5 5 5 F Ja F F F F Det er vanlig å innføre en ekstra tilstand «F» for feil Hvordan lage en deterministisk automat? Det finnes en enkelt algoritme for å lage en deterministisk automat Først lages en ikke-deterministisk automat: Forelesning 7 823 /23 Forelesning 7 823 2/23

INF3 Programmeringsspråk INF3 Programmeringsspråk Hvordan lage en ikke-deterministisk automat? Ta utgangspunkt i jernbanediagrammet: tall Hver «pens» blir til en node i den ikke-deterministiske automaten 2 Hvert sluttsymbol blir en merket kant Noen får et tomt symbol () 3 Merk nodene hvor man skal begynne og slutte Hvordan bruke en ikke-deterministisk automat? En ikke-deterministisk automat er dårlig egnet til å sjekke tekst Det kan gå flere kanter med samme merke fra en node Det er vanskelig å gjette når man skal følge en kant med tomt symbol () Imidlertid kan man lage en deterministisk automat utifra en ikke-deterministisk Forelesning 7 823 3/23 Forelesning 7 823 4/23 INF3 Programmeringsspråk INF3 Programmeringsspråk Hvordan lage en deterministiske automater Start med startnodene (Dette er startnoden samt de man kan komme til langs kanter med tomt symbol) Lag en tilstand for disse nodene Fra hver tilstand følg kantene med ulike terminalsymboler (og tomme kanter) Utvide den deterministiske automaten med disse (Teknikken er basert på å lage tilstander som representerer et utvalg av noder i den ikke-deterministiske automaten De utvalgte nodene er sorte) Forelesning 7 823 5/23 Forelesning 7 823 6/23

INF3 Programmeringsspråk INF3 Programmeringsspråk Til slutt har man den ferdige deterministiske automaten Fortsett med dette Vi ser at den er ekvivalent med den vi hadde Forelesning 7 823 7/23 Forelesning 7 823 8/23 Syntaksanalyse INF3 Programmeringsspråk En parser er et program som analyserer en tekst i henhold til en syntaks Det sjekker om data er lovlig, og identifiserer de ulike elementene Alle kompilatorer og interpreter inneholder en parser Skanner Det er vanlig at en parser har en «preprosessor» som kalles en skanner: fil Skanner tokens Parser Den setter sammen tegn til symboler (ofte kalt tokens), for eksmpel EGINSY begin IDENTSY OutText LPARSY ( TETSY "Hallo" RPARSY ) ENDSY end Forelesning 7 823 9/23 Parsering INF3 Programmeringsspråk Parsering vil si å sjekke at en setning (eller et program) er syntaktisk riktig, det vil si å konstruere det tilhørende syntakstreet (I praksis bryr vi oss gjerne ikke om å faktisk konstruere syntakstreet, vi nøyer oss med å vite at vi kunne laget et hvis vi hadde hatt behov for det) Generelt ønsker vi å kunne konstruere treet ved å lese setningen en gang, fra venstre mot høyre Eksempelgrammatikk: uttrykk uttrykk + term term term term navn navn Ut fra denne grammatikken skal vi se på parsering av setningen: navn * navn + navn Forelesning 7 823 2/23

INF3 Programmeringsspråk Top-down parsering Her konstrueres treet ovenfra og ned, det vil si at vi starter med startsymbolet i roten, og så forsøker å avlede den aktuelle setningen ut fra dette: UTTRYKK INF3 Programmeringsspråk ottom-up parsering Her konstruerer vi treet nedenfra og opp Vi starter da med å finne noe i setningen som tilsvarer høyresiden i en produksjon, og reduserer denne delsetningen til det tilhørende metasymbolet Målet er da å redusere seg tilbake til startsymbolet: UTTRYKK navn * navn + navn Forelesning 7 823 2/23 navn * navn + navn Forelesning 7 823 22/23 INF3 Programmeringsspråk LL()-parsering LL()-parsering er en top-down strategi der vi foretar en venstreavledning fra startsymbolet Recursive descent Til hvert metasymbol svarer en metode Metoden tar seg av det ene metasymbolet, men kan kalle andre metoder Når metoden kalles, skal skanneren inneholde første symbol i den aktuelle produksjonen (for syntaktisk korrekt setning) Når metoden er ferdig, skal skanneren inneholde første symbol etter den leste teksten Forelesning 7 823 23/23