1. Sprachen u. Grammatik u. BNF u. Syntaxdiagramm
Thema 1: Sprachen und Grammatiken, BNF, Syntaxdiagramm¶
1. Formale Sprachen¶
-
Definition: Eine formale Sprache ist eine Menge von Zeichenketten (Strings), die aus einem bestimmten Alphabet gebildet werden und durch definierte Regeln beschrieben werden.
-
Alphabet (Σ): Eine endliche Menge von Symbolen, z.B. Σ = {a, b}.
-
Wörter: Endliche Sequenzen von Symbolen aus dem Alphabet, z.B. "abba".
-
Sprache (L): Eine Menge von Wörtern, z.B. L = {"a", "ab", "abb"}.
2. Grammatiken¶
-
Definition: Eine Grammatik beschreibt, wie gültige Wörter einer Sprache gebildet werden.
-
Bestandteile einer Grammatik (G):
-
N (Nichtterminalsymbole): Platzhalter für Symbolfolgen (z.B. S, A, B).
-
Σ (Terminalsymbole): Endsymbole der Sprache (z.B. a, b).
-
P (Produktionsregeln): Regeln zur Erzeugung von Symbolfolgen (z.B. S → aSb | ε).
-
S (Startsymbol): Das Symbol, von dem aus die Ableitung beginnt.
-
Beispiel:
-
Grammatik G = ({S}, {a, b}, P, S) mit P = {S → aSb | ε}
-
Diese Grammatik erzeugt die Sprache: L = {"", "ab", "aabb", "aaabbb", ...} (symmetrische Wörter mit gleich vielen a und b).
3. Backus-Naur-Form (BNF)¶
-
Definition: Eine Notation zur formalen Beschreibung der Syntax von Programmiersprachen und Grammatiken.
-
Syntax:
::=
→ Definiert eine Produktionsregel (z.B.<A> ::= a | b
)|
→ Alternativen (ODER-Verknüpfung), z.B.a | b
bedeutet „a oder b“
Beispiel:
-
BNF zur Beschreibung von einfachen arithmetischen Ausdrücken:
-
Erklärung: Ein Ausdruck
<expr>
kann ein Term<term>
sein oder ein Term plus ein weiterer Ausdruck.
3.1 Erweiterte EBNF-Symbole:¶
Symbol | Bedeutung | Beispiel | Erklärung |
---|---|---|---|
{ } |
Wiederholung (0 oder mehr) | { a } |
Beliebig viele a (auch 0-mal möglich) |
[ ] |
Optional (0 oder 1-mal) | [ b ] |
b kann vorkommen, muss aber nicht |
( ) |
Gruppierung | ( a | b ) c |
|
+ |
Mindestens einmal wiederholen | a+ (in manchen Varianten) |
a muss mindestens einmal vorkommen |
? |
Optional (wie [ ] in EBNF) |
b? (in manchen Varianten) |
b ist optional |
Beispiele für EBNF-Regeln:¶
-
Wiederholung (
{ }
):<digit> ::= { 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 }
→ Beliebig viele Ziffern, z.B.
123
,4567
, oder auch nichts (0-mal). -
Optional (
[ ]
):<sign> ::= [ + | - ]
→ Ein optionales Plus- oder Minuszeichen, z.B.
+5
,-10
, oder einfach42
. -
Kombination von Wiederholung und Optional:
<identifier> ::= letter { letter | digit } [ "_" { letter | digit } ]
→ Definiert ein Identifier:
- Beginnt mit einem Buchstaben
- Gefolgt von beliebigen Buchstaben/Ziffern
- Optional kann ein Unterstrich mit weiteren Buchstaben/Ziffern folgen
- Beispiele:
x1
,var_name
,count123
- Gruppierung (
( )
):
<expr> ::= ( <term> "+" <term> ) | ( <term> "-" <term> )
→ Ein Ausdruck ist entweder
term + term
oderterm - term
.4. Syntaxdiagramme (Railroad Diagrams)¶
-
Definition: Grafische Darstellung von BNF-Regeln zur besseren Visualisierung.
-
Elemente:
-
Ovale oder Rechtecke für Terminalsymbole.
-
Pfeile für den Ablauf.
-
Schleifen für Wiederholungen.
-
Beispiel:
-
Syntaxdiagramm für
<expr> ::= <term> | <term> + <expr>
- Start →
<term>
→ (+) →<expr>
(mit einer Schleife für wiederholte Additionen).
- Start →
5. Wichtige Konzepte und Anwendungen¶
-
Warum wichtig?
-
Grundlegend für die Definition von Programmiersprachen.
-
Wird in Compilern, Parsern und zur Syntaxanalyse verwendet.
-
-
Typische Prüfungsaufgaben:
-
Umwandlung von Grammatiken in BNF.
-
Erstellen von Syntaxdiagrammen.
-
Ableitung von Wörtern mit gegebenen Produktionsregeln.
Beispielaufgaben:¶
-
1. Umwandlung von Grammatiken in BNF
Gegeben:
BNF-Form:
2. Erstellen von Syntaxdiagrammen
3.1 Erstellen von BNF aus Syntaxdiagramm
3.2 Ableitung von Wörtern mit gegebenen Produktionsregeln