Grammatik. BNF-grammatik

Relevanta dokument
Alfabeten, strängar och språk. String

12. Relationer och funktioner

12. Relationer och funktioner

11. Reguljära uttryck och grammatiker

11. Reguljära uttryck och grammatiker

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

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

Datastrukturer och algoritmer

Inlämningsuppgift MiniPlotter

10. Mängder och språk

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

Projekt 2 XL Klassen Gui

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

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

Tentamen i Objektorienterad modellering och diskreta strukturer

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

Tentamen i Objektorienterad modellering och diskreta strukturer

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

Projekt 2 XL Schema designmöten

Föreläsning 7: Syntaxanalys

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

Tentamen i Objektorienterad modellering och diskreta strukturer

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

TDDD78 Viktiga begrepp, del 2

Obligatorisk uppgift 5

kind spelling Scanning

Nej! Nej Nej Nej Nej Nej Nej Nej!

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

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

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

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

Programmering A. Johan Eliasson

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

Föreläsning 3. Stack

DAT043 Objektorienterad Programmering

TDDC77 Objektorienterad Programmering

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

TENTAMEN OOP

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

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren att du har förstått dessa även om detaljer kan vara felaktiga.

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

F4. programmeringsteknik och Matlab

HT1 2013, FÖRELÄSNING 6

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

Lösningsförslag till tentamen

Information. Computer

DVG C01 TENTAMEN I PROGRAMSPRÅK PROGRAMMING LANGUAGES EXAMINATION :15-13: 15

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

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

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

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

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

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

Integritetsprincipen. Objektorienterad modellering och diskreta strukturer / design

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

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

F3: Recursive descent, tokenisering, avbildningar och undantag. Carl Nettelblad

OOP Objekt-orienterad programmering

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

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

Föreläsning 3. Stack

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

public boolean containskey(string key) { return search(key, head)!= null; }

Övning 4. I denna övning ska vi titta på icke-muterbarhet kontra muterbarhet, samt metoderna equals, hashcode och clone.

Programmering för språkteknologer II, HT2014. Rum

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

Tentamen Programmering fortsättningskurs DIT950

Obligatorisk uppgift 5: Symbolisk kalkylator

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

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Tentamen i Objektorienterad modellering och design Helsingborg

Grundkurs i programmering, 6 hp (725G61) Dugga 1 tillfälle 3

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

Objektorienterad Programmering (TDDC77)

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

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

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

Detta dokument är ett exempel, cirka hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

LÖSNINGSFÖRSLAG TENTAMEN

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

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

TENTAMEN OOP

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU

UML Objektdiagram. Objektorienterad modellering och design (EDAF25) Föreläsning 3. UML Sekvensdiagram. UML Objektdiagram. Agenda

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

TDDD78 Objektorientering i Java, del 4. Hur vet man om två objekt är lika? Hur undviker man objekt och när?

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

F11 - Rekursion. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

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

Transkript:

Grammatik Objektorienterad modellering och diskreta strukturer / design Grammatik Reguljära uttryck klarar inte av att beskriva mängden av aritmetiska uttryck. Lennart Andersson Reviderad 2010 10 07 2010 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 2010 F12-1 Grammatik för aritmetiska uttryck OMD 2010 F12-2 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 2010 F12-3 OMD 2010 F12-4

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 2010 F12-5 Härledning L[G] OMD 2010 F12-6 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 2010 F12-7 OMD 2010 F12-8

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 2010 F12-9 Tvetydig grammatik OMD 2010 F12-10 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 2010 F12-11 OMD 2010 F12-12

Syntaxanalys av en faktor factor ::= ID INT ( expr ) private Expr factor() { switch (token) { case Scanner.ID : String name = scanner.token(); token = scanner.nexttoken(); return new Variable(name); case Scanner.INT : String number = scanner.token(); token = scanner.nexttoken(); return Integer.parseInt(number); case ( : token = scanner.nexttoken(); Expr e = expr(); // Check that token== ) token = scanner.nexttoken(); return e; OMD 2010 F12-13 Kompilatorteknik Syntaxanalys av en term term ::= factor (mulop factor)* private Expr term() { Expr result, factor; result = factor(); while (token == * token == / ) { int op = token; token = scanner.nexttoken(); factor = factor(); switch (op) { case * : result = new Mul(result, factor); break; case / : result = new Div(result, factor); break; return result; OMD 2010 F12-14 Laboration 4 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 VT1-2 expr ::= primary ( -> primary)? primary ::= term ( term)* term ::= factor ( & factor)* factor ::= ID! factor ( expr )? betyder upprepning ingen eller en gång. OMD 2010 F12-15 OMD 2010 F12-16

Scanner är given public class Scanner { public static final int EOF = -1, VARIABLE = -2, IMPLIES = -3; public Scanner(String string) public int nexttoken() public String token() Ett skelett till Parser är givet public class Parser { private Scanner scanner; private int token; public Expr build(reader reader) { scanner = new Scanner(reader); token = scanner.nexttoken(); Expr expr = expr(); if (token == Scanner.EOF) { return expr; else { throw new ParserException( "Trailing garbage after " + scanner.token()); OMD 2010 F12-17 Laboration 4 OMD 2010 F12-18 Laboration 4 public Expr build(string input) { return build(new StringReader(input)); private Expr expr() { Expr result; result = primary(); return result; private Expr primary() { Expr result; result = term(); return result; private Expr term() { Expr result; result = factor(); return result; private Expr factor() { switch (token) { default: throw new ParserException( "Unexpected " + scanner.token()); OMD 2010 F12-19 OMD 2010 F12-20

Hjälpmedel på tentamen Tillåtet Martin: Agile Software Development Andersson: UML-syntax Andersson: Diskreta strukturer Föreläsningsbilder Java snabbreferens (finns tillgänglig) Ej tillåtet andra läroböcker övningar med lösningar projekt och laborationer med lösningar gamla tentor... Exempel på relationer 1 3 2 1 Per Erik friend(per, erik) 3 {1, 3, 5 expr + expr INT + expr OMD 2010 F12-21 Relation OMD 2010 F12-22 Aktivitet En binär relation har två operander. Om den första operanden tillhör mängden A och den andra mängden B så är det en relation mellan A och B. När vi diskuterar naturliga tal och skriver 3 {1, 3, 5 och 5 {1, 5 så är en relation mellan två mängder; Vilka? Mängden av relationer mellan A och B betecknas A B. Om A = B så säger vi att det är en relation på A. OMD 2010 F12-23 OMD 2010 F12-24

En binär relation mellan mängden A och mängden B är en delmängd av A B. Example Om vi har en mängd av fyra personer {per, erik, anna, eva så kan det gälla att friend = {(erik, anna), (anna, erik), (per, anna). OMD 2010 F12-25 OMD 2010 F12-26 Likhetsrelationen = = {(x, x) x A x ρ y = (x, y) ρ = A = {(x, x) x A OMD 2010 F12-27 OMD 2010 F12-28

Aktivitet Vad är det för fel på = {(x, y) N N x y = {(x, y) N N z N. x + z = y OMD 2010 F12-29 OMD 2010 F12-30 Mängdoperationer på relationer Eftersom relationer är mängder så kan vi använda relationer tillsammans med mängdoperationerna. = < = Låt ρ vara en relation mellan A och B. dom (ρ) = {x A y. (x, y) ρ ran (ρ) = {y B x. (x, y) ρ < = = OMD 2010 F12-31 OMD 2010 F12-32

Example Med friend = {(erik, anna), (anna, erik), (per, anna) så är dom (friend) = {per, erik, anna ran (friend) = {erik, anna Ibland definierar man bilden av x under relationen ρ, x ρ, samt argumentmängden till y under ρ, ρ y Låt ρ vara en relation mellan A och B med x A och y B. x ρ = {y B x ρ y ρ y = {x A x ρ y OMD 2010 F12-33 Aktivitet Finns det något enkelt sätt att beskriva mängden av alla relationer mellan A och B med hjälp av våra mängdoperationer? A B = OMD 2010 F12-35 OMD 2010 F12-34 Om equals i Object The equals method implements an equivalence relation on non-null object references: It is reflexive: for any non-null reference value x, x.equals(x) should return true. It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true. It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true. It is consistent: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modified. For any non-null reference value x, x.equals(null) should return false. OMD 2010 F12-36

Egenskaper Låt ρ vara en relation på A. ρ är reflexiv om x ρ x för alla x A ρ är symmetrisk om x ρ y x ρ y för alla x, y A ρ är transitiv om x ρ y y ρ z x ρ z för alla x, y, z A ρ är antisymmetrisk om x ρ y y ρ x x = y för alla x, y A Låt ρ 1 vara en relation mellan A och B och ρ 2 en relation mellan B och C. Sammansättningen av ρ 1 och ρ 2 är ρ 1 ρ 2 = {(x, z) A C y B. x ρ y y ρ z OMD 2010 F12-37 OMD 2010 F12-38 Aktivitet Vad betyder < 2 på mängden N? Låt ρ vara en relation mellan A och B. Inversen till ρ är ρ 1 = {(y, x) B A x ρ y Låt cousin(x, Y ) betyda att X är kusin till Y. Betyder cousin 2 samma sak som nästkusin (tremänning)? OMD 2010 F12-39 OMD 2010 F12-40

Låt ρ vara en relation mellan A och B. Motsatsen till ρ är ρ = A A ρ Låt ρ vara en relation på A. Vi definierar ρ n där n N med ρ 0 = = ρ n+1 = ρ ρ n, n N OMD 2010 F12-41 OMD 2010 F12-42 Låt ρ vara en relation på A. Vi definierar ρ n där n N med ρ 0 = = ρ n+1 = ρ ρ n, n N Det transitiva höljet till ρ är ρ = i=0 ρ i OMD 2010 F12-43 OMD 2010 F12-44

Funktioner Example not(b) = { F, om b = T T, om b = F f (x) = x + 1 sqr(y) = y 2 { abs(x) = x, om x 0 x, om x < 0 not = {(F, T), (T, F) OMD 2010 F12-45 OMD 2010 F12-46 f är en funktion från A till B om och endast om f A B och (a 1, b 1 ), (a 1, b 2 ) f (b 1 = b 2 ) A B = {f A B (a 1, b 1 ), (a 1, b 2 ) f (b 1 = b 2 ) OMD 2010 F12-47 OMD 2010 F12-48

Domän, kodomän och sammansättning dom och ran definieras som för relationer sammansättning definieras som för relationer; sammansättningen av två funktioner är en funktion unionen av två funktioner är oftast inte en funktion. Varför? OMD 2010 F12-49