Skanning del I INF /01/15 1

Like dokumenter
Skanning del I. Kapittel 2 INF 3110/ INF

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

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

Anatomien til en kompilator - I

Anatomien til en kompilator - I

INF2080 Logikk og beregninger

INF2820 Datalingvistikk V2017 Forelesning 1.2 Jan Tore Lønning

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

INF2820 Datalingvistikk V2017 Forelesning 2, 23.1 Jan Tore Lønning

INF2820 Datalingvistikk V2016. Jan Tore Lønning

INF2820 Datalingvistikk V2016. Jan Tore Lønning

INF2820 Datalingvistikk V2015. Jan Tore Lønning

INF2820 Datalingvistikk V2015. Jan Tore Lønning

INF2820 Datalingvistikk V2014. Jan Tore Lønning

INF2820 Datalingvistikk V2012. Jan Tore Lønning

INF2820 Datalingvistikk V2014. Jan Tore Lønning

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

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

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

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

INF2820 Datalingvistikk V2016. Jan Tore Lønning

INF2820 Datalingvistikk V2015. Jan Tore Lønning

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

Beskrivelse av programmeringsspråket Compila15 INF Kompilatorteknikk Våren 2015

MAT1030 Plenumsregning 1

Plenumsregning 1. MAT1030 Diskret Matematikk. Repetisjon: Algoritmer og pseudokode. Velkommen til plenumsregning for MAT1030

MAT1030 Diskret Matematikk

INF2820 Datalingvistikk V2018 Forelesning 3, 29. jan. Jan Tore Lønning

INF3110 Programmeringsspråk

Plenumsregning 1. Kapittel 1. Roger Antonsen januar Velkommen til plenumsregning for MAT1030. Repetisjon: Algoritmer og pseudokode

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

Velkommen til plenumsregning for MAT1030. MAT1030 Diskret matematikk. Repetisjon: Algoritmer og pseudokode. Eksempel fra boka. Eksempel

Administrivia INF 3110/ INF /02/2005 1

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

MAT1030 Diskret matematikk

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

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

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

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

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

INF1820: Introduksjon til språk-og kommunikasjonsteknologi

INF1820: Introduksjon til språk-og kommunikasjonsteknologi

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

Dagens Tema: Grammatikker

INF 5110, 3. februar Dette foilheftet: Kapittel 3

INF 2820 V2016: Obligatorisk innleverinsoppgave 1

Dagens tema Grundig repetisjon og utdyping: Syntaks kontra semantikk

INF januar Forelesninger fremover:

Dagens tema: Regulære språk og uttrykk

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Velkommen til INF Kompilatorteknikk

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

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Beskrivelse av programmeringsspråket Simpila INF Kompilatorteknikk Våren 2012

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

Velkommen til INF Kompilatorteknikk

Kontekstfrie grammatikker og syntaksanalyse (parsering)

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

INF2820 Datalingvistikk V2012. Jan Tore Lønning

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

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

INF2820 Datalingvistikk V forelesning, 30.1 Jan Tore Lønning

Kapittel 1 En oversikt over C-språket

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

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

Oppgaver til INF 5110, kapittel 5

UNIVERSITETET I OSLO

Løsningsforslag i digitalteknikkoppgaver INF2270 uke 5 (29/1-4/2 2006)

INF 2820 V2018: Innleveringsoppgave 1

Dagens Tema: Grammatikker

TDT4110 IT Grunnkurs Høst 2016

INF Repetisjon: Hvordan bygge treet og analysere? 8. september Typisk situasjon. De problematiske syntaks-diagrammene

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

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

INF Algoritmer og datastrukturer. Hva er INF2220? Algoritmer og datastrukturer

Velkommen til INF5110 Kompilatorteknikk

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

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

Programmeringsspråket C

UNIVERSITETET I OSLO

Velkommen til INF Kompilatorteknikk

Digitalstyring sammendrag

Runtimesystemer - II. Funksjoner som parametere. Virtuelle metoder

INF2820 Datalingvistikk V2017 Forelesning 3, 30.1 Jan Tore Lønning

Hjemmeeksamen 1 i INF3110/4110

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

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

1/31/2011 SAMMENHENGER FSA OG REGULÆRE UTTRYKK. Regulære språk. Fra FSA til RE. Fra regulært uttrykk til NFA REGULÆRE UTTRYKK I DATALINGVISTIKK DEL 2

TDT4165 PROGRAMMING LANGUAGES. Exercise 01 Introduksjon til Oz

LO118D Forelesning 4 (DM)

INF 1000 høsten 2011 Uke september

En repetisjon hrj høst 2009

INF1000 undervisningen INF 1000 høsten 2011 Uke september

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

Hva er en algoritme? INF HØSTEN 2006 INF1020. Kursansvarlige Ragnar Normann E-post: Dagens tema

Velkommen til INF Kompilatorteknikk

TDT4110 IT Grunnkurs Høst 2016


Transkript:

Skanning del I INF 5110-2015 21/01/15 1

Skanning: innhold (begge forelesningene) Hva gjør en skanner? Input: Programteksten. Output: Ett og ett token fra programteksten (sekvensielt). Regulære uttrykk/definisjoner. For å beskrive de ulike tokenklassene. Deterministiske automater (DFAer). For å kjenne igjen de enkelt tokens. Implementasjon av DFAer. Ikke-deterministiske automater (NFAer). For enklere overgang fra regulære uttrykk. Overgang fra NFAer til DFAer. 21/01/15 2

Hva skanneren gjør Hovedmål Lage et program (funksjon, prosedyre, metode) som leverer ett og ett token, med all nødvendig informasjon Vanlige regler Hvert token skal gjøres så langt som mulig innenfor beskrivelsen Dersom et token kan passe med flere beskrivelser må det finnes regler om valg: Typisk: Kan det være både nøkkelord og navn, så skal det ansees som nøkkelord Blank, linjeskift, TAB og kommentar angir skille mellom tokens, men skal forøvrig fjernes ( white space ) 21/01/15 3

Hva scanneren gjør Vanlig invariant: Pilen peker på første tegn etter det siste token som ble lest. Ved + skal da denne pekeren flyttes! Tegnet pilen peker på ligger gjerne i en gitt variabel curchar e-lign. 21/01/15 4

Fortran spesielle regler for oppdeling i tokens Mellomrom (whitespace) uten betydning I F ( X 2. EQ. 0) THE N IF(X2.EQ.0)THEN Ingen reserverte ord IF(IF.EQ.0)THENTHEN=1.0 DO99I=1,10 DO99I=1.10 DO 99 I=1,10 - - - 99 CONTINUE 21/01/15 5

Klassifisering Hva som er en god klassifisering blir ikke klart før senere i kompilatoren Mulig regel: Det som skal behandles likt under syntaktisk analyse skal i samme klasse. Selve tokenet angir klassen hvilket leksem det er angis ved attributter Det enkleste er å angi selve teksten (f.eks. string value) som attributt Men ofte vil scanneren også: Sette navn i tabell, og gi med indeksen som attributt Sette tekst-konstanter i tabell, og angi indeksen som attributt beregne tallkonstanter, og angi verdien som attributt 21/01/15 6

En mulig klassifisering Navn (identifikator): abc25 Heltallskonstant: 1234 Reell konstant: 3.14E3 Boolsk konstant: true false Tekst-konstant: dette er en tekstkonstant Aritmetisk operator: + - * / Relasjons-operator: < <= >= > = <> Logisk operator: and or not Alle andre tokens i hver sin gruppe, f.eks.: nøkkelord ( ) [ ] { } :=, ;. MEN: Langt fra klart at denne blir den beste 21/01/15 7

C-typer som kan representere et token Hovedklassifikasjonen Selve teksten, eller verdien Hvis man vil lagre bare ett attributt: 21/01/15 8

En scanner er ikke stor og vanskelig De forskjellige token-klassene kan lett beskrives i prosa-tekst Ut fra det kan en scanner skrives rett fram, uten særlig teori Kan typisk ta noen hundre linjer, der det samme prinsippet stadig går igjen Men, man kan ønske seg: Å angi token-klassene i en passelig formalisme Ut fra denne å automatisk få laget et scanner-program Det er dette kapittel 2 handler om 21/01/15 9

Framgangsmåte for automatisk å lage en scanner Beskriv de forskjellige token-klassene som regulære uttrykk Eller litt mer fleksibelt, som regulære definisjoner Omarbeid dette til en NFA (Nondeterministic Finite Automaton) Er veldig rett fram Omarbeid dette til en DFA (Deterministic Finite Automaton) Dette kan gjøres med en kjent, grei algoritme En DFA kan uten videre gjøres om til et program Det er hele veien et kompliserende element at vi: ikke bare skal finne ett token, men en sekvens av token hvert token skal være så langt som mulig Vi skal se på dette i følgende rekkefølge: (1) Regulære uttrykk (2) DFAer (3) NFAer 21/01/15 10

Definisjon av regulære uttrykk Og det språket de definerer = mengden av strenger Presedens: *, konkatenering, 21/01/15 11

Eksempler - I Strenger som har nøyaktig en b Σ={a,b,c} (a c)* b (a c)* Strenger som har maks en b (a c)* (a c)* b (a c)* (a c)* (b ε) (a c)* Strenger som har formen aaaabaaaa (dvs like mange a-er) (a n b a n )? 21/01/15 12

Eksempler - II Strenger som ikke inneholder to b-er etter hverandre (b (a c))* en a eller c etter hver b ((a c)* (b (a c))*)* kombinert med (a c)* ((a c) (b (a c)))* forenklet (a c ba bc)* enda mer forenklet (a c ba bc)* (b ε) får med b på slutten (notb b notb)* (b ε) hvor notb = a c 21/01/15 13

Mer rasjonelle skrivemåter r+ = rr* r? = r ε Spesielle skrivemåter for tegnmengder [0-9] [a-z] ~a ikke a ~(a b) hverken a eller b. hele Σ.* en vilkårlig streng Gi regulære uttrykk navn (regulære definisjoner), og så bruke disse navnene videre i regulære uttrykk: digit = [0-9] nat = digit+ signednat = (+ -)nat number = signednat (. nat)?(e signednat)? 21/01/15 14

Deterministisk Endelig Automat En DFA (Deterministic Finite Automaton) M består av: Σ, et alfabet S, et sett med tilstander T: S x Σ S, en transisjons-funksjon s 0 S, en start-tilstand A S, et sett med aksepterende tilstander L(M) er språket akseptert av M, dvs alle strenger c 1 c 2...c n med c i Σ slik at det eksisterer tilstander s 1 =T(s 0,c 1 ), s 2 =T(s 1,c 2 ),..., s n =T(s n-1,c n ) og s n A. Eksempel sempel: a b a b 21/01/15 15 c

DFA identifier = letter (letter digit )* Funksjonen T: SxΣ -> S er ikke fullstendig definert Denne utvidelsen (med en feiltilstand) er underforstått 21/01/15 16

DFA for tall Regulære definisjoner digit = [0-9] nat = digit+ signednat = (+ -)? nat number = signednat (. nat)? (E signednat)?.. 21/01/15 17

DFA for kommentarer Pascal type C, C++, Java type 21/01/15 18

Implementasjon 1 av DFA ikke flytt til neste tegn 1 2 3 er neste tegn et siffer: tall er neste tegn {+,-,*,/}: arit. operator...... 21/01/15 19

Implementasjon 2 av DFA Tilstanden eksplisitt representert ved et tall hvis det bare er navn vi leter etter hvis vi også aksepterer tall, vil siffer føre oss til en ny lovlig tilstand 21/01/15 20

Implementasjon 3 av DFA Har et fast program Automaten ligger i en tabell 1 2 3 21/01/15 21

Ikke-deterministisk Endelig Automat En NFA (nondeterministic finite automaton) M består av:, et alfabet S, et sett med tilstander T: S x ( p(s), en transisjons-funksjon s 0 S, en start-tilstand A S, et sett med aksepterende tilstander L(M) er språket akseptert av M, dvs alle strenger c 1 c 2 c n med c i slik at det eksisterer tilstander s 1 T(s 0,c 1 ), s 2 T(s 1,c 2 ),, s n T(s n-1,c n ) og s n A. 21/01/15 22

NFA vs DFA Kan ofte være lett å sette opp, spesielt ut fra et regulært uttrykk Kan ses på som syntaks-diagrammer NFA ikke greit å gjøre til algoritme DFA beskriver samme språk 21/01/15 23

Motivasjon for å innføre NFA-er (1) DFA-er for de enkelte token Siden de starter forskjellig går det greit å slå dem sammen, men de opprindelige automater er der ikke lenger 21/01/15 24

Motivasjon for å innføre NFA-er (2) Med disse tokendefinisjoner går det ikke med en enkel sammenslåing, da dette ikke er en DFA I dette tilfellet går det an å slå sammen på første tegn, men dette er ikke altid mulig 21/01/15 25

Motivasjon for å innføre NFA-er (3) Derfor Ville være greiere generelt å gjøre det slik (1) Innfører ε-kant (2) Fjerner kravet om bare én a-kant ut fra hver tilstand 21/01/15 26

Thomson-konstruksjon I (Ethvert regulært uttrykk skal bli automat på denne formen: a: a rs: ε: ε 21/01/15 27

Thomson-konstruksjon II r s: r*: 21/01/15 28

Eksempel Thomson-konstruksjon ab a 21/01/15 29