11. Reguljära uttryck och grammatiker

Relevanta dokument
11. Reguljära uttryck och grammatiker

Alfabeten, strängar och språk. String

Definition. Mängden av reguljära uttryck på alfabetet Σ definieras av. om α och β är reguljära uttryck så är (α β) ett reguljärt uttryck

Grammatik. BNF-grammatik

10. Mängder och språk

Objektorienterad modellering och diskreta strukturer. 13. Problem. Sven Gestegård Robertz. Datavetenskap, LTH

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

12. Relationer och funktioner

12. Relationer och funktioner

Föreläsning 7: Syntaxanalys

Föreläsning 2 5/6/08. Reguljära uttryck 1. Reguljära uttryck. Konkatenering och Kleene star. Några operationer på språk

DD1361 Programmeringsparadigm. Formella Språk & Syntaxanalys. Per Austrin

Inlämningsuppgift MiniPlotter

9. Predikatlogik och mängdlära

Reguljära uttryck Grammatiker Rekursiv nedåkning Allmänna kontextfria grammatiker. Syntaxanalys. Douglas Wikström KTH Stockholm

Idag: Reguljära språk Beskrivs av Reguljära uttryck DFA Grammatik

Programmering A. Johan Eliasson

Automatateori (2) Idag: Sammanhangsfria språk. Dessa kan uttryckas med Grammatik PDA

Tentamen i Objektorienterad modellering och diskreta strukturer

DD1361 Programmeringsparadigm. Formella Språk & Syntaxanalys. Per Austrin

8. Naturlig härledning och predikatlogik

Tentamen i Objektorienterad modellering och diskreta strukturer

7, Diskreta strukturer

Objektorienterad Programmering (TDDC77)

Tentamen i Objektorienterad modellering och diskreta strukturer

Objektorienterad Programmering (TDDC77)

TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13:15

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Programmering för språkteknologer I, VT2012. Rum

7, Diskreta strukturer

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Input. Programmering. Andra källor

Projekt 2 XL Klassen Gui

DD1361 Programmeringsparadigm. Formella Språk & Syntaxanalys. Per Austrin

729G09 Språkvetenskaplig databehandling

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

DAB760: Språk och logik

TDDC77 Objektorienterad Programmering

Objektorienterad Programkonstruktion

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

Information. Computer

Sats. Om t är en rätvinklig triangel så är summan av kvadraterna på kateterna i t lika med kvadraten på hypotenusan.

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Klassdeklaration. Metoddeklaration. Parameteröverföring

kind spelling Scanning

Kompilatorteknik. Görel Hedin Datavetenskap Lunds Tekniska Högskola. Temaföreläsning, Datorer i system, 2009

F4. programmeringsteknik och Matlab

OOP Objekt-orienterad programmering

EDAF10: Objektorienterad modellering och diskreta strukturer EDA061: Objektorienterad modellering och design

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

Lektion 1, del b Utskrifter av variabelvärden Inläsning av värden till variabler

EDAF10: Objektorienterad modellering och diskreta strukturer EDA061: Objektorienterad modellering och design. Vad är Objektorienterad modellering?

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77)

Föreläsning 7: Syntaxanalys

Föreläsning 3. Stack

Computer projekttid. Objektorienterad modellering och diskreta strukturer / design. Rapporter från verkligheten. EDAF10 i HT2

Lösningsförslag till exempeltenta 2

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.

Tentamen i EDAF oktober Skrivtid: Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas.

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Parameteröverföring. Exempel. Exempel. Metodkropp

Uppgifter i TDDC75: Diskreta strukturer Kapitel 8 Ordning och oändlighet

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

Översikt Föreläsning 1. Trivicalc. Vad är trivicalc? En cell. Områden på skärmen. SMD168/SMD135 Fredrik Bengtsson

Projekt 2 XL Schema designmöten

Kontextfria grammatiker

Parsning. TDP007 Konstruktion av datorspråk Föreläsning 6. Peter Dalenius Institutionen för datavetenskap

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

b) S Ø aa, A Ø aa» bb, B Ø aa» bc, C Ø ac» bc» 2. Låt L vara språket över 8a< som nedanstående NFA accepterar.

List.java. List.java. Printed by Tom Smedsaas

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

PROV I MATEMATIK Automatateori och formella språk DV1 4p

Programmering för språkteknologer II. OH-serie: Ändliga automater. reguljära uttryck i Java. Deterministiska ändliga automater

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

PROGRAMMERING-Java Omtentamina

TDIU01 - Programmering i C++, grundkurs

Reguljära uttryck, automater, hashtabeller, mm

OOP Objekt-orienterad programmering

TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13: 15

TDDC77 Objektorienterad Programmering

Tentamen OOP

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Programmering II (ID1019)

Kompilatorteknik. Görel Hedin Datavetenskap Lunds Tekniska Högskola. Temaföreläsning, Datorer i system, 2010

Föreläsning 3. Stack

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Nej! Nej Nej Nej Nej Nej Nej Nej!

Obligatorisk uppgift: Numerisk kalkylator

TDDD02 Föreläsning 2 HT Reguljära uttryck och reguljära språk Lars Ahrenberg

Introduktion till programmering och Python Grundkurs i programmering med Python

Transkript:

Objektorienterad modellering och diskreta strukturer 11. Reguljära uttryck och grammatiker Sven Gestegård Robertz Datavetenskap, LTH 2014

Rekaputilation Vi har talat om satslogik och härledning predikatlogik och substitution mängder och språk reguljära uttryck Vi kommer att studera reguljära uttryck och deras begränsning grammatiker Rekapitulation 11. Reguljära uttryck och grammatiker 2/32

Alfabeten, strängar och språk Ett alfabet är en ändlig icketom mängd vars element kallas symboler. En sträng på ett alfabet är en ändlig följd av symboler ur alfabetet. Med ett språk på ett alfabet menas en mängd strängar på alfabetet. Rekapitulation 11. Reguljära uttryck och grammatiker 3/32

Operationer på språk Konkatenering L 1 L 2 = L1 L 2 = {u v u L1 v L 2 } L k : konkateneringen av exakt k strängar ur L L 0 L k+1 = {ɛ} = L L k Kleene-stjärna, hölje L = k=0 L k Rekapitulation 11. Reguljära uttryck och grammatiker 4/32

Ett reguljärt uttryck Ett språk {0} ({1} ({0} {1}) ) motsvarande reguljära uttryck 0 (1 (0 1) ) beskriver språket som innehåller alla binära tal utan onödiga inledande nollor {0, 1, 10, 11, 100,...} Rekapitulation 11. Reguljära uttryck och grammatiker 5/32

Reguljära uttryck Mängden av reguljära uttryck på alfabetet Σ denieras av Denition är ett reguljärt uttryck ɛ är ett reguljärt uttryck om σ Σ så är σ ett reguljärt uttryck om α och β är reguljära uttryck så är (α β) ett reguljärt uttryck om α och β är reguljära uttryck så är (α β) ett reguljärt uttryck om α är ett reguljärt uttryck så är α ett reguljärt uttryck Rekapitulation 11. Reguljära uttryck och grammatiker 6/32

Exempel a (a b) (((a b) a) (b a) ) är reguljära uttryck på alfabetet {a, b}. De tre första uttrycken beskriver {a} {ab} och det tredje språket som innnehåller, bland andra, strängarna aa ba aaba bababa Rekapitulation 11. Reguljära uttryck och grammatiker 7/32

Semantik Reguljära språk Värdet av ett reguljärt uttryck är ett reguljärt språk. Denition Mängden av reguljära språk på alfabetet Σ denieras av L[ ] = L[α β] = L[α]L[β] L[ɛ] = {ɛ} L[α β] = L[α] L[β] L[σ] = {σ}, σ Σ L[α ] = (L[α]) Kommentar Notera att L[ɛ] = {ɛ} = L[ ], varför L[ɛ] kan utelämnas från denitionen. Rekapitulation 11. Reguljära uttryck och grammatiker 8/32

Exempel: Reguljära uttryck och maskiner Det reguljära uttrycket a ( (bc)*d) ef* ) accepteras av maskinen b c a start q 0 q 1 q 2 q 3 b e d q 4 d q 5 f Ett språk är reguljärt omm det kan accepteras av en nit tillståndsmaskin. Reguljära uttryck : Finita tillståndsmaskiner och reguljära uttryck 11. Reguljära uttryck och grammatiker 9/32

Exempel L[ab] = L[a]L[b] = {a} {b} = {ab} L[a b] = L[a] L[b] = {a} {b} = {a, b} L[(a b)(a b)] = L[a b]l[a b] = {a, b} {a, b} = {aa, ab, ba, bb} L[ab ] = L[a]L[b ] = {a} {b} = {a, ab, abb, abbb...b} Reguljära uttryck : Exempel 11. Reguljära uttryck och grammatiker 10/32

Exempel Det reguljära uttrycket (0 1) betecknar språket av alla binära strängar. L[(0 1) ] = (L[(0 1)]) = (L[0] L[1]) = ({0} {1}) = {0, 1} = {ɛ, 0, 1, 00, 01, 10, 11, 000,...}. Exempel (0 (1(0 1) )) beskriver språket av alla binära strängar utan extra inledande nollor, {0, 1, 10, 11, 100,...} Exempel Språket { a i b i i 0 } är inte reguljärt Reguljära uttryck : Exempel 11. Reguljära uttryck och grammatiker 11/32

Utvidgad notation DIGIT = [0 9] NAT = DIGIT + INT = ( )?NAT FLOAT = INT. NAT Namn får inte användas rekursivt. Reguljära uttryck : Exempel 11. Reguljära uttryck och grammatiker 12/32

Reguljära uttryck enligt POSIX Syntax för de grundläggande delarna i reguljära uttryck så som de skrivs i Java och verktyg som grep, sed, awk m.. symbol matchar ------ --------------------------------------------------------------------. ett godtyckligt tecken (utom radbrytningar). [ ] ett av tecknen inom klamrarna. [^ ] ett tecken som inte finns mellan klamrarna. ^ början av en sträng. I radbaserade verktyg, första tecknet på en rad. $ slutet av en sträng eller eller (tecknet före) en radbrytning. * föregående ellement noll eller fler gånger. {n} föregående element n gånger {n,m} föregående element minst n, max m gånger Kommentarer: * är en kortform för {0,} : noll eller flera + är en kortform för {1,} : en eller flera? är en kortform för {0,1} : noll eller ett.* matchar alla strängar Reguljära uttryck : Exempel på användning i Java och POSIX 11. Reguljära uttryck och grammatiker 13/32

Reguljära uttryck med Java java.util.regex boolean b = Pattern.matches("a*b", "aaaaab"); Pattern p = Pattern.compile("a*b"); Matcher m = p.matcher("aaaaab"); boolean b = m.matches(); Reguljära uttryck : Exempel på användning i Java och POSIX 11. Reguljära uttryck och grammatiker 14/32

java.util.scanner Ett agrant brott mot principen om enkelt ansvar. public final class Scanner implements Iterator<String> public Scanner(Readable source) public Scanner(InputStream source) public Scanner(InputStream source, String charsetname) public Scanner(File source) public Scanner(File source, String charsetname) public Scanner(String source) public Scanner(ReadableByteChannel source) public Scanner(ReadableByteChannel source, String charsetname) public void close() public IOException ioexception() public Pattern delimiter() public Scanner usedelimiter(pattern pattern) public Scanner usedelimiter(string pattern) public Locale locale() public Scanner uselocale(locale locale) public int radix() public Scanner useradix(int radix) public MatchResult match() public String tostring() public boolean hasnext() public String next() public void remove() public boolean hasnext(string pattern) public String next(string pattern) public boolean hasnext(pattern pattern) public String next(pattern pattern) public boolean hasnextline() public String nextline() public String findinline(string pattern) Reguljära uttryck : Exempel på användning i Java och POSIX 11. Reguljära uttryck och grammatiker 15/32

java.util.scanner public String findwithinhorizon(string pattern, int horizon) public String findwithinhorizon(pattern pattern, int horizon) public Scanner skip(pattern pattern) public Scanner skip(string pattern) public boolean hasnextboolean() public boolean nextboolean() public boolean hasnextbyte() public boolean hasnextbyte(int radix) public byte nextbyte() public byte nextbyte(int radix) public boolean hasnextshort() public boolean hasnextshort(int radix) public short nextshort() public short nextshort(int radix) public boolean hasnextint() public boolean hasnextint(int radix) public int nextint() public int nextint(int radix) public boolean hasnextlong() public boolean hasnextlong(int radix) public long nextlong() public long nextlong(int radix) public boolean hasnextfloat() public float nextfloat() public boolean hasnextdouble() public double nextdouble() public boolean hasnextbiginteger() public boolean hasnextbiginteger(int radix) public BigInteger nextbiginteger() public BigInteger nextbiginteger(int radix) public boolean hasnextbigdecimal() Reguljära uttryck : Exempel på användning i Java och POSIX 11. Reguljära uttryck och grammatiker 16/32

Grammatik Reguljära uttryck klarar inte av att beskriva mängden av aritmetiska uttryck. Om vi tillåter att man sätter namn på reguljära uttryck och använder dessa rekursivt kan vi beskriva språk med mer komplicerad struktur. Grammatiker 11. Reguljära uttryck och grammatiker 17/32

Grammatik för aritmetiska uttryck Ett uttryck består av en eller era termer separerade av enkla plus- eller minus-tecken. En term består i sin tur av en eller era faktorer separerade av enkla multiplikations- eller divisions- tecken. En faktor är ett tal, en variabel eller ett uttryck inom parenteser. Grammatiker 11. Reguljära uttryck och grammatiker 18/32

BNF-grammatik BackusNaur-form expr ::= term (addop term)* term ::= factor (mulop factor)* factor ::= NUMBER NAME '(' expr ')' addop ::= '+' '-' mulop ::= '*' '/' Grammatiker 11. Reguljära uttryck och grammatiker 19/32

Begrepp syntaxsymboler (icke terminalsymboler, nonterminal symbols) N = {expr, term, factor, addop, mulop} slutsymboler, (terminalsymboler, terminal symbols) Σ = {+, -, *, /, (, ), NUMBER, NAME} produktioner, R = {expr ::= term (addop term),...} startsymbol, S = expr G = (N, Σ, R, S) Grammatiker 11. Reguljära uttryck och grammatiker 20/32

Som i Algol 60 Report <expr> ::= <term> (<addop> <term>)* <term> ::= <factor> (<mulop> <factor>)* <factor> ::= NUMBER NAME ( <expr> ) <addop> ::= + - <mulop> ::= * / Exempel Härledning av 1 + x Grammatiker 11. Reguljära uttryck och grammatiker 21/32

Härledning expr term addop term factor addop term NUMBER addop term NUMBER + term NUMBER + factor NUMBER + NAME expr NUMBER + NAME Grammatiker : Härledning och syntaxanalys 11. Reguljära uttryck och grammatiker 22/32

L[G] Låt G vara en grammatik G = (N, Σ, R, S) Denition Språket som genereras av grammatiken G är L[G] = {w Σ S w} Grammatiker : Härledning och syntaxanalys 11. Reguljära uttryck och grammatiker 23/32

Härledning för en enkel grammatik expr ::= expr'+'expr expr ::= expr'*'expr expr ::= INT Härledning av INT + INT * INT. Härledningsträd expr => expr + expr => expr expr + expr * expr => / \ INT + expr * expr => expr + expr INT + INT * expr => / \ INT + INT * INT INT expr * expr INT INT Grammatiker : Härledning och syntaxanalys 11. Reguljära uttryck och grammatiker 24/32

En annan härledning expr ::= expr'+'expr expr ::= expr'*'expr expr ::= INT Härledning av INT + INT * INT. Härledningsträd expr => expr * expr => expr expr + expr * expr => / \ INT + expr * expr => expr * expr INT + INT * expr => / \ INT + INT * INT expr + expr INT INT INT Grammatiker : Härledning och syntaxanalys 11. Reguljära uttryck och grammatiker 25/32

Tvetydig grammatik En grammatik är tvetydig om det nns mer än ett härledningsträd för någon sträng i språket. Om en grammatik är tvetydig måste man försöka hitta en grammatik som inte är det och som genererar samma språk. I det aktuella fallet vill man ha en grammatik som respekterar gängse precedens för operatorerna. Grammatiker : Härledning och syntaxanalys 11. Reguljära uttryck och grammatiker 26/32

Syntaxanalys av aritmetiska uttryck expr ::= term (addop term)* term ::= factor (mulop factor)* factor ::= ID INT '(' expr ')' addop ::= '+' '-' mulop ::= '*' '/' Härledning av INT + INT * INT. Härledningsträd expr => expr term + term => / \ term + factor * factor => term + term factor + factor * factor => / \ factor + INT * factor => factor factor * factor factor + INT * INT INT + INT * INT INT INT INT Grammatiker : Härledning och syntaxanalys 11. Reguljära uttryck och grammatiker 27/32

Syntaxanalys av en faktor f a c t o r : : = ID INT ' ( ' e x p r ' ) ' p r i v a t e Expr f a c t o r ( ) { s w i t c h ( t o k e n ) { c a s e S c a n n e r. ID : S t r i n g name = s c a n n e r. t o k e n ( ) ; t o k e n = s c a n n e r. nexttoken ( ) ; r e t u r n new V a r i a b l e ( name ) ; c a s e S c a n n e r. INT : S t r i n g number = s c a n n e r. t o k e n ( ) ; t o k e n = s c a n n e r. nexttoken ( ) ; r e t u r n I n t e g e r. p a r s e I n t ( number ) ; c a s e ' ( ' : t o k e n = s c a n n e r. nexttoken ( ) ; Expr e = e x p r ( ) ; // Check t h a t t o k e n == ') ' t o k e n = s c a n n e r. nexttoken ( ) ; r e t u r n e ; } } Grammatiker : Härledning och syntaxanalys 11. Reguljära uttryck och grammatiker 28/32

Syntaxanalys av en term term : : = f a c t o r ( mulop f a c t o r ) p r i v a t e Expr term ( ) { Expr r e s u l t, f a c t o r ; r e s u l t = f a c t o r ( ) ; w h i l e ( t o k e n == ' ' t o k e n == ' / ' ) { i n t op = t o k e n ; t o k e n = s c a n n e r. nexttoken ( ) ; f a c t o r = f a c t o r ( ) ; s w i t c h ( op ) { c a s e ' ' : r e s u l t = new Mul ( r e s u l t, f a c t o r ) ; b r e a k ; c a s e ' / ' : r e s u l t = new Div ( r e s u l t, f a c t o r ) ; b r e a k ; } } r e t u r n r e s u l t ; } Grammatiker : Härledning och syntaxanalys 11. Reguljära uttryck och grammatiker 29/32

Delar av BNF-grammatik för Java CompilationUnit P ackagedeclaration ImportDeclaration T ypedecl ::= [P ackagedecl](importdecl) (T ypedecl) ::= 'package'n ame';' ::= 'import'name ["." '*']';' ::= ClassDecl InterfaceDecl ';' ClassDecl ::= ("abstract" 'nal' "public") CleanClassDecl CleanClassDecl ::= 'class'id["extends" N ame] ["implements" N amelist]classbody ClassBody ::= '{'(ClassBodyDecl) '}'... Name ::= ID("." ID) NameList ::= Name("," Name)... Around 100 nonterminals and 200 rules Grammatiker : Härledning och syntaxanalys 11. Reguljära uttryck och grammatiker 30/32

Kompilatorer Lexikalanalys - Reguljära uttryck och automater Syntaxanalys - Recursive descent och LR-parsing Semantisk analys - Namn- och typkontroll Interpretering Kodgenerering d v s Bygg en egen kompilator Vertyg: javacc, jastadd, ddd Kursen är valbar. Grammatiker : Härledning och syntaxanalys 11. Reguljära uttryck och grammatiker 31/32

Sammanfattning Vi har talat om reguljära uttryck grammatiker Nästa föreläsning relationer funktioner laboration 4: syntaxanalys (parsing) Grammatiker : Härledning och syntaxanalys 11. Reguljära uttryck och grammatiker 32/32