Alfabeten, strängar och språk. String

Relevanta dokument
Grammatik. BNF-grammatik

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

11. Reguljära uttryck och grammatiker

11. Reguljära uttryck och grammatiker

10. Mängder och språk

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

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

Föreläsning 7: Syntaxanalys

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

12. Relationer och funktioner

Inlämningsuppgift MiniPlotter

12. Relationer och funktioner

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

Programmering A. Johan Eliasson

Tentamen i Objektorienterad modellering och diskreta strukturer

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

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

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

Projekt 2 XL Klassen Gui

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

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

Lösningsförslag till exempeltenta 2

Klassdeklaration. Metoddeklaration. Parameteröverföring

Tentamen i Objektorienterad modellering och diskreta strukturer

kind spelling Scanning

Tentamen i Objektorienterad modellering och diskreta strukturer

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

Projekt 2 XL Schema designmöten

TDDC77 Objektorienterad Programmering

lex källkod lex.l lexkompilator lex.yy.c C- kompilator lex.yy.c a.out sekvens av tokens a.out input specifikation av tokens mha reguljära uttryck

Kontextfria grammatiker

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

Föreläsning 7: Syntaxanalys

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

DAB760: Språk och logik

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

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

F4. programmeringsteknik och Matlab

Föreläsning 3. Stack

Nej! Nej Nej Nej Nej Nej Nej Nej!

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

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

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

Information. Computer

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

Tentamen i Objektorienterad modellering och design Helsingborg

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

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

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

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

Kursstruktur. Objektorienterad modellering och diskreta strukturer / design. Programmering utan OMD. Vad är Objektorienterad modellering?

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

TDIU01 - Programmering i C++, grundkurs

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

Föreläsning 1 Datastrukturer (DAT037)

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Parameteröverföring. Exempel. Exempel. Metodkropp

Föreläsning 3. Stack

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Integritetsprincipen. Objektorienterad modellering och diskreta strukturer / design

PROMETHEUS. Ett typat, objektorienterat programmeringsspråk av Tim Andersson.

Tentamen Grundläggande programmering

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

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

Föreläsning 7. Nyckelord I Java. Uttryck. Uttryck, Operatorer Och Kontrollflöden

Lösningsförslag till exempeltenta 1

(n 1)(n) 2 för n 1, dvs att tidskomplexiteten är kvadratisk i värsta fall (n 1) =

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

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

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

i=1 c i = B och c i = a i eller c i = b i för 1 i n. Beskriv och analysera en algoritm som löser detta problem med hjälp av dynamisk programmering.

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Objektorienterad Programmering (TDDC77)

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

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

HT1 2013, FÖRELÄSNING 6

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

Förra föreläsningen. Alternativ kurslitteratur. Dagens agenda Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

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 II, HT2011. Rum

Programmering II (ID1019)

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

Villkor och tester. Utförande satser bygger upp metoderna, man brukar finindela detta i: sekvenser. Ett program består i princip av: selektioner (val)

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

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

HT1 2013, FÖRELÄSNING 14 (INFÖR TENTAN)

Obs! Inget ur Javas standardbibliotek får användas i ett svar (om det inte står att man får det).

Kompilatorer och interpretatorer

Tentamen, Algoritmer och datastrukturer

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

Tentamen i Programmering

Algoritmer. Två gränssnitt

Objektorienterad Programmering (TDDC77)

729G09 Språkvetenskaplig databehandling

TDDC77 Objektorienterad Programmering

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

Transkript:

Alfabeten, strängar och språk Objektorienterad modellering och diskreta strukturer / design Språk och reguljära uttryck Ett alfabet är en ändlig icketom mängd vars element kallas symboler. Lennart Andersson Reviderad 2011 10 03 2011 En sträng på ett alfabet är en ändlig följd av symboler ur alfabetet. Sträng OMD 2011 F10-1 String OMD 2011 F10-2 Låt Σ vara ett alfabet. ɛ är en sträng på Σ. Om σ Σ och α är en sträng på Σ så är σα en sträng på Σ. public interface String { public class Empty implements String { public class NonEmpty implements String { private char c; private String tail; OMD 2011 F10-3 OMD 2011 F10-4

String Längd public interface String { public int length(); public String concatenate{string other; public String reverse{; ɛ = 0 σα = 1 + α OMD 2011 F10-5 Konkatenering OMD 2011 F10-6 Reversering, prefix, etc. α R ɛ α = α (abc) R = cba. (σα) β = σ(α β) Om ω = α β γ, där α, β och γ är strängar kallar vi α för ett prefix, γ ett suffix och β en delsträng till ω. OMD 2011 F10-7 OMD 2011 F10-8

Potenser Språk α n+1 α 0 = α α n = ɛ, n 0 Med ett språk på ett alfabet menas en mängd strängar på alfabetet. OMD 2011 F10-9 Operationer OMD 2011 F10-10 Ett reguljärt uttryck L 1 \ L 2 = L1 L 2 = {ω L1 ω L 2 L 1 L 2 = L1 L 2 = {u v u L1 v L 2 L 0 L k+1 = {ɛ = L L k L = L + k=0 L k = L L Ett språk motsvarande reguljära uttryck {0 ({1({0 {1) ) 0 (1 (0 1) ) beskriver språket som innehåller alla binära tal utan onödiga inledande nollor {0, 1, 10, 11, 100,... OMD 2011 F10-11 OMD 2011 F10-12

Reguljära uttryck Mängden av reguljära uttryck på alfabetet Σ definieras av ä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 Example a (a b) (((a b) a) (b a) ) är reguljära uttryck på alfabetet {a, b. OMD 2011 F10-13 Precedens OMD 2011 F10-14 Semantik högst lägst (((a b) a) (b a) ) kan skrivas ((a b)a)(ba) L[ ] L[ɛ] L[σ] = = {ɛ = {σ, σ Σ L[α β] L[α β] L[α ] = L[α]L[β] = L[α] L[β] = (L[α]) OMD 2011 F10-15 OMD 2011 F10-16

Example 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 Example 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,.... OMD 2011 F10-17 OMD 2011 F10-18 Utvidgad notation Example (0 (1(0 1) )) beskriver språket av alla binära strängar utan extra inledande nollor, {0, 1, 10, 11, 100,... DIGIT = [0 9] NAT = DIGIT + INT = ( )?NAT FLOAT = INT. NAT OMD 2011 F10-19 OMD 2011 F10-20

Reguljära uttryck med Java Grammatik Pattern p = Pattern.compile("a*b"); Matcher m = p.matcher("aaaaab"); boolean b = m.matches(); Reguljära uttryck klarar inte av att beskriva mängden av aritmetiska uttryck. boolean b = Pattern.matches("a*b", "aaaaab"); 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. OMD 2011 F10-21 Grammatik för aritmetiska uttryck OMD 2011 F10-22 BNF-grammatik Backus Naur-form Ett uttryck består av en eller flera termer separerade av enkla plus- eller minus-tecken. En term består i sin tur av en eller flera faktorer separerade av enkla multiplikations- eller divisions- tecken. En faktor är ett tal, en variabel eller ett uttryck inom parenteser. expr ::= term (addop term)* term ::= factor (mulop factor)* factor ::= NUMBER NAME ( expr ) addop ::= + - mulop ::= * / OMD 2011 F10-23 OMD 2011 F10-24

Begrepp Som i Algol 60 Report syntaxsymboler, N = {expr, term, factor, addop, mulop slutsymboler, Σ = {+, -, *, /, (, ), NUMBER, NAME produktioner, R = {expr ::= term (addop term),... startsymbol, S = expr <expr> ::= <term> (<addop> <term>)* <term> ::= <factor> (<mulop> <factor>)* <factor> ::= NUMBER NAME ( <expr> ) <addop> ::= + - <mulop> ::= * / G = (N, Σ, R, S) OMD 2011 F10-25 Härledning L[G] OMD 2011 F10-26 expr term addop term factor addop term NUMBER addop term NUMBER addop term NUMBER + term NUMBER + factor NUMBER + NAME expr NUMBER + NAME L[G] G = (N, Σ, R, S) = {w Σ S w OMD 2011 F10-27 OMD 2011 F10-28

En härledning En annan härledning expr ::= expr "+" expr expr ::= expr "*" expr expr ::= INT expr ::= expr "+" expr expr ::= expr "*" expr expr ::= INT Härledning av INT + INT * INT. Härledningsträd 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 expr => expr * expr => expr expr + expr * expr => / \ INT + expr * expr => expr * expr INT + INT * expr => / \ INT + INT * INT expr + expr INT INT INT OMD 2011 F10-29 Tvetydig grammatik OMD 2011 F10-30 Syntaxanalys av aritmetiska uttryck En grammatik är tvetydig om det finns 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. expr ::= term (addop term)* term ::= factor (mulop factor)* factor ::= ID INT ( expr ) addop ::= + - mulop ::= * / OMD 2011 F10-31 OMD 2011 F10-32

Syntaxanalys av en faktor factor ::= ID INT ( expr ) private Expr factor() { switch (token) { case Scanner.ID : String name = scanner.token(); return new Variable(name); case Scanner.INT : String number = scanner.token(); return Integer.parseInt(number); case ( : Expr e = expr(); // Check that token== ) return e; OMD 2011 F10-33 Kompilatorteknik Syntaxanalys av en term term ::= factor (mulop factor)* private Expr term() { Expr result, factor; result = factor(); while (token == * token == / ) { int op = token; factor = factor(); switch (op) { case * : result = new Mul(result, factor); break; case / : result = new Div(result, factor); break; return result; OMD 2011 F10-34 Lexikalanalys - Reguljära uttryck och automater Syntaxanalys - Recursive descent och LR-parsing Semantisk analys - Namn- och typkontroll Kodgenerering Aspektorienterad programmering - Vertyg: javacc, jastadd, ddd Projekt - Bygg en egen kompilator Kursen ges i årskurs 4. OMD 2011 F10-35