Formale Grammatik
Eine formale Grammatik ist ein mathematisches Werkzeug, um formale Sprachen zu beschreiben.
Eine Grammatik besteht aus einer Reihe von Regeln, nach denen sich die Wörter der Sprache ableiten lassen.
Zusätzlich zu den Symbolen des Alphabets der Sprache, die hier Terminalsymbole genannt werden, werden hier noch so genannte Nicht-Terminalsymbole eingeführt. Wenn alle Nicht-Terminalsymbole nach den Regeln der Grammatik zu den Terminalsymbolen eines Wortes abgeleitet werden können, entspricht dieses Wort den Regeln der Grammatik und gehört damit zu der dazugehörigen Sprache. Jede Regel entspricht der Form X ::= Y
, lies: "X kann zu Y abgeleitet werden". X
muss dabei ein Nichtterminalsymbol sein[1], Y
darf beliebig viele Nicht- und Terminalsymbole enthalten.
<RoemischeZahl> ::= <Tausender> <Hunderter> <Zehner> <Einer>
<Tausender> ::= M <Tausender> | ε
<Hunderter> ::= C | CC | CCC | CD | D | DC | DCC | DCCC | CM | ε
<Zehner> ::= X | XX | XXX | XL | L | LX | LXX | LXXX | XC | ε
<Einer> ::= I | II | III | IV | V | VI | VII | VIII | IX | ε
Diese Regeln bedeuten Folgendes:
- Eine
<RoemischeZahl>
besteht aus einer<Tausender>
-, einer<Hunderter>
-, einer<Zehner>
- und einer<Einer>
-Stelle in dieser Reihenfolge. - Die
<Tausender>
-Stelle ist entweder leer – dafür steht dasε
– oder besteht aus einemM
, gefolgt von noch mehr<Tausender>
n, die aber auch leer sein dürfen. Der senkrechte Strich|
steht für das oder. - Die
<Hunderter>
-Stelle ist entweder einC
, einCC
, ... einCM
oder leer. - Die
<Zehner>
und die<Einer>
funktionieren genau wie die Hunderter.
Syntax
Syntaxelement | Erläuterung |
---|---|
<Symbol>
|
Nichtterminalsymbole setzt man in spitze Klammern. |
Sekt | Selters
|
Der senkrechte Strich trennt zwei Optionen, von denen nur eine gewählt werden kann. |
ε
|
ε steht für das leere Symbol, das Nichts. |
<A> ::= ???
|
Ersetze <A> durch ???
|
Das leere Symbol ε ist kein Leerzeichen! ε bedeutet, dass an dieser Stelle gar kein Zeichen steht und das Leerzeichen ist ein Zeichen!
Ableitung von Wörtern aus den Regeln
Durch wiederholte Anwendung der Regeln einer Grammatik kann aus einem Nichtterminalsymbol ein vollständiges Wort abgeleitet werden, das keine Nichtterminalsymbole mehr enthält, z.B. aus dem Nichtterminalsymbol <RoemischeZahl>
das Wort MMXXIII
.
Ableitungsschritt von... | ... nach... | Angewandte Regel | |
---|---|---|---|
<RoemischeZahl>
|
→ | <Tausender><Hunderter><Zehner><Einer>
|
<RoemischeZahl> ::= <T><H><Z><E>
|
<Tausender><Hunderter><Zehner><Einer>
|
→ | M<Tausender><Hunderter><Zehner><Einer>
|
<Tausender> ::= M<Tausender>
|
M<Tausender><Hunderter><Zehner><Einer>
|
→ | MM<Tausender><Hunderter><Zehner><Einer>
|
<Tausender> ::= M<Tausender>
|
MM<Tausender><Hunderter><Zehner><Einer>
|
→ | MM<Hunderter><Zehner><Einer>
|
<Tausender> ::= ε
|
MM<Hunderter><Zehner><Einer>
|
→ | MM<Zehner><Einer>
|
<Hunderter> ::= ε
|
MM<Zehner><Einer>
|
→ | MMXX<Einer>
|
<Zehner> ::= XX
|
MMXX<Einer>
|
→ | MMXXIII
|
<Einer> ::= III
|
Die Reihenfolge dieser Ableitungsschritte ist nicht fest, man hätte auch zuerst die <Einer>
zu III
ableiten können.
Zur Visualisierung der Ableitung zeichnet man Ableitungsbäume:
Die letztendlich abgeleiteten Terminalsymbole stehen dann unten in den Blättern des Baumes.
Zum Weiterlesen
Fußnoten
- ↑ Wir beschränken uns hier der Einfachheit halber auf so genannte kontextfreie Grammatiken. Andere Grammatiken gestatten mehr Freiheiten für
X
.