Folienset 1: Syntax und Semantik - Technische Fakultät

Werbung
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
Herunterladen