Algorithmen und Datenstrukturen II Robert Giegerich Technische Fakultät Vorlesung Sommer 2011 Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Organisatorisches Organisatorisches Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Veranstalter Vorlesung Robert Giegerich Raum: M3-125 Tel.: 0521/106-2913 Email: [email protected] Übungen Daniel Hagemeier Raum: M3-111 Tel.: 0521/106-2910 Email: [email protected] Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Webseite zur Vorlesung Informationen zur Vorlesung und den Übungen Folien, Skript, Übungszettel http://www.techfak.uni-bielefeld.de/ags/pi/lehre/ AuDIISS11/ Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Webseite zur Vorlesung Informationen zur Vorlesung und den Übungen Folien, Skript, Übungszettel http://www.techfak.uni-bielefeld.de/ags/pi/lehre/ AuDIISS11/ Account-Antrag: https://www.techfak.uni-bielefeld.de/rechner/ accountantrag.html Abholung nach ca. 2 Tagen im Support-Büro M3-100. Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Übungsgruppen Anmeldung zu den Übungen durch Eintrag auf den Listen am schwarzen Brett der Technischen Fakultät Zeitraum der Anmeldung: Dienstag 5.4., ca. 15 Uhr bis Donnerstag 7.4., 12 Uhr Raumnummern und Tutoren werden ab Freitag, dem 16.4., am schwarzen Brett bekanntgegeben Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Aufgabenzettel erstes Übungsblatt am 5.4. (dann jeweils am Dienstag in der Vorlesung) Aufgaben in Gruppen von 3 Studierenden bearbeiten Lösungen werden eine Woche nach der Ausgabe in der Vorlesung eingesammelt oder per e-mail an den Tutor gesendet Leistungsnachweis: mindestens 50% der möglichen Punktzahl in den Übungszetteln erfolgreiche Bearbeitung der Projektaufgabe 3 regelmäßige aktive Teilnahme an den Übungen. 1 2 Die Übungen beginnen in der Woche vom 11.04 bis 15.04. Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einzelprojekt Vorbereitung auf TdPE Veranstaltung Java-Programmieraufgabe als Einzelarbeit Ausgabe der Projektaufgabe am 14.06.2010 Abgabe der Lösungen spätestens am 5.07.2010 Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Übersicht der Themen Syntax und Semantik Java: Der Einstieg Imperative Programmierung in Java Algorithmen zur exakten Suche in Texten Objektorientierte Programmierung in Java Übergang von funktionaler zu OOP Programmieren im Großen Hashing Ein- und Ausgabe Grafische Benutzeroberflächen Graphen Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Teil I Syntax und Semantik Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Einführung Programmiersprachen sind formale Sprachen. Es ist präzise festgelegt, welche Zeichenreihen überhaupt Programme einer Sprache L sind (Syntax), welche Ein-/Ausgabefunktion ein Programm berechnet (Semantik). Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Konkrete/abstrakte Syntax konkrete Syntax Genaue textuelle Aufschreibung für Programme. abstrakte Syntax Bindeglied zur Semantik; gibt an, wie ein Programm(-stück) aufgebaut ist. Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Beispiel abstrakt assign @ R @ x add var y Robert Giegerich A&D II, Vorlesung 2010 @ R @ const @ R @ 5 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Beispiel konkret abstrakt assign x := y + 5 x =y +5 LET x = y + 5 ADD 5 TO y GIVING x STORE y + 5 TO x x =y +5 @ R @ x add var y Robert Giegerich A&D II, Vorlesung 2010 @ R @ Pascal C, Fortran, Java Basic (anno 1963) COBOL dBase Haskell (?) const @ R @ 5 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Operatoren und Konstrukte In der abstrakten Syntax tauchen die primitiven Konstrukte einer Programmiersprache auf, sowie Operatoren, die diese zu neuen Konstrukten kombinieren. primitiv: Kombination: Robert Giegerich A&D II, Vorlesung 2010 Bezeichner, Zahl var: Bezeichner const: Zahl add: Ausdruck × Ausdruck assign: Bezeichner × Ausdruck → → → → Ausdruck Ausdruck Ausdruck Anweisung Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Wörter Definition Ein Alphabet A ist ein endlicher Zeichenvorrat (eine endliche Menge). Die Mengen aller endlichen Zeichenreihen über einem Alphabet A bezeichnen wir mit A∗ . Das leere Wort der Länge 0 bezeichnen wir mit ε. Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Formale Sprachen Definition Eine Menge L ⊆ A∗ heißt formale Sprache über dem Alphabet A. Einen abstrakteren Sprachbegriff kann man kaum definieren. Die einzige Frage, die man sich über w ∈ A∗ stellen kann, ist: Gilt w ∈ L oder w 6∈ L? Diese Frage nennt man das Wortproblem von L. Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Programmiersprachen Definition Eine Programmiersprache ist ein Paar (L, L), wobei L ⊆ A∗ eine formale Sprache und L : L → (A∗ → A∗ ) die Semantik von L ist. Damit ordnet L jedem L-Programm l ∈ L als seine Bedeutung die Ein-/Ausgabefunktion L(l) zu, wobei Ein- und Ausgabe ebenfalls Zeichenreihen über A sind. Für L(l) schreiben wir auch kurz Ll. Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Syntax und Semantik von Sprachen: Bohrkopfsteuerung N W E O S N, E , W , S: O: D: U: Robert Giegerich A&D II, Vorlesung 2010 Bewegung um 1 Gitterpunkt (north, east, west, south) Einstellen auf Nullpunkt (origin) Senken des Bohrkopfes mit Bohrung (drill) Heben des Bohrkopfes (up) Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Programme zur Maschinensteuerung “ONNNEEDO” Bohrung am Punkt (2,3) mit Rückkehr zum Nullpunkt “ODUDUDU” Dreifach-Bohrung am Nullpunkt “DUNDUWDUSDU” bohrt Gitterquadrat, wo der Kopf gerade steht Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Steuersprache In der ersten Variante unserer Steuersprache lassen wir beliebige Befehlsfolgen zu. Außerdem kann jedes Programm als Eingabe ein Paar von Start-Koordinaten erhalten. L1 = {N, E , W , S, U, D, O}∗ Eingabe: (Int, Int) (Startposition) Ausgabe: [Int, Int)] (Positionen der erfolgten Bohrungen) Typ von L1 : L1 : L1 → (Int, Int) → [(Int, Int)] Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Maschinenzustand x y l cs aktuelle x-Koordinate aktuelle y-Koordinate aktueller Hebezustand des Bohrkopfes: 0 gesenkt, 1 oben Liste bisheriger Bohr-Koordinaten Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Semantik von Befehlen bef :: Befehl → Zustand → Zustand bef b (x, y , l, cs) = case b of O → (0, 0, 1, cs) N → (x, y + 1, l, cs) W → (x − 1, y , l, cs) S → (x, y − 1, l, cs) E → (x + 1, y , l, cs) D → (x, y , 0, (x, y ) : cs) U → (x, y , 1, cs) Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Befehlsfolgen beff :: Befehl∗ → Zustand → [(Int, Int)] beff [ ](x, y , l, cs) = reverse cs beff (b : bs)(x, y , l, cs) = beff bs(bef b (x, y , l, cs)) Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Befehlsfolgen beff :: Befehl∗ → Zustand → [(Int, Int)] beff [ ](x, y , l, cs) = reverse cs beff (b : bs)(x, y , l, cs) = beff bs(bef b (x, y , l, cs)) Die Semantik L1 wird beschrieben durch die Funktion prog :: Befehl∗ → (Int, Int) → [(Int, Int)] prog bs (i, j) = beff bs (i, j, 1, []) Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Programmiersprache L1 und ihre Semantik L1 sind sehr naiv. Man sollte zum Beispiel bedenken, dass das Werkstück und vielleicht auch die Maschine beschädigt werden, wenn mit abgesenktem Bohrkopf Bewegungen ausgelöst werden. Freilich – solange niemand solche Steuerprogramme erzeugt, geht alles gut. Jedoch wollen wir uns nicht darauf verlassen . . . Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Syntaktische vs. semantische Verfeinerung Generell gibt es zwei Möglichkeiten, eine Sprache (L, L) zu verfeinern: syntaktisch oder semantisch. Semantisch heisst: das “Unglück” kann programmiert werden, tritt aber nicht ein. Syntaktisch heisst: das “Unglück” wird bereits als syntaktisch fehlerhaftes Programm abgewiesen. Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Aufgabe Modifiziere die Semantik L1 (bei unverändertem L1 ) in zwei verschiedenen Weisen. Tritt eine Bewegung mit abgesenktem Bohrkopf auf, so wird a) die Ausführung des Programms abgebrochen und nur die Koordinaten der bisherigen Bohrungen werden ausgegeben, b) die Ausführung des Programms abgebrochen und keine Koordinaten werden ausgegeben. Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Forderungen an die Steuersprache Wir entscheiden uns nun für die syntaktische Verfeinerung und stellen Forderungen an die Steuersprache L: 1 Auf Befehl D muss stets U oder O folgen. 2 Befehl O ist immer möglich, U nur unmittelbar nach D. 3 Alle Programme enden mit dem Bohrkopf am Nullpunkt. 4 Auf dem Weg von einer Bohrung zur nächsten sind gegenläufige Richtungswechsel unerwünscht, zum Beispiel . . . NSNS . . . oder . . . NES . . . , weil sie die Maschine in Schwingung versetzen können. Alle diese Forderungen lassen sich durch Einschränkungen von L1 erfüllen, erfordern aber verfeinerte Methoden zur syntaktischen Sprachbeschreibung. Solche Mittel sind Grammatiken. Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Kontextfreie Grammatiken Definition Eine kontextfreie Grammatik ist ein 4-Tupel G = (N, A, P, S), wobei 1 N ein Alphabet von sogenannten Nonterminalsymbolen, 2 A ein Alphabet von sogenannten Terminalsymbolen mit N ∩ A = ∅, 3 P eine endliche Menge von Produktionen (Regeln) der Form V → α mit V ∈ N und α ∈ (V ∪ A)∗ und 4 S ∈ N ein Startsymbol ist. Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Kontextfreie Grammatik – Beispiel Eine Grammatik für Palindrome: G = (N, A, P, S), mit N = {P, T } und S = P A = {a, b} P = {P → aPa | bPb | T T → a | b | ε} Worte aus L(G): aa, abba, aber nicht aaabbb Für allgemeinere Palindrome mit beliebig langem “Turn”: T → aT | bT | ε Worte aus L(G): abbabba, aaabbb Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Satzformen einer Grammatik Die Menge S(G) der Satzformen von G ist die kleinste Teilmenge von (N ∪ A)∗ mit den folgenden Eigenschaften: 1 S ∈ S(G). 2 Wenn αV β ∈ S(G) für ein Nonterminalsymbol V ∈ N und Zeichenfolgen α, β ∈ (N ∪ A)∗ und wenn V → γ ∈ P eine Regel ist, so gilt auch αγβ ∈ S(G) ( Ableitungsschritt“). ” Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Sprache einer Grammatik def Die durch G definierte Sprache ist L(G) = S(G) ∩ A∗ . Den Test, ob ein gegebenes Wort w durch eine Grammatik G erzeugt werden kann, also ob w ∈ L(G) gilt, nennt man das Wortproblem von G. Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Grammatik 1 Grammatik G1 (zur Beschreibung von L1 ) A N S P Robert Giegerich A&D II, Vorlesung 2010 ={ ={ = ={ N, E , W , S, U, D, O} moves, move} moves moves → ε| move moves move → N|E |W |S|U|D|O} Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Grammatik 1 Grammatik G1 (zur Beschreibung von L1 ) A N S P ={ ={ = ={ N, E , W , S, U, D, O} moves, move} moves moves → ε| move moves move → N|E |W |S|U|D|O} Hier gilt L(G1 ) = A∗ . Es ist w ∈ L(G1 ) mit w = “WENDEDENUDOSUED 00 Übung: Leite w mit dieser Grammatik ab. Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Verfeinerte Grammatik 2 Verfeinerte Grammatik G2 (berücksichtigt Forderungen (1) - (3), aber nicht (4)). A, N, S wie G1 P = { moves → O|DO| move moves move → N|E |W |S|O|DU|DO} Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Verfeinerte Grammatik 2 Verfeinerte Grammatik G2 (berücksichtigt Forderungen (1) - (3), aber nicht (4)). A, N, S wie G1 P = { moves → O|DO| move moves move → N|E |W |S|O|DU|DO} Frage: Warum brauchen wir die Regel moves → DO überhaupt? Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Verfeinerte Grammatik 2 Verfeinerte Grammatik G2 (berücksichtigt Forderungen (1) - (3), aber nicht (4)). A, N, S wie G1 P = { moves → O|DO| move moves move → N|E |W |S|O|DU|DO} Frage: Warum brauchen wir die Regel moves → DO überhaupt? Antwort: Sonst ist “DO” ∈ / S(G2 ). Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Warum ist nun w = “WENDEDENUDOSUED” ∈ / S(G2 )? Versuch einer Ableitung: moves → → → → →3 → move W W W W W moves moves move E E E moves moves N N move moves ? Hier kann nur DU oder DO erzeugt werden, aber nicht D allein oder DE . Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Verfeinerte Grammatik 3 Verfeinerte Grammatik G3 (berücksichtigt Forderungen (1) und (4), (2) nur teilweise und (3) gar nicht): A, S wie G1 N = { moves, ne, nw, se, sw, drill } P = { moves → ε | ne moves | nw moves | se moves | sw moves ne → N ne | E ne | drill se → S se | E se | drill nw → N nw | W nw | drill sw → S sw | W sw | drill drill → DU|DO } Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen RNA-Sekundärstrukturen Ein RNA-Molekül besteht aus Basen A,C,G,U. Durch Wasserstoff-Brücken zwischen A–U, G–C, G–U bilden sich Basenpaarungen, die zu einer Sekundärstruktur führen. Primärsequenz C A C C U A A G G U C C Sekundärstruktur C A C C U A A G G U C C C C A U C G C G U C ← Helix-Bildung schafft Stabilität A A Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Sekundärstruktur-Grammatik Grammatik zur Beschreibung der Sekundärstruktur (Ausschnitt): A={ N={ S= P={ Robert Giegerich A&D II, Vorlesung 2010 A, C, G, U } struct, any, stack, loop } struct struct → any | any struct | struct any | stack | ε any → A | C | G | U stack → A stack U | U stack A | G stack C | C stack G | G stack U | U stack G | loop loop → any loop | any any any } Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Ableitung von RNA-Sequenzen Allein mit den ersten beiden Produktionen kann man alle RNA-Sequenzen ableiten: struct → any struct → A struct → A any struct → AC struct . . . Damit ist L(G) = A∗ . Der Witz der Grammatik ist, dass manche Ableitungen das Vorliegen möglicher Sekundärstrukturen anzeigen – dann nämlich, wenn sie die Produktionen für stack benutzen. Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Ableitung == Struktur struct →2 C struct →4 C struct CC → C stack CC → CA stack UCC →2 CACC stack GGUCC → CACC loop GGUCC →4 CACCUAAGGUCC Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Syntaxbaum struct any struct C H H struct anyH H H H C any struct H H C stack H H A stack U C C H H stackH G H stack G loop any U any H H any H H A A Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen EBNF, Historisches EBNF ist eine Notation zur Aufschreibung kontext-freier Grammatiken. Sie wird (u.a.) zur Defintion der Syntax von Programmiersprachen benutzt. Syntaxbeschreibung von FORTRAN und COBOL (am Anfang) durch Beispiele und Gegenbeispiele. 1958 formale Beschreibung der Syntax von ALGOL durch John Backus; Backus-Normalform (BNF). Kleine Verbesserungen in der Notation durch Peter Naur, daher spricht man heute von der Backus-Naur-Form (BNF). Niklaus Wirth hat die Backus-Naur-Form noch einmal überarbeitet und erweitert (EBNF – Extended BNF). Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen EBNF, Definition Die Metazeichen der EBNF (vgl. das Definitionszeichen das Alternativzeichen die Anführungszeichen die Wiederholungsklammern die Optionsklammern die Gruppenklammern der Punkt Robert Giegerich A&D II, Vorlesung 2010 Klaeren [5], S. 104) sind: = | ‘‘ ’’ { } [ ] ( ) . Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen EBNF, Terme Die Menge ET der EBNF-Terme ist gegeben durch: 1 Ist V eine Folge von Buchstaben und Ziffern, die mit einem Buchstaben beginnt, so gilt V ∈ ET und gilt als Nonterminalsymbol. Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen EBNF, Terme Die Menge ET der EBNF-Terme ist gegeben durch: 1 Ist V eine Folge von Buchstaben und Ziffern, die mit einem Buchstaben beginnt, so gilt V ∈ ET und gilt als Nonterminalsymbol. 2 Ist w eine Folge von beliebigen Symbolen, so ist “w ”∈ ET und gilt als ein (!) Terminalsymbol. Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen EBNF, Terme Die Menge ET der EBNF-Terme ist gegeben durch: 1 Ist V eine Folge von Buchstaben und Ziffern, die mit einem Buchstaben beginnt, so gilt V ∈ ET und gilt als Nonterminalsymbol. 2 Ist w eine Folge von beliebigen Symbolen, so ist “w ”∈ ET und gilt als ein (!) Terminalsymbol. Für α ∈ ET sind auch 3 Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen EBNF, Terme Die Menge ET der EBNF-Terme ist gegeben durch: 1 Ist V eine Folge von Buchstaben und Ziffern, die mit einem Buchstaben beginnt, so gilt V ∈ ET und gilt als Nonterminalsymbol. 2 Ist w eine Folge von beliebigen Symbolen, so ist “w ”∈ ET und gilt als ein (!) Terminalsymbol. Für α ∈ ET sind auch 3 1 (α) ∈ ET , Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen EBNF, Terme Die Menge ET der EBNF-Terme ist gegeben durch: 1 Ist V eine Folge von Buchstaben und Ziffern, die mit einem Buchstaben beginnt, so gilt V ∈ ET und gilt als Nonterminalsymbol. 2 Ist w eine Folge von beliebigen Symbolen, so ist “w ”∈ ET und gilt als ein (!) Terminalsymbol. Für α ∈ ET sind auch 3 1 2 (α) ∈ ET , [α] ∈ ET und Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen EBNF, Terme Die Menge ET der EBNF-Terme ist gegeben durch: 1 Ist V eine Folge von Buchstaben und Ziffern, die mit einem Buchstaben beginnt, so gilt V ∈ ET und gilt als Nonterminalsymbol. 2 Ist w eine Folge von beliebigen Symbolen, so ist “w ”∈ ET und gilt als ein (!) Terminalsymbol. Für α ∈ ET sind auch 3 1 2 3 (α) ∈ ET , [α] ∈ ET und {α} ∈ ET . Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen EBNF, Terme Die Menge ET der EBNF-Terme ist gegeben durch: 1 Ist V eine Folge von Buchstaben und Ziffern, die mit einem Buchstaben beginnt, so gilt V ∈ ET und gilt als Nonterminalsymbol. 2 Ist w eine Folge von beliebigen Symbolen, so ist “w ”∈ ET und gilt als ein (!) Terminalsymbol. Für α ∈ ET sind auch 3 1 2 3 4 (α) ∈ ET , [α] ∈ ET und {α} ∈ ET . Für α1 , . . . , αn ∈ ET sind auch Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen EBNF, Terme Die Menge ET der EBNF-Terme ist gegeben durch: 1 Ist V eine Folge von Buchstaben und Ziffern, die mit einem Buchstaben beginnt, so gilt V ∈ ET und gilt als Nonterminalsymbol. 2 Ist w eine Folge von beliebigen Symbolen, so ist “w ”∈ ET und gilt als ein (!) Terminalsymbol. Für α ∈ ET sind auch 3 1 2 3 4 (α) ∈ ET , [α] ∈ ET und {α} ∈ ET . Für α1 , . . . , αn ∈ ET sind auch 1 α1 | . . . |αn ∈ ET und Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen EBNF, Terme Die Menge ET der EBNF-Terme ist gegeben durch: 1 Ist V eine Folge von Buchstaben und Ziffern, die mit einem Buchstaben beginnt, so gilt V ∈ ET und gilt als Nonterminalsymbol. 2 Ist w eine Folge von beliebigen Symbolen, so ist “w ”∈ ET und gilt als ein (!) Terminalsymbol. Für α ∈ ET sind auch 3 1 2 3 4 (α) ∈ ET , [α] ∈ ET und {α} ∈ ET . Für α1 , . . . , αn ∈ ET sind auch 1 2 α1 | . . . |αn ∈ ET und α1 α2 . . . αn ∈ ET . Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen EBNF-Definitionen Eine EBNF-Definition besteht aus einer endlichen Menge von EBNF-Regeln der Form V = α. wobei V ein Nonterminalsymbol entsprechend obiger Konvention und α ein EBNF-Term ist. Das Nonterminalsymbol auf der linken Seite der ersten Regel ist das Startsymbol. Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen EBNF-Definition für Mini-Java (1) program = “class” ident “{” mainMethod “}”. mainMethod = “public”“static”“void”“main”“(”“String”“[”“]” argsIdent “)” block. statement = “int” ident “=” expression “;” | ident “=” expression “;” | “if”“(” condition “)” statement | “while”“(” condition “)” statement | block | “System”“.”“out”“.”“println”“(” expression “)”“;” | “;” | “int”“[”“]” arrayIdent “=”“new”“int”“[” expression “]”“;” | arrayIdent “[” expression “]”“=” expression “;”. block = “{” { statement } “}”. condition = expression ( “==” | “!=” | “<” | “<=” | “>” | “>=” ) expression. expression = [ ( “+” | “-” ) ] term { ( “+” | “-” ) term }. term = factor { ( “*” | “/” ) factor }. Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen EBNF-Definition für Mini-Java (2) factor = ident | number | “(” expression “)” | “Integer”“.”“parseInt”“(” argsIdent “[” expression “]”“)” | argsIdent “.”“length” | arrayIdent “.”“length” | arrayIdent “[” expression “]”. ident = ( letter | “_” | “$” ) { letter | digit }. number = ( “0” | digit { digit | “0” } ). digit = “1” | “2” | . . . | “9”. letter = “A” | . . . | “Z” | “a” | . . . | “ z”. argsIdent = ident. arrayIdent = ident. Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Operationen auf Sprachen Seien L, L1 und L2 beliebige Sprachen (Wortmengen) über einem gemeinsamen Alphabet. Dann definieren wir: def 1. Komplex-Produkt: L1 L2 = {w1 w2 | w1 ∈ L1 , w2 ∈ L2 } (also L∅ = ∅L = ∅; L{ε} = {ε}L = L) def 2. n-fache Iteration: L0 = {ε}, Ln+1 := LLn def S 3. Stern-Operation: L∗ = n∈N Ln Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Semantik der EBNF (1) Die Semantik der EBNF definieren wir durch Rekursion über die EBNF-Terme. Sei E eine EBNF-Definition (wobei S das Startsymbol, N die Menge der Nonterminals und A die Menge der Terminals sei) und ET die Menge der EBNF-Terme. Dann ist die von E erzeugte Sprache L(E) definiert als JSKE , wobei J KE : ET P(A∗ ) wie folgt definiert ist (vgl. Klaeren [5], S. 107): Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Semantik der EBNF (2) 1 Für V ∈ N ist JαKE def JV KE = ∅ Robert Giegerich A&D II, Vorlesung 2010 falls V = α. eine Regel in E ist sonst Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Semantik der EBNF (2) 1 2 Für V ∈ N ist JαKE def JV KE = ∅ falls V = α. eine Regel in E ist sonst def J“w ”KE = {w } Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Semantik der EBNF (2) 1 2 3 Für V ∈ N ist JαKE def JV KE = ∅ falls V = α. eine Regel in E ist sonst def J“w ”KE = {w } q y def (α) E = JαKE Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Semantik der EBNF (2) 1 2 3 4 Für V ∈ N ist JαKE def JV KE = ∅ falls V = α. eine Regel in E ist sonst def J“w ”KE = {w } q y def (α) E = JαKE q y def [α] E = {ε} ∪ JαKE Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Semantik der EBNF (2) 1 2 3 4 5 Für V ∈ N ist JαKE def JV KE = ∅ falls V = α. eine Regel in E ist sonst def J“w ”KE = {w } q y def (α) E = JαKE q y def [α] E = {ε} ∪ JαKE q y def {α} E = JαK∗E Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Semantik der EBNF (2) 1 2 3 4 5 6 Für V ∈ N ist JαKE def JV KE = ∅ falls V = α. eine Regel in E ist sonst def J“w ”KE = {w } q y def (α) E = JαKE q y def [α] E = {ε} ∪ JαKE q y def {α} E = JαK∗E def Jα1 . . . αn KE = Jα1 KE . . . Jαn KE Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Semantik der EBNF (2) 1 2 3 4 5 6 7 Für V ∈ N ist JαKE def JV KE = ∅ falls V = α. eine Regel in E ist sonst def J“w ”KE = {w } q y def (α) E = JαKE q y def [α] E = {ε} ∪ JαKE q y def {α} E = JαK∗E def Jα1 . . . αn KE = Jα1 KE . . . Jαn KE def Jα1 | · · · | αn KE = Jα1 KE ∪ · · · ∪ Jαn KE Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Beispiel eines syntaktisch korrekten Mini-Java-Programms class BubbleSort { public static void main(String[] args) { int[] array = new int[args.length]; int i = 0; while (i < args.length) { array[i] = Integer.parseInt(args[i]); i = i+1; } i = 1; while (i < array.length) { int j = array.length - 1; while (j >= i) { if (array[j] < array[j-1]) { int tmp = array[j]; array[j] = array[j-1]; array[j-1] = tmp; } j = j-1; } i = i+1; } i = 0; while (i < array.length) { System.out.println(array[i]); i = i+1; } } } Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen EBNF-Definition für Mini-Java (1) program = “class” ident “{” mainMethod “}”. mainMethod = “public”“static”“void”“main”“(”“String”“[”“]” argsIdent “)” block. statement = “int” ident “=” expression “;” | ident “=” expression “;” | “if”“(” condition “)” statement | “while”“(” condition “)” statement | block | “System”“.”“out”“.”“println”“(” expression “)”“;” | “;” | “int”“[”“]” arrayIdent “=”“new”“int”“[” expression “]”“;” | arrayIdent “[” expression “]”“=” expression “;”. block = “{” { statement } “}”. condition = expression ( “==” | “!=” | “<” | “<=” | “>” | “>=” ) expression. expression = [ ( “+” | “-” ) ] term { ( “+” | “-” ) term }. term = factor { ( “*” | “/” ) factor }. Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen EBNF-Definition für Mini-Java (2) factor = ident | number | “(” expression “)” | “Integer”“.”“parseInt”“(” argsIdent “[” expression “]”“)” | argsIdent “.”“length” | arrayIdent “.”“length” | arrayIdent “[” expression “]”. ident = ( letter | “_” | “$” ) { letter | digit }. number = ( “0” | digit { digit | “0” } ). digit = “1” | “2” | . . . | “9”. letter = “A” | . . . | “Z” | “a” | . . . | “ z”. argsIdent = ident. arrayIdent = ident. Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Syntaxdiagramme für EBNF-Definitionen (1) “w ” : V: - w - für alle w ∈ A. - V - für alle V ∈ N. - α [α] : ? - α {α} : Robert Giegerich A&D II, Vorlesung 2010 ? Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Syntaxdiagramme für EBNF-Definitionen (2) α1 . . . αn : α1 | · · · | αn : - α1 - ··· - αn - α1 .. . - 6 - αn Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Beispiel: Syntaxdiagramme für Mini-Java (1) program ident class { mainMethod } mainMethod public static void ( Robert Giegerich A&D II, Vorlesung 2010 String main [ ] argsIdent ) block Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Beispiel: Syntaxdiagramme für Mini-Java (2) statement int ident ident = if expression = expression ; condition ( while ; statement ) ( condition . out statement ) block System . println ( expression ) ; ; int [ ] arrayIdent = new arrayIdent Robert Giegerich A&D II, Vorlesung 2010 [ expression int ] [ = expression expression ] ; ; Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Beispiel: Syntaxdiagramme für Mini-Java (3) != condition expression == expression < <= block { } statement Robert Giegerich A&D II, Vorlesung 2010 >= > Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Beispiel: Syntaxdiagramme für Mini-Java (4) expression term term + + − − term factor * factor / Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Beispiel: Syntaxdiagramme für Mini-Java (5) factor ident number ( Integer expression . ) parseInt argsIdent . length arrayIdent . length arrayIdent [ expression Robert Giegerich A&D II, Vorlesung 2010 argsIdent ( [ expression ] ) ] Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Beispiel: Syntaxdiagramme für Mini-Java (6) number ident digit letter digit letter _ 0 digit $ Robert Giegerich A&D II, Vorlesung 2010 0 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Beispiel: Syntaxdiagramme für Mini-Java (7) letter A ... Z digit 1 a ... ... 9 z Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld Einführung Formale Sprachen Kontextfreie Grammatiken EBNF-Definitionen Weiterführende Literatur K. Arnold, J. Gosling: JavaTM - Die Programmiersprache. Addison-Wesley, 1996. T.H. Cormen, C.E. Leierson, R.L. Rivest: Introduction to Algorithms. MIT Press, 1990. D. Flanagan: Java in a Nutshell. O’Reilly & Associates Inc., 1996. F. Jobst: Programmieren in Java. Hanser Verlag, 1996. H. Klaeren: Vom Problem zum Programm. 2.Auflage, B.G. Teubner Verlag, 1991. K. Echtle, M. Goedicke: Lehrbuch der Programmierung mit Java. dpunkt-Verlag, 2000. Robert Giegerich A&D II, Vorlesung 2010 Universität Bielefeld