Dagens tema: Regulære språk og uttrykk

Like dokumenter
Dagens tema Grundig repetisjon og utdyping: Syntaks kontra semantikk

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

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

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

Syntax/semantics INF 3110/ /8/2004 1

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

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

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

INF januar Forelesninger fremover:

Kontekstfrie grammatikker og syntaksanalyse (parsering)

UNIVERSITETET I OSLO

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

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

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

MAT1030 Forelesning 22

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

Introduksjon. MAT1030 Diskret Matematikk. Introduksjon. En graf. Forelesning 22: Grafteori. Roger Antonsen

Introduksjon. MAT1030 Diskret matematikk. Søkealgoritmer for grafer. En graf

MAT1030 Diskret matematikk

Kontekstfrie grammatikker og syntaksanalyse (parsering)

Hjemmeeksamen 1 i INF3110/4110

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

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

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

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

Anatomien til en kompilator - I

INF2820 Datalingvistikk V2016. Jan Tore Lønning

INF2820 Datalingvistikk V2017 Forelesning 1.2 Jan Tore Lønning

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

MAT1030 Forelesning 22

Kombinatorikk. MAT1030 Diskret Matematikk. Oppsummering av regneprinsipper

MAT1030 Diskret Matematikk

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

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

Kontekstfrie grammatikker og syntaksanalyse (parsering)

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

Skanning del I. Kapittel 2 INF 3110/ INF

Skanning del I INF /01/15 1

INF2820 Datalingvistikk V2012. Jan Tore Lønning

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

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

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

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

INF INF1820. Arne Skjærholt. Terza lezione INF1820. Arne Skjærholt. Terza lezione

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

1/26/2012 LITT PYTHON. INF2820 Datalingvistikk V2012. Hvorfor Pyhton. Python syntaks. Python er objektorientert. Python datatyper.

INF2080 Logikk og beregninger

Løsningsforslag til ukeoppgaver i INF3110/4110

MAT1030 Diskret matematikk

MAT1030 Diskret matematikk

INF2820 Datalingvistikk V forelesning, 30.1 Jan Tore Lønning

KONTROLLSTRUKTURER. MAT1030 Diskret matematikk. Kontrollstrukturer. Kontrollstrukturer. Eksempel (Ubegrenset while-løkke)

Norsk informatikkolympiade runde

INF1820: Introduksjon til språk-og kommunikasjonsteknologi

INF1820: Introduksjon til språk-og kommunikasjonsteknologi

Norsk informatikkolympiade runde. Sponset av. Uke 46, 2017

Eksamensoppgave i TMA4140 Diskret matematikk

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

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

Følger Sipsers bok tett både i stoff og oppgaver.

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

MAT1030 Forelesning 2

MAT1030 Diskret matematikk

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

Transkript:

IN 2 Programmeringsspråk Dagens tema: Regulære språk og uttrykk Ulike typer språk (Kompendium 47: 23) Hvorfor er regulære uttrykk så interessante? Ulike representasjoner av regulære språk (Kompendium 47: 3) Endelige tilstandsmaskiner (FSM-er) Deterministiske FSM-er (Kompendium 47: 32) Ikke-deterministiske FSM-er (Kompendium 47: 3) (Kompendium 47: Om syntaks og syntaksanalyse av Stein Krogdahl og Christian-Emil Ore er til salgs i bokhandelen) Ark av 8 Forelesning 999

Ulike type språk IN 2 Programmeringsspråk Det er vanlig å dele språk som kan beskrives med en BNF inn i følgende grupper: Type3-språk («regulære språk») har ett metasymbol på venstresiden og kun terminalsymboler på høyresiden, eventuelt med et metasymbol til sist binary number binary number binary number Slike språk brukes til å angi søkekriterier i Perl, Emacs, egrep og andre 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 Forelesning 999 Ark 2 av 8

IN 2 Programmeringsspråk Type2-språk («kontekst-frie») har bare et 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 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 Ble brukt til Algol-68 men lite siden Type-språk har ingen restriksjoner Disse har bare teoretisk interesse Forelesning 999 Ark 3 av 8

IN 2 Programmeringsspråk Ulike representasjon 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: Representasjon : Klassisk BNF tall fp ifp ifp ifp ifp fp fp ε ep ep ep ep (I «klassisk BNF» er det kun lov med terminalsymboler, metasymboler, «ε» og ) Forelesning 999 Ark 4 av 8

IN 2 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 Forelesning 999 Ark 5 av 8

IN 2 Programmeringsspråk Representasjon 2: Utvidet BNF I «utvidet BNF» er det i tillegg til «klassisk BNF» lov til å benytte *, +,? og metaparenteser ([[]]) Her 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 I Perl skriver vi if (/^( ( )*)(\( )+)?$/) { print "OK: "; } else { print "Feil: "; } Forelesning 999 Ark 6 av 8

IN 2 Programmeringsspråk Representasjon 3: Jernbanediagram Siden jernbanediagram bare er en mer visuell form for utvidet BNF, kan vi angi en regulær grammatikk med et diagram hvor det ikke finnes metasymboler tall Forelesning 999 Ark 7 av 8

IN 2 Programmeringsspråk Hvordan brukes et regulært uttrykk? Når vi skal sjekke om en tekst passer i henhold til et regulært uttrykk, kan vi benytte en parser Imidlertid finnes en bedre mulighet: FSM-er Forelesning 999 Ark 8 av 8

IN 2 Programmeringsspråk Representasjon 4: Deterministisk FSM Her definerer vi en FSM (også kalt automat) hvor tegnene fører oss fra én tilstand til neste B X X X Tilstanden merket «B» er starttilstanden, men de med «X» er lovlig slutttilstander Forelesning 999 Ark 9 av 8

IN 2 Programmeringsspråk Hvorfor er FSM-ersånyttige? En FSM 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 Forelesning 999 Ark av 8

IN 2 Programmeringsspråk Søkealgoritme for FSM Det finnes en enkel og meget rask søkealgoritme for en FSM lagret i matrisen re: stat := ; while flere tegn igjen do begin c:= neste tegn ; stat := re(stat,c); end while; if slutt(stat) then match funnet else ingen match ; Dette skjer altså i raske søkeprogrammer: Lag en FSM utifra det regulære uttrykket Bruk søkeløkken over til å sjekke data mot det regulære uttrykket Forelesning 999 Ark av 8

IN 2 Programmeringsspråk Hvordan lage en deterministisk FSM? Det finnes en enkelt algoritme for å lage en deterministisk FSM Først lages en ikke-deterministiske FSM: B ε ε ε ε X Forelesning 999 Ark 2 av 8

IN 2 Programmeringsspråk Hvordan lage en ikke-deterministisk FSM? Ta utgangspunkt i jernbanediagrammet: tall Hver «pens» blir til en node i den ikke-deterministiske FSM-en 2 Hvert sluttsymbol blir en merket kant Noen får et tomt symbol (ε) 3 Merk nodene hvor man skal begynne og slutte B ε ε ε ε X Forelesning 999 Ark 3 av 8

IN 2 Programmeringsspråk Hvordan bruke en ikke-deterministisk FSM? En ikke-deterministisk FSM 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 FSM utifra en ikke-deterministisk Forelesning 999 Ark 4 av 8

IN 2 Programmeringsspråk Hvordan lage en deterministiske FSM-er Start med startnodene (Dette er startnoden samt de man kan komme til langs kanter med tomt symbol) Lag en tilstand for disse nodene (Teknikken er basert på å lage tilstander som representerer et utvalg av noder i den ikke-deterministiske FSM-en De utvalgte nodene er sorte) Forelesning 999 Ark 5 av 8

IN 2 Programmeringsspråk Fra hver tilstand følg kantene med ulike terminalsymboler (og tomme kanter) Utvide den deterministiske FSM-en med disse Forelesning 999 Ark 6 av 8

IN 2 Programmeringsspråk Fortsett med dette Forelesning 999 Ark 7 av 8

IN 2 Programmeringsspråk Tilsluttharmandenferdige deterministiske FSM-en Vi ser at den er ekvivalent med den vi hadde på ark 9: B X X X Forelesning 999 Ark 8 av 8