Skanning – del I 4/4/2017.

Slides:



Advertisements
Liknende presentasjoner
Internett for nybegynnere
Advertisements

Materialenes mekaniske egenskaper
Medlemsseminar 11. februar Nettregulering 2010 Endringene i distribusjonsnettet sett fra små og mellomstore energiverk. Hva bør gjøres.
Gjenfinningssystemer og verktøy II
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
Stilistikk 4 En setning En ytring.
Kontrollstrukturer (Kapittel 3)
Stein Erik Halck Veileder
Ulike sorteringsmetoder Kompleksitet av dem
Grunnleggende matematikk
IS-102 Klassedefinisjoner
#include Ligner litt på import i java. Setter inn hele fila stdio.h i programteksten. Definerer en del io funksjoner slik at signaturen er kjent. I dette.
Velkommen til international Masterclass 2014
Et formelt språk er en mengde av strenger over et endelig alfabet
Kompleksitetsanalyse
Forside Motivasjon Analyse Forside Motivasjon Analyse  -notasjon O og  Relasjoner Klasser Fallgruver Spørsmål Kompleksitetsanalyse Åsmund Eldhuset asmunde.
Generelt I/O if/else Funksjoner Lists Løkker Dictionaries Annet Listebehandling Klasser Python med noen algdat-anvendelser Åsmund Eldhuset asmunde *at*
- Verdsettende ledelse
Filer Finne minste Finne Største Beregne gjennomsnitt Variabler Tabeller – Arrays Lage frekvenstabell.
Klargjøring fra forrige gang
INF150 Programmering mandag 11.9
Komplekse tall Naturlige tall
Kap 10 Graf.
Hvordan uttrykke krav Kapittel 4.4. Innledning Målet er å samles rundt ett entydig språk som ikke kan misforståes eller feiltolkes. Gjør sporbarheten.
  © Steria Hvordan bli en bedre utvikler? Johannes Brodwall, Chief scientist, Steria Cicero 23. juni, 2010.
  © Steria Å Lytte til koden Johannes Brodwall, Chief scientist, Steria Statkraft 16. april, 2010 Du kan lytte til koden.
  © Steria Å Lytte til koden Johannes Brodwall, Chief scientist, Steria Iterate 21. mai, 2010.
Pensjonsforum 12.november 2007
XML.
Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 10 Invarianter og Hashing Hans Fr. Nordhaug (Ola Bø)
” Sosiale medier – å dele og delta med ny teknologi” Høyskolelektor Cecilie Staude, Institutt for markedsføring, Handelshøyskolen BI.
9 Skanning.
1 Arrayer og form(ularer) (Kapittel 4). 2 Mål  Forstå assosiative og superglobale arrays  Kunne behandle webformularer (forms)  Kjenne forskjellen.
Regulære uttrykk.
  Den perfekte julegaven til Javakoden din Johannes Brodwall Steria.
Dynamiske nettsider PHP Del 2 – Kontrollstrukturer.
Oppgave 1. Automaten aksepterer språket over alfabetet {a,b} bestående av strenger med et like antall forekomster av a og et like antall forekomster av.
HUMIT 1750 Høsten 2005 Løsningsforslag med utfyllende kommentarer til Obligatorisk oppgave 1 Vi hadde gitt de tre setningene A: Regntøyet er hjemme eller.
INF 4130 Eksamen 2008 Gjennomgang.
Oppgaver til kodegenerering etc. INF-5110, 2013 Oppgave 1: Vi skal se på koden generert av TA-instruksjonene til høyre i figur 9.10 i det utdelte notatet,
Magnus Haug Algoritmer og Datastrukturer
Kapping av plater Mål: Vi skal lage komponenter for en møbelfabrikk ut fra standardiserte plater på 12 x 24 dm. Komponentene har lengde og bredde oppgitt.
1 INF5110 – 23. april, 2013 Svar på noen oppgaver til kap. 8 Beklager noe trykkfeil og rot på forelesningene Håper dette er bedre (lagt ut 24/4) Nå fredag.
INF2820 Datalingvistikk – V2012
Tautologier En tautologi er et utsagn som alltid er sant, det vil si som har T i hver linje av sannhetsverditabellen.
Høyrelineær grammatikk A  Λ A  cA A  caa S  A S  abS S  baS dvs. en kontekstfri grammatikk der hver produksjon - har høyst en ikketerminal på høyresiden,
En repetisjon hrj – høst 2010
1 INF5110 – 23. april, 2013 Noen oppgaver til kap. 8 Dette er en bedre utgave av oppgavene, lagt ut 24. april Nå fredag (26/4): Det blir ikke undervisning.
TEMA: BAKTERIER Hva er egentlig bakterier?.
Objektorientert utforming In 140 Sommerville kap. 12.
Kontekstfri grammatikk Endelig mengde T av terminal(symbol)er Endelig mengde V av ikke-terminal(symbol)er Startsymbol S Endelig mengde P av produksjoner.
Deterministisk endelig automat (DFA) (over språk A) Består av - en ikke-tom mengde Q av tilstander - hvor nøyaktig en er utpekt som start-tilstand - og.
Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005 Arne Maus, Ifi UiO.
Minimalisering av deterministiske endelige automater.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
Strenger over alfabet A Den tomme strengen Λ Konkatenering av strenger Tuppel/sekvens vs. mengde Kartesisk produkt av mengder Aritet av relasjon Språk.
Inf1000 (Uke 5) Arrayer, filer og tekst
Kapittel 5 Vilkårssetningar og løkker. 5.1 Boolske uttrykk George Boole ( ), britisk matematikar Utvikla teori om logikk ved bruk av symbol i.
§4. Irrasjonale og komplekse tall
Lokale variable Hvis vi trenger å ta vare på en verdi, inne i en metode kan vi definere en lokal variabel: int amount = 0; vi må fortelle hvilken type.
INF5110 – 23. april, 2013 Svar på noen oppgaver til kap
Kapittel 2- Juridisk metode
Minimalisering av deterministiske endelige automater
INF5110 – 5. og 7. mai 2015 Stein Krogdahl, Ifi, UiO
IS-102 Interaksjon med objekter
INF2820 Datalingvistikk – V2015
INF2820 Datalingvistikk – V2018
For, While, prosedyrer m/ parametere, funskjoner
Utskrift av presentasjonen:

Skanning – del I 4/4/2017

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

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”) Delimeters – white space abc=def: = skilletegn mellem to identifiers, fordi = ikke er lov I identifiers 4/4/2017

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

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

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 … 4/4/2017

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 …… 4/4/2017

C-typer som kan representere et token Hovedklassifikasjonen Selve teksten, eller verdien Hvis man vil lagre bare ett attributt: 4/4/2017

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 mest om Den scanneren for SIMUALA som vi tok over var skrevet rett frem, med utstrakt bruk av labels og gotos 4/4/2017

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 4/4/2017

Definisjon av regulære uttrykk Og det språket de definerer = mengden av strenger Presedens: *, konkatenering,| 4/4/2017

Eksempler - I S={a,b,c} Strenger som har nøyaktig en b Strenger som har maks en b Strenger som har formen aaaabaaaa (dvs like mange a-er) (a | c)* b (a | c)* (a | c)* | (a | c)* b (a | c)* (a | c)* (b | e) (a | c)* (an b an) ? Toeren bruker den første, med nøyaktig een b, satt sammen med et alternativ, som gir ingen b Treren ikke mulig - regulære uttrykk husker ikke, og de kan heller ikke rekursive. 4/4/2017

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 | e) får med b på slutten (notb | b notb)* (b | e) hvor notb = a | c 4/4/2017

Mer rasjonelle skrivemåter r+ = rr* r? = r | e Spesielle skrivemåter for tegnmengder [0-9] [a-z] ~a ikke a ~(a | b) hverken a eller b . hele S .* 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)? Legg merke til at højresiden på en def ikke kan inneholde venstresiden, mens dette gjerne kan være tilfellet med grammatikker. 4/4/2017

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 s0 ∈ S, en start-tilstand A ⊂ S, et sett med aksepterende tilstander L(M) er språket akseptert av M, dvs alle strenger c1c2...cn med ci ∈ Σ slik at det eksisterer tilstander s1=T(s0,c1), s2=T(s1,c2), ..., sn=T(sn-1,cn) og sn ∈ A. Eksempel 4/4/2017

DFA identifier = letter (letter | digit )* Funksjonen T: SxS -> S er ikke fullstendig definert Denne utvidelsen (med en feiltilstand) er underforstått Pay attention to that letter represents the set of letters, so there are really just as many transitions as there are members in this set. The error state is usually implied, and other means all characters not covered by other transitions Note that this machine does not tell what to do in each transition and what to do in accepting states – and it does not give the longest possible token. We will come back to that in a while. 4/4/2017

DFA for tall . . Regulære definisjoner digit = [0-9] nat = digit+ signedNat = (+|-)? nat number = signedNat (”.”nat)?(E signedNat)? . . 4/4/2017

DFA for kommentarer Pascal type C, C++, Java type The first kind of comments is easily handled by regular expressions, while the second is not – therefore often treated specially. As you see it is easy to put up directly a DFA for it. This also illustrates that ‘other’ may mean different thing in different states. 4/4/2017

ikke flytt til neste tegn Implementasjon 1 av DFA ikke flytt til neste tegn 1 2 3 This assures that the longest token is found – the accepting state is now moved to the state to which other makes a transition. er neste tegn et siffer: tall er neste tegn {+,-,*,/}: arit. operator ... 4/4/2017

hvis det bare er navn vi leter etter 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 4/4/2017

Implementasjon 3 av DFA Har et fast program Automaten ligger i en tabell 1 2 3 Fixed program, the state machines is in a table And this is how scanner generators work 4/4/2017

Ikke-deterministisk Endelig Automat 4/4/2017

NFA vs DFA Kan ofte være lett å sette opp, spesielt ut fra et regulært uttrykk Kan ses på som syntaks-diagrammer NFA DFA In order to get from regular expressions to DFA, the way around non-determistic state machines is a good idea, and you shall see why. Today we shall see how to get a NFA from REGexp. Next week we shall see how to get a DFA from a NFA. Same language: ab+ / ab* / b* ikke greit å gjøre til algoritme beskriver samme språk 4/4/2017

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 4/4/2017

Motivasjon for å innføre NFA-er (2) Med disse token-definisjoner 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 4/4/2017

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

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

Thomson-konstruksjon II r | s: r*: 4/4/2017

Eksempel Thomson-konstruksjon ab | a 4/4/2017