View
220
Download
0
Category
Preview:
Citation preview
Algorithmen & Datenstrukturen
Prof. Dr. Wolfgang Schramm
EIGENSCHAFTEN VON PROGRAMMIERSPRACHEN
3. Kapitel
1
Übersicht
1. Einführung 2. Algorithmen 3. Eigenschaften von
Programmiersprachen 4. Algorithmenparadigmen 5. Suchen & Sortieren 6. Hashing 7. Komplexität von Algorithmen 8. Abstrakte Datentypen (ADT) 9. Listen 10. Bäume 11. Graphen
2
Lernziele des Kapitels
¨ Sie wissen, was in der InformaGk unter Sprache verstanden wird und kennen wichGge EigenschaLen von Sprachen.
¨ Sie können einfache Sprachen mit regulären Ausdrücken beschreiben.
¨ Sie wissen, was endliche Automaten sind, wissen, wie sie arbeiten und können sie zur Beschreibung einfacher Sprachen einsetzen.
¨ Sie wissen, was eine GrammaGk (in der InformaGk) ist und können einfache Sprachen mit Hilfe von GrammaGken beschreiben.
2
3
Inhalt
o Sprache/Programmiersprache (Begriff) o EigenschaLen von Sprachen o Reguläre Ausdrücke o Automaten o GrammaGk o Beschreibung von GrammaGkregeln
¤ Reguläre Ausdrücke ¤ (E) BNF ¤ Syntaxdiagramme
o SemanGk
4
Sprachen 1/2
o Programmiersprache ¤ vom Rechner verarbeitbare Sprache.
o Programm ¤ Darstellung eines Algorithmus in einer Programmiersprache.
o Maschinensprache ¤ Programmiersprache, die den Befehlssatz einer Hardware (CPU)
widerspiegelt. Bsp.: 0100 1001 1110
¤ Auf (der speziellen Hardware) ausführbar. ¤ Für Menschen nicht (bzw. schwer) verständlich.
5
Sprachen 2/2
o Assembler ¤ Maschinensprache als Befehlswörter.
Bsp.: load 4 reg1, add 4 reg1, jumpifless 87 ¤ Für Menschen nicht bzw. schwer verständlich.
o Höhere Programmiersprache ¤ Programmiersprache, die rechnerunabhängig ist.
Bsp.: Java ¤ An Algorithmen, nicht an Maschinen orienGert. ¤ Für Menschen verständlich.
…wenn auch besser als Maschinensprache
6
Ausführung von Sprachen 1/2
o Maschinensprachen (Assembler) ¤ Vom Rechner ausführbar.
o Höhere Programmiersprachen 1. InterpretaGon
Beispiele: PHP Perl
010010 110111 100010 001111
Interpreter
Programm
Direkte Programmausführung
7
Ausführung von Sprachen 2/2
2. Übersetzung
Beispiele: C FORTRAN Ada 010010
110111 100010 001111
Compiler
Programm
1. Schritt: Übersetzen
2. Schritt: Ausführen
010010 110111 100010 001111
Programm
8
Compiler
Quellprogramm
Folge von Token
Ableitungsbaum
Zielprogramm
Optimiertes Zielprogramm
Syntaktische Analyse
Lexikalische Analyse
Semantische Analyse
Optimierung
SCANNER
PARSER
Grammatik
Grammatik
9
Eine Sprache exakt und formal beschreiben
o Beispiel Temperatur ¤ Menschen: 27 ° ¤ Computer:
n eine Folge bestehend aus den Zeichen „2“, „7“, „°“
n Zur InterpretaGon durch den Computer
„es ist 27 Grad“
Wie werden die Zeichen gruppiert? Worte 123, FCK, °°°00°°°, 5F, 6°K, -4K, -253°C, -460°F, 27°, 373K, 32°F
Welche Zeichen werden erwartet? Alphabet „2“, „7“, „°“, aber auch „0“, „8“, „9“, „C“, „F“, „K“, „-“
Welche Worte sind „sinnvoll“? Sprache
ü ð Grammatik!
10
EigenschaLen von Sprachen 1/2
Lexik: BesGmmt den Auhau der Grundelemente (z.B. Worte oder Zahlen) der Sprache.
Alphabet (für die Deutsche Sprache: A,B, ..., Z, a,b, ..., z, Ä, Ö, Ü,ä, ö, u, ß), Sonderzeichen (§, [, ], €, ...) Satzzeichen (., ?, !, ...) Ziffern (0, ,1, ..., 9) Π (das griechische PI) lexikalisch falsch
Syntax / Syntaxregeln:
VorschriLen über den korrekten Auhau von Sätzen. Es wird definiert, wie Sätze als Sequenzen von Grundbausteinen zusammengesetzt werden können.
Der Elefant aß die Erdnuss. syntakGsch korrekt Der Elefant aß Erdnuss die. syntakGsch falsch
11
EigenschaLen von Sprachen 2/2
SemanJk Legt die Bedeutung eines syntakGsch korrekten Satzes fest. Der Elefant aß die Erdnuss. semanGsch korrekt Die Erdnuss aß den Elefanten. semanGsch falsch
PragmaJk: Beschreibt Beziehungen der Sprache zum subjekGven Benutzer. Zielt ab auf Lesbarkeit, Erlernbarkeit u.ä. Führende Nullen können weggelassen werden.
12
Alphabet und Sprache in der InformaGk 1/3
o Im Sinne der MathemaGk und InformaGk ist eine Sprache eine Menge von Zeichenreihen. Die Sprache wird dabei auf Lexik und Syntax reduziert. Für Lexik wird der Begriff Alphabet verwendet.
o Ein Alphabet ist eine nicht leere, endliche Menge A von Zeichen a ∈ A. A1 = {A, ..., Z} A2= {a} A3 = {A, ..., Z, a, ..., z, 0, ..., 9} A4= {#, 0} Lies: Element
von
13
Alphabet und Sprache in der InformaGk 2/3
o Die Menge aller Zeichenreihen A* über einem Alphabet ist definiert durch:
¤ ε ∈ A* die leere Zeichenreihe ist eine Zeichenreihe.
¤ x ∈A*, a ∈ A* ⇒ x ° a ∈ A* („° “ ist der Verke}ungsoperator).
¤ Andere Zeichenreihen gibt es nicht.
ATA, ATTTNBNM ∈ A1* a, aa, aaa .... ∈ A2*
Paul, Omega, x12 ∈ A3* #, #0#000 ∈ A4*
o Eine Sprache L (L, wie engl. language) ist eine Teilmenge aller Zeichenreihen über einem Alphabet A: L ⊂ A* Deutsche Sprache ⊂ {A, ..., Z, a, ..., z, ß, 0, ..., 9, ?, !, ...}*
Epsilon (leeres Wort)
14
Alphabet und Sprache in der InformaGk 3/3
Wie werden die Zeichenreihen einer besGmmten Sprache beschrieben?
a) Aufzählung aller Zeichenreihen oder Wörter, die zur Sprache gehören (das ist nur bei endlichen Sprachen möglich!).
L1 = {a, aaa, aaaaa}
b) MathemaJsche Charakterisierung der zur Sprache gehörenden Wörter als Menge (sog. formale Sprachen).
L2 = {an | n ≥ 3} oder L3 = {an bn cn | n ≥ 1}
c) GrammaJken: sind eine endliche konstrukGve Beschreibung einer im allgemeinen unendlichen Menge.
Damit werden Programmiersprachen beschrieben.
15
Reguläre Ausdrücke
Reguläre Ausdrücke bieten einfache Operatoren, um KonstrukJonsregeln (GrammaJk) für ZeichenkeWen festzulegen: o Die Auswahl ermöglicht die Wahl zwischen 2 AlternaGven:
a | b oder auch a + b (eher ungewöhnlich). o Die Sequenz (KonkatenaGon) beschreibt das hintereinander Schreiben: ab.
o Die IteraJon ermöglicht das Wiederholen von Satzbausteinen: a* (0, 1 oder n-‐mal) oder a+ (1 oder n-‐mal) ≡ aa* .
o OpJonale Satzbausteine: a? Abkürzung für a | ε (eher ungewöhnlich).
o Zusätzlich besteht die Möglichkeit der Klammerung zur Strukturierung. Ansonsten gilt „Punkt-‐ vor Strichrechnung“.
o Zeichenklassen: Sta} char → a | b | c | etc. schreibt man als Abkürzung auch char → [a – z].
Prio
rität
Es gilt:
• V ist ein Alphabet.
• Ein Zeichen aus V (a, b) und ε ist ein regulärer Ausdruck.
16
Reguläre Ausdrücke -‐ Beispiele
o Binärzahlen beginnen mit 1, danach kann eine beliebig lange Folge von 1 und 0 kommen:
1 (1 + 0)* ⇒ 1, 10, 1010, 100000001111
o Will man auch noch die 0, als einzige mit diesem Symbol startende Zahl:
0 + 1 (1 + 0)* ⇒ 0, 1, 10, 1010, 100000001111
o Bezeichner einer Programmiersprache müssen mit einem Buchstaben beginnen, dürfen nach dem ersten Buchstaben aber auch Ziffern enthalten:
(a + b + ... + z) (a + b + ... + z + 0 + ... + 9)* ⇒ a, ADS, ma07, u2
o Verwendung von Regulären Ausdrücken in der InformaGk:
¤ Festlegung von Datenformaten für Programmeingaben.
¤ Festlegen von Mustern zum Suchen in Texten.
17
Diskussion
¨ Schreiben Sie eine regulären Ausdruck für die „computer aided anything“-‐ Abkürzungen (CAD, CAE, …). (Gleiche Sprache wie der Automat!)
18
Reguläre Ausdrücke vs. Endliche Automaten
o Hauptaspekt ¤ Reguläre Ausdrücke beschreiben den Erzeugungsaspekt von regulären
Sprachen. ¤ Endliche Automaten beschreiben den AktzepGerungsaspekt von regulären
Sprachen.
o Sprachumfang ¤ „unsere“ Automaten für reguläre Sprachen ¤ „unsere“ GrammaGken für kontex�reie Sprachen
¤ Anmerkung kontex�rei, nicht regulär n regulär ⊂ kontex�rei Bsp: 00 … 011 … 1
n n
20
Automat: DefiniGon
o Eine endlicher Automat ist ein 5-‐Tupel M = (Z, V, δ, q0, F)
mit ¤ Z: Menge von Zuständen ¤ V: Menge von Zeichen: Eingabealphabet ¤ δ: Z × V → Z ÜbergangsfunkGon ¤ q0 ∈ Z Anfangszustand ¤ F ⊆ Z Endzustände
¤ Anmerkung n Wir betrachten Automaten nur in der graphischen Darstellung, d.h. δ entspricht beschriLeten Kanten.
21
Beispiel: Automat
Anfangszustand
Zustand Endzustand
(hier nur einer)
Eingabealphabet Übergangsfunktion δ (q2, 1) = q3
q0
q2
q3
0
1
1
1
0
q1
1
0
22
Vom Automat akzepGerte Sprache
AkzepGeren o Ein Automat akzepGert ein Zeichen, wenn es vom aktuellen
Zustand einen mit diesem Zeichen markierten Pfeil gibt. ¤ D.h. die ÜberführungsfunkGon ist definiert.
o Ein Automat akzepGert ein Wort, wenn er ¤ ausgehend vom Anfangszustand ¤ nacheinander jedes Zeichen des Wortes verarbeiten kann ¤ und mit dem letzten Zeichen des Wortes einen Endzustand erreicht.
o Die von einem Automaten akzepGerte Sprache ist die Menge aller akzepGerten Worte.
23
Beispiel: akzepGerender Automat
q0 q1
1
q2 q3
1
1
1
0 0 0 Akzeptierte Sprache?
Akzeptierte Sprache: Worte mit gerader Anzahl von Nullen und Einsen
q0
0
34
Diskussion
¨ Partnerdiskussion
¨ Schreiben Sie eine Automaten, alle die „computer aided anything“-‐ Abkürzungen (CAD, CAE, …) akzepGert.
¨ 3 Min.
36
Beispiel: GrammaGk 1/2
Eine GrammaJk beschreibt den korrekten Auhau von Wörtern einer
Sprache. Deutsche Sätze o In Prosa
Deutsche Sätze bestehen aus Subjekt, Prädikat und – manchmal – aus dem Objekt.
37
Beispiel: GrammaGk 2/2
Deutsche Sätze o Als GrammaGk
Satz à Subjekt Prädikat Satz à Subjekt Prädikat Objekt
Satz
Subjekt Prädikat Objekt
Satz
Subjekt Prädikat
Nacheinander-Nennung =
“oder”
38
GrammaGk (kontex�rei) 1/2
Eine GrammaJk zur Beschreibung von Syntax ist ein 4-‐Tupel:
G = (T, N, P, S)
T: Menge von Token, sog. Terminalsymbole (TS).
N: Menge von Nonterminalsymbolen (NTS).
P: Menge von ProdukJonen (oder ProdukGonsregeln), wobei jede ProdukGon aus einem Nonterminalsymbol (linke Seite der ProdukGon) einem Pfeil (→) und einer Folge von Terminalsymbolen und/oder Nonterminalsymbolen (rechte Seite der ProdukGon) besteht.
S: Ein ausgezeichnetes Nonterminalsymbol -‐ das Startsymbol.
39
GrammaGk (kontex�rei) 2/2
Die Sprache L(G) einer GrammaJk besteht aus allen aus dem Startsymbol S abgeleiteten Zeichenke}en (Wörtern), die nur Terminalsymbole enthalten. Ein Wort ist eine Folge von Terminalsymbolen, die durch wiederholtes Anwenden von Regeln erzeugt werden kann, wobei das Startsymbol S der Ausgangspunkt der Erzeugung ist.
GrammaGken werden in zweierlei Hinsicht genutzt:
¤ Um Worte einer Sprache zu erzeugen. ¤ Um festzustellen, ob ein gegebenes Wort zur Sprache gehört.
Es gibt verschiedene Formalismen zur Beschreibung von GrammaGken:
¤ Reguläre Ausdrücke (einfacher Mechanismus, nicht für alles geeignet) ¤ Backus Naur Form (BNF). ¤ Erweiterte Bauckus Naur Form (EBNF). ¤ Syntaxdiagramme.
Ableiten
Analysieren
40
GrammaGk – Beispiel: Telefonnummer 1/2
o Telefonnummern (lokal) ¤ Besteht aus beliebig vielen Ziffern (mindestens einer) ¤ Beginnt nicht mit „0“
o GrammaGk (1. Versuch) ¤ T: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ¤ N: TN, Nummer, Ziffer ¤ P: TN à Nummer
Nummer à Nummer Ziffer Nummer à Ziffer Ziffer à 0 Ziffer à 1 … Ziffer à 9
¤ S: TN Problem: kann mit Null beginnen
Rekursion! erste Prod.: rekursiv
zweite Prod.: terminierend
41
GrammaGk – Beispiel: Telefonnummer 2/2
o GrammaGk (2. Versuch) ¤ T: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ¤ N: TN, Nummer, Ziffer ¤ P: TN à NichtNull Nummer
Nummer à Nummer Ziffer Nummer à ε Ziffer à 0 Ziffer à NichtNull NichtNull à 1 … NichtNull à 9
¤ S: TN ü
42
Darstellung von GrammaGken
o Wie bisher (siehe vorige Folien) o BNF, Backus-‐Naur-‐Form
¤ Idee: maschinenlesbar n bessere Unterscheidung von Terminalen/Non-‐Terminalen
n „::=“ sta} „à“ o EBNF, erweiterte Backus-‐Naur-‐Form, besser lesbar als BNF
¤ Idee: Abkürzungen für n OpGonalität n Wiederholung
o Syntaxdiagramme ¤ Idee: grafische Darstellung
43
Backus-‐Naur-‐Form (BNF)
o Einfacher Formalismus für die Syntaxbeschreibung von Kunstsprachen (= Programmiersprachen).
o Dieser Formalismus hat selbst wiederum eine Syntax – man spricht deshalb von der Metasyntax der BNF:
¤ Ersetzungsregeln in der Form: linke Seite ::= rechte Seite
¤ . Markiert das Regelende
¤ | AlternaGve
¤ ( ) Klammerung zusammengehöriger Symbole
¤ < > schließen Nonterminalsymbole ein
¤ Terminalsymbole werden (der besseren Kenntlichkeit) oL in “ “ eingeschlossen oder feW gedruckt
44
Backus-‐Naur-‐Form (BNF) -‐ Beispiel
o Bezeichner einer Programmiersprache müssen mit einem Buchstaben beginnen, dürfen nach dem ersten Buchstaben aber auch Ziffern enthalten:
<Ziffer> ::= 1|2|3|4|5|6|7|8|9|0.
<Buchstabe> ::= a|b|c| ... |z.
<Zeichenke}e> ::= <Buchstabe> | <Ziffer> | <Zeichenke}e> <Ziffer> | <Zeichenke}e> <Buchstabe>.
<Bezeichner> ::= <Buchstabe> | <Buchstabe> <Zeichenke}e>.
Rekursion
45
Beispiel: Bezeichner
Ableitung eines Bezeichners „a“
Bezeichner
a
Buchstabe
Bezeichner
Buchstabe
Ziffer
Zeichenkette
a
3
b
Buchstabe
Zeichenkette
Ableitung eines Bezeichners „ab3“
46
Ableitungsbaum
o Ein Ableitungsbaum ist eine graphische Darstellung einer Ableitung mit folgenden EigenschaLen: ¤ Die Wurzel ist das Startsymbol. ¤ Die inneren Knoten sind Nonterminalsymbole. ¤ Die Blä}er sind Terminalsymbole. ¤ Hat ein Knoten K die Kinder (von links nach rechts)
X1, X2, … XN (Xi sind Terminale oder Nonterminale), so gibt eine Regel K ::= X1 X2 … XN
n Anmerkung Das generierte Wort erhält man durch traversieren nach der Inorder-‐Strategie.
47
Beispiel: GrammaGk für Ausdrücke 1/3
Ausdrücke ¤ sind AddiGonen oder SubtrakGonen. ¤ Bestehen aus zwei Operanden (ganzen Zahlen),
die mit „+“ oder „-‐“ verknüpL sind. ¤ Zahlen haben mindestens eine Stelle; führende Nullen erlaubt.
48
Beispiel: GrammaGk für Ausdrücke 2/3
o GrammaGk ¤ N = {<Ausdruck>, <Zahl>, <Ziffer>, <Operator>} ¤ T = {0, 1, …, 9, +, -‐} ¤ P = <Ausdruck> ::= <Zahl> <Operator> <Zahl>.
<Zahl> ::= <Ziffer><Zahl> | <Ziffer>. <Ziffer> ::= 1|2|3|4|5|6|7|8|9|0. <Operator> ::= +|-‐.
¤ S = <Ausdruck> Zwei <Zahl> Produktionen mit gleichem Non-Terminal
Auswahl je nach Ziel: ein- oder mehrstellige Zahl?
Non-Terminale in spitzer Klammer
Startsymbol muss Non-Terminal sein
Rekursion!
49
Beispiel: GrammaGk für Ausdrücke 3/3
Ableitung eines Ausdruckes „351+7“
Ausdruck
Zahl Zahl Operator
Zahl
Zahl 3
5
1
7
+ Ziffer
Ziffer
Ziffer
Ziffer
50
Erweiterte Backus-‐Naur-‐Form (EBNF)
o Erweitert die BNF um einige Metasymbole, um die Syntax bequemer bzw. leichter verständlich zu beschreiben.
o Es gibt viele verschiedene EBNFs – oL gibt es für die Beschreibung der Syntax einer Programmiersprache eine eigene EBNF
o Bekannteste Erweiterung der Metasyntax der EBNF:
¤ Ersetzungsregeln in der Form: linke Seite → rechte Seite
¤ [ ] opGonale Klammerung
¤ { } Wiederholungsklammerung (0 -‐ n mal)
¤ { }+ Wiederholungsklammerung (1 -‐ n mal)
• . Markiert das Regelende
• | AlternaGve
• ( ) Klammerung zusammengehöriger Symbole
• < > schließen Nonterminalsymbole ein
• Terminalsymbole werden (der besseren Kenntlichkeit) oL in “ “ eingeschlossen oder feW gedruckt
Die (alten) BNF-Regeln gelten weiterhin.
51
Erweiterte Backus-‐Naur-‐Form (EBNF) – Beispiel
o Bezeichner einer Programmiersprache müssen mit einem Buchstaben beginnen, dürfen nach dem ersten Buchstaben aber auch Ziffern enthalten:
<Ziffer> ::= 1|2|3|4|5|6|7|8|9|0.
<Buchstabe> ::= a|b|c| ... |z.
<Bezeichner> ::= <Buchstabe> {<Buchstabe>| <Ziffer> }.
52
Erweiterte Backus-‐Naur-‐Form (EBNF) – komplizierteres Beispiel 1/3
expression → term | expression add_op term.
term → factor | term mul_op factor.
factor → number | variable | "(" expression ")".
add_op → "+" | "-‐".
mul_op → "*" | "/".
number → digit | number digit.
digit → "0" | "1" | . . . | "9".
variable → char | variable char.
char → "a" | . . . | "z".
Einfache arithmetische Ausdrücke
53
Erweiterte Backus-‐Naur-‐Form (EBNF) – komplizierteres Beispiel: Erweiterung 2/3
expression → term | expression add_op term.
term → factor | term mul_op factor.
factor → [sign] ( number | variable | "(" expression ")" ).
sign → "+" | "-‐".
add_op → "+" | "-‐".
mul_op → "*" | "/".
number → digit | number digit.
digit → "0" | "1" | . . . | "9".
variable → char | variable char.
char → "a" | . . . | "z".
Einfache arithmetische Ausdrücke (erweitert um Vorzeichen)
54
Erweiterte Backus-‐Naur-‐Form (EBNF) – komplizierteres Beispiel: Umformung 3/3
expression → term {add_op term}.
term → factor {mul_op factor}.
factor → [sign] ( number | variable | "(" expression ")" ).
sign → "+" | "-‐".
add_op → "+" | "-‐".
mul_op → "*" | "/".
number → {digit}+.
variable → {char }+.
digit → "0" | "1" | . . . | "9".
char → "a" | . . . | "z".
Einfache arithmetische Ausdrücke (umgeformt)
55
Alte EBNF für Java
Von James Gosling, Bill Joy, Guy Steele, Gilard Bracha, Alex Buckley:
h}p://download.oracle.com/javase/7/specs/jls/JLS-‐JavaSE7.pdf
DefiniGonszeichen (zwischen linker und rechter Seite eine Prod.): :
o Terminalsymbole: fixed width font
o Nonterminalsymbole: italic type
o DefiniGon eines Nonterminalsymbols (in der 1. Zeile): Name:
o AlternaGven: ¤ jeweils in einer neuen Zeile (auf gleicher Einrückungshöhe), ¤ reicht eine Zeile nicht aus, dann wird versetzt eingerückt (Fortsetzungszeile).
¤ Steht one of hinter dem Doppelpunkt, dann ist eines der Terminalsymbole der folgenden Zeile auszuwählen.
¤ Steht but not auf der rechten Seite (also ab der 2. Zeile) vor Terminalsymbolen (es können auch verschiedene Angaben über boolesche Operatoren verknüpL werden), dann sind die angegeben Terminalsymbole nicht zulässig.
¤ Steht any auf der rechten Seite vor Nonerminalsymbolen (in normalem SchriLtyp), dann ist dies eine abkürzende Schreibweise für besGmmte Nonterminalsymbole.
o OpGonale Angaben: Gefgestelltes opt nach dem Symbol
So ist die Darstellung in der Sprachbeschreibung.
Die Syntax der Zusammenfassung (Kap. 18) ist als „normale“ EBNF
angegeben.
56
EBNF für Java -‐ Beispiel
expression: term expression add_op term
term: factor term mul_op factor
factor: sign opt Number sign opt Variable sign opt( expression )
add_op: one of + -
sign: one of + -
mul_op: one of * /
number: digit number digit
digit: one of 0 1 2 3 4 5 6 7 8 9
variable: char variable char
InputCharacter:
UnicodeInputCharacter but not CR or LF char:
any letter
57
Syntaxzusammenfassung von Java
o In der Java-‐DokumentaGon wird die Syntax wie oben beschrieben verwendet. In der Syntaxzusammenfassung gibt es wiederum eine eigene EBNF.
o The grammar presented piecemeal in the preceding chapters is much be}er for exposiGon, but it is not well suited as a basis for a parser. The grammar presented in this chapter is the basis for the reference implementaGon.
o The grammar uses the following BNF-‐style convenGons: o [x] denotes zero or one occurrences of x. o {x} denotes zero or more occurrences of x. o x | y means one of either x or y.
58
Syntaxdiagramme
Graphische Darstellung der Syntax; Netzwerk, das besteht aus: ¤ Namen von Syntaxdiagrammen ¤ Symbolen eines Alphabets ¤ Pfeilen
Ziel: Finde einen Weg vom Eingang zum Ausgang
Metasymbole: Reihenfolge
Nichtterminalsymbole (NTS)
Terminalsymbole
60
Syntaxdiagramme – Beispiel 1/2
term
add_op expr term
expr
factor
mul_op term factor
term
number
variable
factor
) expr (
62
Diskussion
¨ Partnerdiskussion
w Schreiben Sie eine GrammaGk für Gleitkommazahlen: -‐ mind. eine Vorkommastelle, -‐ mind. eine Nachkommastelle.
w Die Regel <Ziffer> ::= 1|2|3|4|5|6|7|8|9|0. können Sie verwenden, ohne Sie aufzuschreiben.
¨ 8 Min.
63
Diskussion
¨ Partnerdiskussion
w Leiten Sie Zahl „2,81“ mit der GrammaGk Ihrer Nachbargruppe ab!
¨ 2 Min.
65
SemanGk
o Zur unmissverständlichen Beschreibung einer Programmiersprache am besten: mathemaGsche Beschreibungsform.
o DenotaJonale SemanJk: Eine Beschreibung der FunkGon eines Programms durch die Festlegung des Ein-‐/Ausgabeverhaltens (beobachtbares Verhalten).
o OperaJonale SemanJk: Beschreibung der Abfolge der einzelnen Berechnungsschri}e (schri}weise Zustandsänderung), die bei der Auswertung eines Programms anfallen.
o AxiomaJsche SemanJk: Ein-‐ und Ausgaben erfüllen besGmmte Vor-‐ und Nachbedingungen. Die Vorbedingung für das Gesamtprogramm wird durch die Programmausführung in die Nachbedingung überführt.
66
SemanGk und PragmaGk -‐ in der Praxis
o In der Praxis: natürliche Sprache, auch wenn sie MehrdeuGgkeiten enthält.
o Man unterscheidet:
¤ staGsche SemanGk
¤ dynamische SemanGk
PragmaGk o Die PragmaJk legt besGmmte Arten der Nutzung der Programmiersprache fest.
Die Konzepte hierzu kommen von außerhalb der Programmiersprache.
o Beispiele: ¤ möglichst gut lesbare Gestaltung des Quelltextes, ¤ Namensvergabe von Variablen
Recommended