Skanning del I INF 5110 2005 2242021 1

  • Slides: 29
Download presentation
Skanning – del I INF 5110 - 2005 2/24/2021 1

Skanning – del I INF 5110 - 2005 2/24/2021 1

Skanning: innhold (begge forelesningene) INF 5110 - 2014 2/24/2021 INF 3110/4110 - 2004 §

Skanning: innhold (begge forelesningene) INF 5110 - 2014 2/24/2021 INF 3110/4110 - 2004 § Hva gjør en skanner? – Input: Programteksten. – Output: Ett og ett token fra programteksten (sekvensielt). § Regulære uttrykk/definisjoner. – For a beskrive de ulike tokenklassene. § Deterministiske automater (DFAer). – For a kjenne igjen de enkelt tokens. § Implementasjon av DFAer. § Ikke-deterministiske automater (NFAer). – For enklere overgang fra regulære uttrykk. § Overgang fra NFAer til DFAer. 2

Hva skanneren gjør § Typisk: Kan det være både nøkkelord og navn, så skal

Hva skanneren gjør § 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”) INF 3110/4110 - 2004 § 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: INF 5110 - 2014 2/24/2021 3

Hva scanneren gjør Vanlig invariant: Pilen peker på første tegn etter det siste token

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! INF 3110/4110 - 2004 Tegnet pilen peker på ligger gjerne i en gitt variabel ’cur. Char’ e-lign. INF 5110 - 2014 2/24/2021 4

Fortran – spesielle regler for oppdeling i tokens § Mellomrom (whitespace) uten betydning I

Fortran – spesielle regler for oppdeling i tokens § Mellomrom (whitespace) uten betydning I F ( X 2. EQ. 0) THE N IF(X 2. EQ. 0)THEN IF(IF. EQ. 0)THEN=1. 0 DO 99 I=1, 10 2/24/2021 INF 5110 - 2014 DO 99 I=1. 10 DO 99 I=1, 10 99 CONTINUE INF 3110/4110 - 2004 § Ingen reserverte ord 5

Klassifisering INF 5110 - 2014 2/24/2021 INF 3110/4110 - 2004 § Hva som er

Klassifisering INF 5110 - 2014 2/24/2021 INF 3110/4110 - 2004 § 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 – … 6

En mulig klassifisering Navn (identifikator): abc 25 Heltallskonstant: 1234 Reell konstant: 3. 14 E

En mulig klassifisering Navn (identifikator): abc 25 Heltallskonstant: 1234 Reell konstant: 3. 14 E 3 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 ( ) [ ] { } : = , ; . 2/24/2021 INF 5110 - 2014 § MEN: Langt fra klart at denne blir den beste …… INF 3110/4110 - 2004 § § § § § 7

C-typer som kan representere et token Hovedklassifikasjonen Selve teksten, eller verdien INF 3110/4110 -

C-typer som kan representere et token Hovedklassifikasjonen Selve teksten, eller verdien INF 3110/4110 - 2004 Hvis man vil lagre bare ett attributt: INF 5110 - 2014 2/24/2021 8

En scanner er ikke stor og vanskelig § De forskjellige token-klassene kan lett beskrives

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 2/24/2021 INF 5110 - 2014 § Det er dette kapittel 2 handler mest om INF 3110/4110 - 2004 § Men, man kan ønske seg: – Å angi token-klassene i en passelig formalisme – Ut fra denne å automatisk få laget et scanner-program 9

Framgangsmåte for automatisk å lage en scanner INF 5110 - 2014 2/24/2021 INF 3110/4110

Framgangsmåte for automatisk å lage en scanner INF 5110 - 2014 2/24/2021 INF 3110/4110 - 2004 § 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 10

Definisjon av regulære uttrykk § Og det språket de definerer = mengden av strenger

Definisjon av regulære uttrykk § Og det språket de definerer = mengden av strenger INF 3110/4110 - 2004 2/24/2021 INF 5110 - 2014 Presedens: *, konkatenering, | 11

Eksempler - I S={a, b, c} § Strenger som har nøyaktig en b (a

Eksempler - I S={a, b, c} § Strenger som har nøyaktig en b (a | c)* § Strenger som har maks en b § Strenger som har formen 2/24/2021 ? aaaabaaaa (dvs like mange a-er) INF 5110 - 2014 (an b an) (a | c)* (b | e) (a | c)* INF 3110/4110 - 2004 (a | c)* | (a | c)* b (a | c)* 12

Eksempler - II § Strenger som ikke inneholder to b-er etter hverandre ((a |

Eksempler - II § Strenger som ikke inneholder to b-er etter hverandre ((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 | e) får med b på slutten (notb | b notb)* (b | e) hvor notb = a | c 2/24/2021 INF 5110 - 2014 en a eller c etter hver b INF 3110/4110 - 2004 (b (a | c))* 13

Mer rasjonelle skrivemåter r+ r? = = rr* r|e 2/24/2021 INF 5110 - 2014

Mer rasjonelle skrivemåter r+ r? = = rr* r|e 2/24/2021 INF 5110 - 2014 Gi regulære uttrykk navn (regulære definisjoner), og så bruke disse navnene videre i regulære uttrykk: – digit = [0 -9] – nat = digit+ – signed. Nat = (+|-)nat – number = signed. Nat (”. ” nat)? (E signed. Nat)? INF 3110/4110 - 2004 Spesielle skrivemåter for tegnmengder – [0 -9] [a-z] – ~a ikke a ~(a | b) hverken a eller b –. hele S. * en vilkårlig streng 14

Deterministisk Endelig Automat INF 3110/4110 - 2004 § En DFA (Deterministic Finite Automaton) M

Deterministisk Endelig Automat INF 3110/4110 - 2004 § En DFA (Deterministic Finite Automaton) M besta 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 spra ket akseptert av M, dvs alle strenger c 1 c 2. . . cn med ci ∈ Σ slik at det eksisterer tilstander s 1=T(s 0, c 1), s 2=T(s 1, c 2), . . . , sn=T(sn-1, cn) og sn ∈ A. § Eksempel INF 5110 - 2014 2/24/2021 15

DFA identifier = letter (letter | digit )* Funksjonen T: Sx. S -> S

DFA identifier = letter (letter | digit )* Funksjonen T: Sx. S -> S er ikke fullstendig definert INF 5110 - 2014 2/24/2021 INF 3110/4110 - 2004 Denne utvidelsen (med en feiltilstand) er underforstått 16

Regulære definisjoner digit = [0 -9] nat = digit+ signed. Nat = (+|-)? nat

Regulære definisjoner digit = [0 -9] nat = digit+ signed. Nat = (+|-)? nat number = signed. Nat (”. ”nat)? (E signed. Nat)? DFA for tall 2/24/2021 INF 5110 - 2014 . INF 3110/4110 - 2004 . 17

DFA for kommentarer Pascal type INF 3110/4110 - 2004 C, C++, Java type INF

DFA for kommentarer Pascal type INF 3110/4110 - 2004 C, C++, Java type INF 5110 - 2014 2/24/2021 18

Implementasjon 1 av DFA ikke flytt til neste tegn 1 2 3 INF 3110/4110

Implementasjon 1 av DFA ikke flytt til neste tegn 1 2 3 INF 3110/4110 - 2004 2/24/2021 INF 5110 - 2014 er neste tegn et siffer: tall er neste tegn {+, -, *, /}: arit. operator. . . 19

Implementasjon 2 av DFA Tilstanden eksplisitt representert ved et tall 2/24/2021 INF 5110 -

Implementasjon 2 av DFA Tilstanden eksplisitt representert ved et tall 2/24/2021 INF 5110 - 2014 hvis vi også aksepterer tall, vil siffer føre oss til en ny lovlig tilstand INF 3110/4110 - 2004 hvis det bare er navn vi leter etter 20

Implementasjon 3 av DFA 1 2 § Har et fast program § Automaten ligger

Implementasjon 3 av DFA 1 2 § Har et fast program § Automaten ligger i en tabell 3 INF 3110/4110 - 2004 INF 5110 - 2014 2/24/2021 21

Ikke-deterministisk Endelig Automat INF 3110/4110 - 2004 INF 5110 - 2014 2/24/2021 22

Ikke-deterministisk Endelig Automat INF 3110/4110 - 2004 INF 5110 - 2014 2/24/2021 22

NFA vs DFA § Kan ofte være lett å sette opp, spesielt ut fra

NFA vs DFA § Kan ofte være lett å sette opp, spesielt ut fra et regulært uttrykk § Kan ses på som syntaks-diagrammer § ikke greit å gjøre til algoritme § beskriver samme språk 2/24/2021 INF 5110 - 2014 DFA INF 3110/4110 - 2004 NFA 23

Motivasjon for å innføre NFA-er (1) 2/24/2021 INF 5110 - 2014 Siden de starter

Motivasjon for å innføre NFA-er (1) 2/24/2021 INF 5110 - 2014 Siden de starter forskjellig går det greit å slå dem sammen, men de opprindelige automater er der ikke lenger INF 3110/4110 - 2004 DFA-er for de enkelte token 24

Motivasjon for å innføre NFA-er (2) 2/24/2021 INF 5110 - 2014 I dette tilfellet

Motivasjon for å innføre NFA-er (2) 2/24/2021 INF 5110 - 2014 I dette tilfellet går det an å slå sammen på første tegn, men dette er ikke altid mulig INF 3110/4110 - 2004 Med disse tokendefinisjoner går det ikke med en enkel sammenslåing, da dette ikke er en DFA 25

Motivasjon for å innføre NFA-er (3) Derfor (1) Innfører e-kant INF 5110 - 2014

Motivasjon for å innføre NFA-er (3) Derfor (1) Innfører e-kant INF 5110 - 2014 2/24/2021 (2) Fjerner kravet om bare én a-kant ut fra hver tilstand INF 3110/4110 - 2004 Ville være greiere generelt å gjøre det slik 26

Thomson-konstruksjon I (Ethvert regulært uttrykk skal bli automat på denne formen: a e: e

Thomson-konstruksjon I (Ethvert regulært uttrykk skal bli automat på denne formen: a e: e INF 3110/4110 - 2004 rs: a: INF 5110 - 2014 2/24/2021 27

Thomson-konstruksjon II r | s: INF 3110/4110 - 2004 r*: INF 5110 - 2014

Thomson-konstruksjon II r | s: INF 3110/4110 - 2004 r*: INF 5110 - 2014 2/24/2021 28

Eksempel Thomson-konstruksjon ab | a INF 3110/4110 - 2004 INF 5110 - 2014 2/24/2021

Eksempel Thomson-konstruksjon ab | a INF 3110/4110 - 2004 INF 5110 - 2014 2/24/2021 29