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

Relevanta dokument
Föreläsning 7: Syntaxanalys

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

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

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

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

DAB760: Språk och logik

Föreläsning 7: Syntaxanalys

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

729G09 Språkvetenskaplig databehandling

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

Föreläsning 9: Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

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

Labb 1 - Textbearbetning med reguljära uttryck. Formella språk. Definitioner. Chomskyhierarkin. Formella språk. Formella språk

Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

Programmering A. Johan Eliasson

Alfabeten, strängar och språk. String

Övning 5 - Tillämpad datalogi 2013

MÄLARDALENS HÖGSKOLA. CD5560 Formella språk, automater och beräkningsteori. Användarmanual. för simulatorn JFLAP

DD1361 Programmeringsparadigm. Carina Edlund

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

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

Grundläggande datalogi - Övning 9

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.

Konstruktion av datorspråk

Automater. Matematik för språkteknologer. Mattias Nilsson

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

Tentamen , Introduktion till Java, dtaa98, dtea53

729G09 Språkvetenskaplig databehandling

Mer om språk och Ruby

11. Reguljära uttryck och grammatiker

11. Reguljära uttryck och grammatiker

Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel

Mer om språk och Ruby

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

Föreläsning 2. Operativsystem och programmering

Föreläsning 3: Booleans, if, switch

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

Objektorienterad programmering D2

Grammatik. BNF-grammatik

Föreläsning 11 - Automater, textsökning, tillstånd

Klassdeklaration. Metoddeklaration. Parameteröverföring

10. Mängder och språk

Introduktion till programmering SMD180. Föreläsning 9: Tupler

Kontextfria grammatiker

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

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

Lite mer psykologi. L2: Automater, Sökstrategier. Top-down. Kimballs sju principer

Övning 6 - Tillämpad datalogi 2012

Föreläsning 5: Kardinalitet. Funktioners tillväxt

Reguljära uttryck. Reguljära uttryck. Nu kommer en siffra78 och en till SIFFRA(78) men utan 7kstuga SIFFRA(89)

Introduktion till programmering. Standardfunktioner. Vad används datorer till? Standardfunktioner. Föreläsning 2. Prelude. $ ghci...

ENKEL Programmering 3

Tentamen i Grundläggande Programvaruutveckling, TDA548

Övning 6. Komprimering, kryptering, dokumentering & testning

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Lambdas. (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

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

Men först: Några funktioner ur preluden. Introduktion till programmering. Uppgiften. Variationer av uppgiften. Föreläsning 4

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

Datalogi för E Övning 3

Introduktion till programmering SMD180. Föreläsning 8: Listor

Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Föreläsning 1 & 2 INTRODUKTION

Grundläggande textanalys, VT2012

Icarus - Enkelt Skript. Manual revision 1.2, Keylogic AB.

Föreläsning 3. Iteration while-satsen

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Inlämningsuppgift MiniPlotter

729G75: Programmering och algoritmiskt tänkande. Tema 1, föreläsning 1 Jody Foo

DD1314 Programmeringsteknik

TDDI16: Datastrukturer och algoritmer

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

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

MicroPython Ett textbaserad programmeringsspråk för Micro:bit

Iteration while-satsen

Objektorienterad Programmering (TDDC77)

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin)

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

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

Användning av datastrukturer Algoritmer och datastrukturer Obligatorisk Laboration nr 1

STRÄNGAR DATATYPEN. Om du vill baka in variabler eller escape-tecken måste du använda dubbla citattecken. strängar

Föreläsning 2 Datastrukturer (DAT037)

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Reguljära uttryck, automater, hashtabeller, mm

Tentamen i Algoritmer & Datastrukturer i Java

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Stackar, köer, iteratorer och paket

Dependensregler - Lathund

Föreläsning 5 Innehåll

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

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

Föreläsning 2 Datastrukturer (DAT037)

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Funktionell programmering DD1361

Dagens föreläsning Programmering i Lisp Fö 5

Transkript:

DD36 Programmeringsparadigm Formella Språk & Syntaxanalys Föreläsning Per Austrin 26--3

Kursavsnittet syntax/formella språk Teori om formella språk verktygslåda för strängmatchning: Ändliga automater och reguljära uttryck Olika kraftfulla språkklasser Formella språk i praktiken: Regex Lexikal analys Att skriva en parser för ett språk

Idag Reguljära uttryck Ändliga automater Formella språk Några praktiska exempel

Idag Reguljära uttryck Ändliga automater Formella språk Några praktiska exempel

Reguljära uttryck Reguljära uttryck är mönster för att beskriva hur en sträng ska se ut. Man kan säga att det är ett språk för att beskriva strängar.

Reguljära uttryck Reguljära uttryck är mönster för att beskriva hur en sträng ska se ut. Man kan säga att det är ett språk för att beskriva strängar. Exempel: Vi är intresserade av namnen på de obligatoriska labbarna i kursen: F, F2, L, L2, S, S2, Inet

Reguljära uttryck Reguljära uttryck är mönster för att beskriva hur en sträng ska se ut. Man kan säga att det är ett språk för att beskriva strängar. Exempel: Vi är intresserade av namnen på de obligatoriska labbarna i kursen: F, F2, L, L2, S, S2, Inet Vi kan beskriva dem med det reguljära uttrycket F F2 L L2 S S2 Inet

Reguljära uttryck Reguljära uttryck är mönster för att beskriva hur en sträng ska se ut. Man kan säga att det är ett språk för att beskriva strängar. Exempel: Vi är intresserade av namnen på de obligatoriska labbarna i kursen: F, F2, L, L2, S, S2, Inet Vi kan beskriva dem med det reguljära uttrycket F F2 L L2 S S2 Inet Vertikalstreck/pipetecken är en operator i reguljära uttryck som betyder eller antingen vänstra eller högra operanden

Fortsättning på exempel Namnen på labbarna i kursen följer ju egentligen ett tämligen enkelt mönster: Antingen är strängen Inet Eller så består den av något av tecknen F, L eller S, följt av något av tecknen eller 2

Fortsättning på exempel Namnen på labbarna i kursen följer ju egentligen ett tämligen enkelt mönster: Antingen är strängen Inet Eller så består den av något av tecknen F, L eller S, följt av något av tecknen eller 2 Denna typ av beskrivning kan formuleras i reguljära uttryck: Inet (F L S)( 2)

Fortsättning på exempel Namnen på labbarna i kursen följer ju egentligen ett tämligen enkelt mönster: Antingen är strängen Inet Eller så består den av något av tecknen F, L eller S, följt av något av tecknen eller 2 Denna typ av beskrivning kan formuleras i reguljära uttryck: Inet (F L S)( 2) Parenteser används för att gruppera uttryck

Fortsättning på exempel Namnen på labbarna i kursen följer ju egentligen ett tämligen enkelt mönster: Antingen är strängen Inet Eller så består den av något av tecknen F, L eller S, följt av något av tecknen eller 2 Denna typ av beskrivning kan formuleras i reguljära uttryck: Inet (F L S)( 2) Parenteser används för att gruppera uttryck Antingen F eller L eller S

Fortsättning på exempel Namnen på labbarna i kursen följer ju egentligen ett tämligen enkelt mönster: Antingen är strängen Inet Eller så består den av något av tecknen F, L eller S, följt av något av tecknen eller 2 Denna typ av beskrivning kan formuleras i reguljära uttryck: Inet (F L S)( 2) Parenteser används för att gruppera uttryck Antingen F eller L eller S Antingen eller 2

Fortsättning på exempel Namnen på labbarna i kursen följer ju egentligen ett tämligen enkelt mönster: Antingen är strängen Inet Eller så består den av något av tecknen F, L eller S, följt av något av tecknen eller 2 Denna typ av beskrivning kan formuleras i reguljära uttryck: Inet (F L S)( 2) Parenteser används för att gruppera uttryck Antingen F eller L eller S Antingen eller 2 (Antingen F eller L eller S) följt av (antingen eller 2)

Exempel 2 upprepning Exempel: Vi är intresserade av alla binära strängar:,,,,,,,...

Exempel 2 upprepning Exempel: Vi är intresserade av alla binära strängar:,,,,,,,... Oändligt många strängar, vi kan inte skriva en lista med alla

Exempel 2 upprepning Exempel: Vi är intresserade av alla binära strängar:,,,,,,,... Oändligt många strängar, vi kan inte skriva en lista med alla Vi kan beskriva dem med det reguljära uttrycket ( )*

Exempel 2 upprepning Exempel: Vi är intresserade av alla binära strängar:,,,,,,,... Oändligt många strängar, vi kan inte skriva en lista med alla Vi kan beskriva dem med det reguljära uttrycket ( )* Upprepningsoperatorn * betyder: det som stod precis framför, ett valfritt antal gånger

Exempel 2 upprepning Exempel: Vi är intresserade av alla binära strängar:,,,,,,,... Oändligt många strängar, vi kan inte skriva en lista med alla Vi kan beskriva dem med det reguljära uttrycket ( )* Upprepningsoperatorn * betyder: det som stod precis framför, ett valfritt antal gånger Den här operationen kallas även Kleene-stjärna eller Kleene-slutning (Kleene closure)

Reguljära uttryck sammanfattning av operationerna Konkatenering: abc beskriver a följt av b följt av c (dvs strängen abc).

Reguljära uttryck sammanfattning av operationerna Konkatenering: abc beskriver a följt av b följt av c (dvs strängen abc). Alternering: ab cd beskriver någon av strängarna ab eller cd.

Reguljära uttryck sammanfattning av operationerna Konkatenering: abc beskriver a följt av b följt av c (dvs strängen abc). Alternering: ab cd beskriver någon av strängarna ab eller cd. Gruppering: Kan använda parenteser för att ändra i vilken ordning konkatenering och alternering görs: a(b c)d beskriver någon av strängarna abd eller acd

Reguljära uttryck sammanfattning av operationerna Konkatenering: abc beskriver a följt av b följt av c (dvs strängen abc). Alternering: ab cd beskriver någon av strängarna ab eller cd. Gruppering: Kan använda parenteser för att ändra i vilken ordning konkatenering och alternering görs: a(b c)d beskriver någon av strängarna abd eller acd Upprepning: a(b c)*d beskriver alla strängar som börjar på a, slutar på d, och däremellan har vilken sträng som helst bestående av tecknen b och c, t.ex. accccccccd, acbd, abbbcccbcbcd och ad.

Syntaktiskt socker I praktiken lägger man alltid till lite syntaktiskt socker till reguljära uttryck för att förenkla en del konstruktioner.

Syntaktiskt socker I praktiken lägger man alltid till lite syntaktiskt socker till reguljära uttryck för att förenkla en del konstruktioner. De vanligaste och mest oumbärliga exemplen: Teckenmängd: [abcd] betyder a b c d något av tecknena a, b c eller d

Syntaktiskt socker I praktiken lägger man alltid till lite syntaktiskt socker till reguljära uttryck för att förenkla en del konstruktioner. De vanligaste och mest oumbärliga exemplen: Teckenmängd: [abcd] betyder a b c d något av tecknena a, b c eller d Teckenintervall: [a-d] betyder samma som ovan något av tecknen i intervallet

Syntaktiskt socker I praktiken lägger man alltid till lite syntaktiskt socker till reguljära uttryck för att förenkla en del konstruktioner. De vanligaste och mest oumbärliga exemplen: Teckenmängd: [abcd] betyder a b c d något av tecknena a, b c eller d Teckenintervall: [a-d] betyder samma som ovan något av tecknen i intervallet Teckenkomplement: [^a-d] beskriver alla tecken som inte är i intervallet

Syntaktiskt socker I praktiken lägger man alltid till lite syntaktiskt socker till reguljära uttryck för att förenkla en del konstruktioner. De vanligaste och mest oumbärliga exemplen: Teckenmängd: [abcd] betyder a b c d något av tecknena a, b c eller d Teckenintervall: [a-d] betyder samma som ovan något av tecknen i intervallet Teckenkomplement: [^a-d] beskriver alla tecken som inte är i intervallet Noll eller en: X? betyder ( X), dvs antingen en tom sträng eller X

Syntaktiskt socker I praktiken lägger man alltid till lite syntaktiskt socker till reguljära uttryck för att förenkla en del konstruktioner. De vanligaste och mest oumbärliga exemplen: Teckenmängd: [abcd] betyder a b c d något av tecknena a, b c eller d Teckenintervall: [a-d] betyder samma som ovan något av tecknen i intervallet Teckenkomplement: [^a-d] beskriver alla tecken som inte är i intervallet Noll eller en: X? betyder ( X), dvs antingen en tom sträng eller X En eller flera: X+ betyder XX*, dvs en eller flera upprepningar av X

Syntaktiskt socker I praktiken lägger man alltid till lite syntaktiskt socker till reguljära uttryck för att förenkla en del konstruktioner. De vanligaste och mest oumbärliga exemplen: Teckenmängd: [abcd] betyder a b c d något av tecknena a, b c eller d Teckenintervall: [a-d] betyder samma som ovan något av tecknen i intervallet Teckenkomplement: [^a-d] beskriver alla tecken som inte är i intervallet Noll eller en: X? betyder ( X), dvs antingen en tom sträng eller X En eller flera: X+ betyder XX*, dvs en eller flera upprepningar av X Godtyckligt tecken:. betyder vilket tecken som helst

Exempel: e-post-adresser Exempel: skriv ett reguljärt uttryck som beskriver giltiga e-post-adress.

Exempel: e-post-adresser Exempel: skriv ett reguljärt uttryck som beskriver giltiga e-post-adress. I det här exemplet definierar vi giltig e-post-adress enligt följande regler:. Adressen består av en lokal del och ett domännamn, som separeras av @. 2. Den lokala delen får bestå av stora, små bokstäver och siffror, punkter, men inte som första eller sista tecken i lokala delen. 3. Domännamnet är en lista med minst två punktseparerade icke-tomma strängar med bara små bokstäver och siffror.

Reguljärt uttryck för lokal del 2. Den lokala delen får bestå av stora, små bokstäver och siffror, punkter, men inte som första eller sista tecken i lokala delen.

Reguljärt uttryck för lokal del 2. Den lokala delen får bestå av stora, små bokstäver och siffror, punkter, men inte som första eller sista tecken i lokala delen. Reguljära uttryck för de tillåtna tecknen: [A-Za-z-9.] inklusive punkt [A-Za-z-9] exklusive punkt

Reguljärt uttryck för lokal del 2. Den lokala delen får bestå av stora, små bokstäver och siffror, punkter, men inte som första eller sista tecken i lokala delen. Reguljära uttryck för de tillåtna tecknen: [A-Za-z-9.] inklusive punkt [A-Za-z-9] exklusive punkt Reguljärt uttryck för lokal del: [A-Za-z-9][A-Za-z-9.]*[A-Za-z-9]

Reguljärt uttryck för lokal del 2. Den lokala delen får bestå av stora, små bokstäver och siffror, punkter, men inte som första eller sista tecken i lokala delen. Reguljära uttryck för de tillåtna tecknen: [A-Za-z-9.] inklusive punkt [A-Za-z-9] exklusive punkt Reguljärt uttryck för lokal del: [A-Za-z-9][A-Za-z-9.]*[A-Za-z-9] Första tecknet ej punkt Tecken däremellan får även vara punkt Sista tecken ej punkt

Reguljärt uttryck för lokal del 2. Den lokala delen får bestå av stora, små bokstäver och siffror, punkter, men inte som första eller sista tecken i lokala delen. Reguljära uttryck för de tillåtna tecknen: [A-Za-z-9.] inklusive punkt [A-Za-z-9] exklusive punkt Reguljärt uttryck för lokal del: [A-Za-z-9][A-Za-z-9.]*[A-Za-z-9] Eller...?

Reguljärt uttryck för lokal del 2. Den lokala delen får bestå av stora, små bokstäver och siffror, punkter, men inte som första eller sista tecken i lokala delen. Reguljära uttryck för de tillåtna tecknen: [A-Za-z-9.] inklusive punkt [A-Za-z-9] exklusive punkt Reguljärt uttryck för lokal del: [A-Za-z-9][A-Za-z-9.]*[A-Za-z-9] Eller...? Uttrycket antar att lokala delen består av minst två tecken men det ska vara tillåtet för den lokala delen att bestå av ett enda tecken fel!

Reguljärt uttryck för lokal del 2. Den lokala delen får bestå av stora, små bokstäver och siffror, punkter, men inte som första eller sista tecken i lokala delen. Reguljära uttryck för de tillåtna tecknen: [A-Za-z-9.] inklusive punkt [A-Za-z-9] exklusive punkt Reguljärt uttryck för lokal del försök 2: [A-Za-z-9]([A-Za-z-9.]*[A-Za-z-9])?

Reguljärt uttryck för domännamn 3. Domännamnet är en lista med minst två punktseparerade icke-tomma strängar med bara små bokstäver och siffror.

Reguljärt uttryck för domännamn 3. Domännamnet är en lista med minst två punktseparerade icke-tomma strängar med bara små bokstäver och siffror. Reguljärt uttryck för icke-tom sträng med bara små bokstäver och siffror : [a-z-9]+

Reguljärt uttryck för domännamn 3. Domännamnet är en lista med minst två punktseparerade icke-tomma strängar med bara små bokstäver och siffror. Reguljärt uttryck för icke-tom sträng med bara små bokstäver och siffror : [a-z-9]+ Reguljärt uttryck för domändelen: [a-z-9]+(\.[a-z-9]+)*

Reguljärt uttryck för domännamn 3. Domännamnet är en lista med minst två punktseparerade icke-tomma strängar med bara små bokstäver och siffror. Reguljärt uttryck för icke-tom sträng med bara små bokstäver och siffror : [a-z-9]+ Reguljärt uttryck för domändelen: [a-z-9]+(\.[a-z-9]+)* Icke-tom sträng med små bokstäver och siffror Punkt följd av icke-tom sträng med små bokstäver och siffror Upprepat eller fler gånger

Reguljärt uttryck för domännamn 3. Domännamnet är en lista med minst två punktseparerade icke-tomma strängar med bara små bokstäver och siffror. Reguljärt uttryck för icke-tom sträng med bara små bokstäver och siffror : [a-z-9]+ Reguljärt uttryck för domändelen: [a-z-9]+(\.[a-z-9]+)* Fel igen! Tillåter domändel med bara en del, ska vara minst två!

Reguljärt uttryck för domännamn 3. Domännamnet är en lista med minst två punktseparerade icke-tomma strängar med bara små bokstäver och siffror. Reguljärt uttryck för icke-tom sträng med bara små bokstäver och siffror : [a-z-9]+ Reguljärt uttryck för domändelen: [a-z-9]+(\.[a-z-9]+)+

Sätta ihop lösningen. Adressen består av en lokal del och ett domännamn, som separeras av @.

Sätta ihop lösningen. Adressen består av en lokal del och ett domännamn, som separeras av @. Reguljärt uttryck för lokal del: [A-Za-z-9]([A-Za-z-9.]*[A-Za-z-9])? Reguljärt uttryck för domändelen: [a-z-9]+(\.[a-z-9]+)+

Sätta ihop lösningen. Adressen består av en lokal del och ett domännamn, som separeras av @. Reguljärt uttryck för lokal del: [A-Za-z-9]([A-Za-z-9.]*[A-Za-z-9])? Reguljärt uttryck för domändelen: [a-z-9]+(\.[a-z-9]+)+ Kombinerat till ett reguljärt uttryck för e-post-adresser: [A-Za-z-9]([A-Za-z-9.]*[A-Za-z-9])?@[a-z-9]+(\.[a-z-9]+)+

Sätta ihop lösningen. Adressen består av en lokal del och ett domännamn, som separeras av @. Reguljärt uttryck för lokal del: [A-Za-z-9]([A-Za-z-9.]*[A-Za-z-9])? Reguljärt uttryck för domändelen: [a-z-9]+(\.[a-z-9]+)+ Kombinerat till ett reguljärt uttryck för e-post-adresser: [A-Za-z-9]([A-Za-z-9.]*[A-Za-z-9])?@[a-z-9]+(\.[a-z-9]+)+ (De riktiga reglerna för hur en giltig e-post-adress ser ut är mycket mer komplicerade, det här var bara ett litet leksaks-exempel)

Reguljärt uttryck för e-post (första halvan) (?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \-\3]+(?:(?:(?:\r\n)?[ \t] )+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?: \r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \-\3]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \-\ 3]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\ ](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \-\3]+ (?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?: (?:\r\n)?[ \t])*))* (?:[^()<>@,;:\\".\[\] \-\3]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \-\3]+(?:(?:(?:\ r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \-\3]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t] )*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \-\3]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])* )(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \-\3]+(?:(?:(?:\r\n)?[ \t] )+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*))*) *:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \-\3]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r \n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \-\3]+(?:(?:(?: \r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t ]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \-\3 ]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \-\3]+(? :(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(? :\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*) (?:[^()<>@,;:\\".\[\] \-\3]+(?:(? :(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)? [ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \-\3]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<> @,;:\\".\[\] \-\3]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) " (?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t] )*(?:[^()<>@,;:\\".\[\] \-\3]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\ ".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(? :[^()<>@,;:\\".\[\] \-\3]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[ \]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*))* (?:[^()<>@,;:\\".\[\] \-

Idag Reguljära uttryck Ändliga automater Formella språk Några praktiska exempel

Ändliga automater Ändliga automater är, precis som reguljära uttryck, ett verktyg för att beskriva en uppsättning strängar Den enklaste typen av automat kallas för DFA, Deterministic Finite Automaton. Lite informellt är en DFA en maskin som kan befinna sig i en given uppsättning olika tillstånd, som läser en sträng tecken för tecken och byter tillstånd baserat på de tecken som läses, enligt en given uppslagstabell.

Progp-labbarna igen De obligatoriska progp-labbarna: F, F2, L, L2, S, S2, Inet

Progp-labbarna igen De obligatoriska progp-labbarna: F, F2, L, L2, S, S2, Inet Dessa kan beskrivas med följande ändliga automat start I n e t F, L, S, 2

Progp-labbarna igen De obligatoriska progp-labbarna: F, F2, L, L2, S, S2, Inet Dessa kan beskrivas med följande ändliga automat start I n e t F, L, S, 2 Om vi befinner oss här och nästa tecken är ett I, hoppa hit

Progp-labbarna igen De obligatoriska progp-labbarna: F, F2, L, L2, S, S2, Inet Dessa kan beskrivas med följande ändliga automat start I n e t F, L, S, 2 Om vi befinner oss i något av dessa tillstånd när strängen är slut så är det en korrekt sträng

Lite mer formellt En ändlig automat består av: ett antal tillstånd övergångar mellan tillstånden, märkta med något tecken ett tillstånd är starttillstånd något/några tillstånd är accepterande tillstånd

Lite mer formellt En ändlig automat består av: ett antal tillstånd övergångar mellan tillstånden, märkta med något tecken ett tillstånd är starttillstånd något/några tillstånd är accepterande tillstånd r s t Starttillstånd r Accepterande tillstånd u och v u v

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata: Slutar i tillstånd u strängen accepteras

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata: Slutar i tillstånd u strängen accepteras Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata: Slutar i tillstånd u strängen accepteras Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata: Slutar i tillstånd u strängen accepteras Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata: Slutar i tillstånd u strängen accepteras Indata:

Exempel r s u t v Starttillstånd r Accepterande tillstånd u och v??? Indata: Slutar i tillstånd u strängen accepteras Indata:

Exempel r s u t v Starttillstånd r Accepterande tillstånd u och v??? Indata: Indata: Slutar i tillstånd u strängen accepteras Övergång saknas strängen accepteras ej (underförstått: implicit -övergång från v till ett fail -tillstånd där vi ligger och snurrar och aldrig kan komma tillbaka till ett accepterande tillstånd)

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata: Indata: Slutar i tillstånd u strängen accepteras Övergång saknas strängen accepteras ej Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata: Indata: Slutar i tillstånd u strängen accepteras Övergång saknas strängen accepteras ej Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata: Indata: Slutar i tillstånd u strängen accepteras Övergång saknas strängen accepteras ej Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata: Indata: Slutar i tillstånd u strängen accepteras Övergång saknas strängen accepteras ej Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata: Indata: Slutar i tillstånd u strängen accepteras Övergång saknas strängen accepteras ej Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata: Indata: Slutar i tillstånd u strängen accepteras Övergång saknas strängen accepteras ej Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata: Indata: Slutar i tillstånd u strängen accepteras Övergång saknas strängen accepteras ej Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata: Indata: Slutar i tillstånd u strängen accepteras Övergång saknas strängen accepteras ej Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata: Indata: Slutar i tillstånd u strängen accepteras Övergång saknas strängen accepteras ej Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata: Indata: Slutar i tillstånd u strängen accepteras Övergång saknas strängen accepteras ej Indata:

Exempel r s t Starttillstånd r Accepterande tillstånd u och v u v Indata: Indata: Indata: Slutar i tillstånd u strängen accepteras Övergång saknas strängen accepteras ej Slutar i tillstånd t strängen accepteras ej

Exempel 2 start a b c c b a Hur hitta några exempel på strängar som automaten accepterar?

Exempel 2 start a b c c b a Hur hitta några exempel på strängar som automaten accepterar? Följ pilarna och hitta en väg till ett accepterande tillstånd!

Exempel 2 start a b c c b a Hur hitta några exempel på strängar som automaten accepterar? Följ pilarna och hitta en väg till ett accepterande tillstånd! Automaten accepterar: ab

Exempel 2 start a b c c b a Hur hitta några exempel på strängar som automaten accepterar? Följ pilarna och hitta en väg till ett accepterande tillstånd! Automaten accepterar: ab cb

Exempel 2 start a b c c b a Hur hitta några exempel på strängar som automaten accepterar? Följ pilarna och hitta en väg till ett accepterande tillstånd! Automaten accepterar: ab cb cbcab

Exempel 2 start a b c c b a Hur hitta några exempel på strängar som automaten accepterar? Följ pilarna och hitta en väg till ett accepterande tillstånd! Automaten accepterar: ab cb cbcab abcab abcabcabcabcabcab...

Idag Reguljära uttryck Ändliga automater Formella språk Några praktiska exempel

Formella språk Ett formellt språk L är en mängd strängar. L = {java, haskell, prolog} 8-bitars binära tal: L = {, } 8 Alla binära strängar med udda paritet: L = {w {, } udda antal ettor i w} Alla primtal skrivna som siffersträngar i bas, L = {2, 3, 5, 7,,...} Satisfierbara Booleska formler Syntaktiskt korrekta Javaprogram

Att beskriva ett formellt språk Ett formellt språk kan definieras / specificeras / beskrivas på många olika sätt:

Att beskriva ett formellt språk Ett formellt språk kan definieras / specificeras / beskrivas på många olika sätt: Räkna upp strängarna i språket (om språket är ändligt) L = {Inet, F, F2, L, L2, S, S2}

Att beskriva ett formellt språk Ett formellt språk kan definieras / specificeras / beskrivas på många olika sätt: Räkna upp strängarna i språket (om språket är ändligt) L = {Inet, F, F2, L, L2, S, S2} Ge regler för hur strängar som tillhör språket måste se ut Inet [FLS][2] [A-Za-z-9]([A-Za-z-9.]*[A-Za-z-9])?@[a-z-9]+(\.[a-z-9]+)+

Att beskriva ett formellt språk Ett formellt språk kan definieras / specificeras / beskrivas på många olika sätt: Räkna upp strängarna i språket (om språket är ändligt) L = {Inet, F, F2, L, L2, S, S2} Ge regler för hur strängar som tillhör språket måste se ut Inet [FLS][2] [A-Za-z-9]([A-Za-z-9.]*[A-Za-z-9])?@[a-z-9]+(\.[a-z-9]+)+ Konstruera en algoritm som avgör huruvida en sträng tillhör språket eller inte (dvs känner igen språket) start for i = 2 to n- I n e t if n mod i == F, L, S, 2 return false return true

Att beskriva ett formellt språk Ett formellt språk kan definieras / specificeras / beskrivas på många olika sätt: Räkna upp strängarna i språket (om språket är ändligt) L = {Inet, F, F2, L, L2, S, S2} Ge regler för hur strängar som tillhör språket måste se ut Inet [FLS][2] [A-Za-z-9]([A-Za-z-9.]*[A-Za-z-9])?@[a-z-9]+(\.[a-z-9]+)+ Konstruera en algoritm som avgör huruvida en sträng tillhör språket eller inte (dvs känner igen språket) start for i = 2 to n- I n e t if n mod i == F, L, S, 2 return false return true Ge en informell definition mängden av alla Java-program som har en oändlig loop

Den teoretiska delen om formella språk Hur går man från en informell eller icke-konstruktiv definition till regler eller algoritmer för att känna igen språket?

Den teoretiska delen om formella språk Hur går man från en informell eller icke-konstruktiv definition till regler eller algoritmer för att känna igen språket? T.ex.: Vilka typer av språk kan man beskriva med ett reguljärt uttryck? Vad är den effektivaste algoritmen för att avgöra om ett tal är ett primtal?

Den teoretiska delen om formella språk Hur går man från en informell eller icke-konstruktiv definition till regler eller algoritmer för att känna igen språket? T.ex.: Vilka typer av språk kan man beskriva med ett reguljärt uttryck? Vad är den effektivaste algoritmen för att avgöra om ett tal är ett primtal? Detta är grunden till forskningsområdet teoretisk datalogi (Den typ av frågor vi kommer titta på i den här kursen är grundläggande frågor som man löst för 5+ år sedan och inte så forskningsnära.)

Idag Reguljära uttryck Ändliga automater Formella språk Reguljära uttryck i praktiken

Reguljära uttryck i praktiken Regex Det finns många olika mindre variationer på syntax för reguljära uttryck mellan olika implementationer

Reguljära uttryck i praktiken Regex Det finns många olika mindre variationer på syntax för reguljära uttryck mellan olika implementationer Minsta gemensamma nämnaren är POSIX-standarden för reguljära uttryck.

Reguljära uttryck i praktiken Regex Det finns många olika mindre variationer på syntax för reguljära uttryck mellan olika implementationer Minsta gemensamma nämnaren är POSIX-standarden för reguljära uttryck. Det är också vanligt med extra funktionalitet som inte kan simuleras med riktiga reguljära uttryck

Reguljära uttryck i praktiken Regex Det finns många olika mindre variationer på syntax för reguljära uttryck mellan olika implementationer Minsta gemensamma nämnaren är POSIX-standarden för reguljära uttryck. Det är också vanligt med extra funktionalitet som inte kan simuleras med riktiga reguljära uttryck Typ-exempel: bakåtreferenser (.*)(.*)\2\

Reguljära uttryck i praktiken Regex Det finns många olika mindre variationer på syntax för reguljära uttryck mellan olika implementationer Minsta gemensamma nämnaren är POSIX-standarden för reguljära uttryck. Det är också vanligt med extra funktionalitet som inte kan simuleras med riktiga reguljära uttryck Typ-exempel: bakåtreferenser (.*)(.*)\2\ \n betyder samma sträng som vi matchade med den n:te parentes-gruppen

Reguljära uttryck i praktiken Regex Det finns många olika mindre variationer på syntax för reguljära uttryck mellan olika implementationer Minsta gemensamma nämnaren är POSIX-standarden för reguljära uttryck. Det är också vanligt med extra funktionalitet som inte kan simuleras med riktiga reguljära uttryck Typ-exempel: bakåtreferenser (.*)(.*)\2\ \n betyder samma sträng som vi matchade med den n:te parentes-gruppen Matchar t.ex. abba, erbananerb

Reguljära uttryck i praktiken Regex Det finns många olika mindre variationer på syntax för reguljära uttryck mellan olika implementationer Minsta gemensamma nämnaren är POSIX-standarden för reguljära uttryck. Det är också vanligt med extra funktionalitet som inte kan simuleras med riktiga reguljära uttryck Typ-exempel: bakåtreferenser (.*)(.*)\2\ Tyvärr ganska stor begreppsförvirring: reguljärt uttryck kan betyda olika beroende på om man åsyftar teorin för formella språk, eller det praktiska verktyget för strängmatchning Terminologi i kursen: Det vi beskrev tidigare = reguljärt uttryck Med utökningar som bakåtreferenser = regex

Regex i Unix > grep <regex> <fil> visa alla rader i <fil> där något som matchar <regex> förekommer (variant: egrep, använder annan regex-dialekt)

Regex i Unix > grep <regex> <fil> visa alla rader i <fil> där något som matchar <regex> förekommer (variant: egrep, använder annan regex-dialekt) Exempel: > grep "a..str" pride and prejudice.txt united, with great strength of feeling, a composure of temper and a commission of the peace of the county, she was a most active magistrate of his mind was visible in every feature. He was struggling for the am strongly inclined to hope the best. Could he expect that her friends

Regex i Unix > grep <regex> <fil> visa alla rader i <fil> där något som matchar <regex> förekommer (variant: egrep, använder annan regex-dialekt) Exempel: > grep "a..str" pride and prejudice.txt united, with great strength of feeling, a composure of temper and a commission of the peace of the county, she was a most active magistrate of his mind was visible in every feature. He was struggling for the am strongly inclined to hope the best. Could he expect that her friends > sed s/<regex>/<replacement>/g < <fil> byter ut alla förekomster av <regex> mot <replacement>

Regex i Unix > grep <regex> <fil> visa alla rader i <fil> där något som matchar <regex> förekommer (variant: egrep, använder annan regex-dialekt) Exempel: > grep "a..str" pride and prejudice.txt united, with great strength of feeling, a composure of temper and a commission of the peace of the county, she was a most active magistrate of his mind was visible in every feature. He was struggling for the am strongly inclined to hope the best. Could he expect that her friends > sed s/<regex>/<replacement>/g < <fil> byter ut alla förekomster av <regex> mot <replacement> Exempel: sed s/darcy/austrin/g < pride and prejudice.txt > my novel.txt

Regex i Unix > grep <regex> <fil> visa alla rader i <fil> där något som matchar <regex> förekommer (variant: egrep, använder annan regex-dialekt) Exempel: > grep "a..str" pride and prejudice.txt united, with great strength of feeling, a composure of temper and a commission of the peace of the county, she was a most active magistrate of his mind was visible in every feature. He was struggling for the am strongly inclined to hope the best. Could he expect that her friends > sed s/<regex>/<replacement>/g < <fil> byter ut alla förekomster av <regex> mot <replacement> Exempel: sed s/darcy/austrin/g < pride and prejudice.txt > my novel.txt...och många fler Unix-verktyg!

Regex i Java Finns i paketet java.util.regex

Regex i Java Finns i paketet java.util.regex Kolla om en sträng matchar ett uttryck: import java.util.regex.pattern; public boolean isvalidemail(string address) { return Pattern.matches(regex_for_email, address); }

Regex i Java Finns i paketet java.util.regex Kolla om en sträng matchar ett uttryck: import java.util.regex.pattern; public boolean isvalidemail(string address) { return Pattern.matches(regex_for_email, address); } Ersätta hundar med katter: import java.util.regex.*; Pattern p = Pattern.compile("cat"); Matcher m = p.matcher("one cat, two cats in the yard"); String s = m.replaceall("dog"); // --> s = "one dog, two dogs in the yard"

Ersätta hundar med katter module Replace where import Text.Regex Regex i Haskell replacement = subregex re s "cat" where re = mkregex "dog" s = "one dog, two dogs in the yard"

Ersätta hundar med katter module Replace where import Text.Regex Regex i Haskell replacement = subregex re s "cat" where re = mkregex "dog" s = "one dog, two dogs in the yard" Provkörning > ghci Replace.hs... *Replace> replacement... "one cat, two cats in the yard"

Regex i Haskell, forts Dela upp en text med avseende på ett regex module Split where import Text.Regex split s = splitregex nonletters s where nonletters = mkregex "[^a-za-z]+"

Regex i Haskell, forts Dela upp en text med avseende på ett regex module Split where import Text.Regex split s = splitregex nonletters s where nonletters = mkregex "[^a-za-z]+" Provkörning > ghci Split.hs... *Split> split "One, two, three, and 4 balloons!"... ["One","two","three","and","balloons", ""]

Regex i andra språk Vi skulle kunna hålla på och gå igenom hur man använder regex i olika språk i flera timmar, men det blir snabbt tråkigt. När man vill använda regex i sitt favorit-språk kollar man dokumentationen för språket hur regex fungerar där, exakt vilken notation som används osv (typiskt brukar det gå bra att googla på <programspråk> regular expressions...)

På torsdag Mer om reguljära uttryck och ändliga automater: ekvivalens och begränsningar Mer kraftfulla sätt att beskriva språk: grammatiker och stackautomater