|
|
Zeile 9: |
Zeile 9: |
|
| |
|
| * Eine Sprache, die [[römische Zahlen]] beschreibt, hat das Alphabet <math>\lbrace \textrm{I}, \textrm{V}, \textrm{X}, \textrm{L}, \textrm{C}, \textrm{D}, \textrm{M} \rbrace</math> und enthält Wörter wie <math>\textrm{XLII}</math> oder <math>\textrm{MMXXIII}</math>. | | * Eine Sprache, die [[römische Zahlen]] beschreibt, hat das Alphabet <math>\lbrace \textrm{I}, \textrm{V}, \textrm{X}, \textrm{L}, \textrm{C}, \textrm{D}, \textrm{M} \rbrace</math> und enthält Wörter wie <math>\textrm{XLII}</math> oder <math>\textrm{MMXXIII}</math>. |
| * Eine Sprache, die chemische Verbindungen beschreibt, könnte das Alphabet <math>\lbrace \textrm{H}, \textrm{He}, \textrm{Li}, \textrm{Be}, \dots, \textrm{Ts}, \textrm{Og}, {}_0, {}_1, {}_2, {}_3, {}_4, {}_5, {}_6, {}_7, {}_8, {}_9 \rbrace</math> haben und enthält Wörter wie <chem>PuF6</chem> oder <chem>C169719H270466N45688O52238S911</chem>. | | * Eine Sprache, die chemische Verbindungen beschreibt, könnte das Alphabet <chem>\lbrace H, He, Li, Be, \dots, Ts, Og, {}_0, {}_1, {}_2, {}_3, {}_4, {}_5, {}_6, {}_7, {}_8, {}_9 \rbrace</chem> haben und enthält Wörter wie [https://de.wikipedia.org/wiki/Plutonium(VI)-fluorid <chem>PuF6</chem>] oder [https://de.wikipedia.org/wiki/Titin <chem>C169719H270466N45688O52238S911</chem>]. |
|
| |
|
| == Grammatik == | | == Grammatik == |
| Nicht alle Wörter, die aus den Symbolen eines Alphabets gebildet werden können, sind auch in der Sprache enhalten. Zum Beispiel können aus dem Alphabet für römische Zahlen auch Wörter wie <math>\textrm{MIMIMI}</math> gebildet werden, die keine gültigen römischen Zahlen darstellen. Denn zu einer Sprache gehören auch '''Regeln''' zur Bildung der Wörter. Diese Regeln fasst man zu einer [[Formale Sprache#Grammatik|Grammatik]] zusammen.
| |
|
| |
|
| === Beispiel ===
| | Siehe [[Formale Grammatik]]. |
| <syntaxhighlight lang="bnf" line="1">
| |
| <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 | ε
| |
| </syntaxhighlight>Diese Regeln bedeuten Folgendes:
| |
| | |
| # Eine <code><RoemischeZahl></code> besteht aus einer <code><Tausender></code>-, einer <code><Hunderter></code>-, einer <code><Zehner></code>- und einer <code><Einer></code>-Stelle ''in dieser Reihenfolge''.
| |
| # Die <code><Tausender></code>-Stelle ist ''entweder'' leer – dafür steht das <code>ε</code> – ''oder'' besteht aus einem <code>M</code>, gefolgt von noch mehr <code><Tausender></code>n, die aber auch leer sein dürfen. Der senkrechte Strich <code>|</code> trennt zwei Alternativen.
| |
| # Die <code><Hunderter></code>-Stelle ist entweder ein <code>C</code>, ein <code>CC</code>, ... ein <code>CM</code> oder leer.
| |
| # Die <code><Zehner></code> und die <code><Einer></code> funktionieren genau wie die Hunderter.
| |
| | |
| === Syntax ===
| |
| {| class="wikitable"
| |
| |+
| |
| !Syntaxelement
| |
| !Erläuterung
| |
| |-
| |
| |<code><Symbol></code>
| |
| |Dies nennt man ''Nichtterminalsymbol'', dieses muss noch weiter durch die Anwendung von Regeln abgeleitet werden, bis irgendwann ein Wort entstanden ist, das keine Nichtterminalsymbole mehr enthält.
| |
| |-
| |
| |<code>Sekt <nowiki>|</nowiki> Selters</code>
| |
| |Der senkrechte Strich trennt zwei Optionen, von denen nur eine gewählt werden kann.
| |
| |-
| |
| |ε
| |
| |ε steht für das ''leere Symbol'', das Nichts.
| |
| |-
| |
| |<code><A> ::= ???</code>
| |
| |Ersetze <code><A></code> durch <code>???</code>
| |
| |}
| |
| | |
| === 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 <code><RoemischeZahl></code> das Wort <code>MMXXIII</code>.
| |
| {| class="wikitable"
| |
| |+
| |
| !Ableitungsschritt von...
| |
| !
| |
| !... nach...
| |
| !Angewandte Regel
| |
| |-
| |
| |<code><RoemischeZahl></code>
| |
| |→
| |
| |<code><Tausender><Hunderter><Zehner><Einer></code>
| |
| |<code><RoemischeZahl> ::= <T><H><Z><E></code>
| |
| |-
| |
| |<code><Tausender><Hunderter><Zehner><Einer></code>
| |
| |→
| |
| |<code>M<Tausender><Hunderter><Zehner><Einer></code>
| |
| |<code><Tausender> ::= M<Tausender></code>
| |
| |-
| |
| |<code>M<Tausender><Hunderter><Zehner><Einer></code>
| |
| |→
| |
| |<code>MM<Tausender><Hunderter><Zehner><Einer></code>
| |
| |<code><Tausender> ::= M<Tausender></code>
| |
| |-
| |
| |<code>MM<Tausender><Hunderter><Zehner><Einer></code>
| |
| |→
| |
| |<code>MM<Hunderter><Zehner><Einer></code>
| |
| |<code><Tausender> ::= ε</code>
| |
| |-
| |
| |<code>MM<Hunderter><Zehner><Einer></code>
| |
| |→
| |
| |<code>MM<Zehner><Einer></code>
| |
| |<code><Hunderter> ::= ε</code>
| |
| |-
| |
| |<code>MM<Zehner><Einer></code>
| |
| |→
| |
| |<code>MMXX<Einer></code>
| |
| |<code><Zehner> ::= XX</code>
| |
| |-
| |
| |<code>MMXX<Einer></code>
| |
| |→
| |
| |<code>MMXXIII</code>
| |
| |<code><Einer> ::= III</code>
| |
| |}
| |
| Die Reihenfolge dieser Ableitungsschritte ist nicht fest, man hätte auch zuerst die <code><Einer></code> zu <code>III</code> ableiten können.
| |
| | |
| Zur Visualisierung der Ableitung zeichnet man '''[[Baum (Datenstruktur)|Ableitungsbäume]]''':
| |
| | |
| {{#mermaid:graph TD
| |
| rz("<code><RoemischeZahl></code>") --- t1("<code><Tausender></code>") & h("<code><Hunderter></code>") & z("<code><Zehner></code>") & e("<code><Einer></code>")
| |
| t1 --- m1("<strong><code>M</code></strong>")
| |
| t1 --- t2("<code><Tausender></code>")
| |
| t2 --- m2("<strong><code>M</code></strong>")
| |
| t2 --- t3("<code><Tausender></code>")
| |
| t3 --- eps1("<code>ε</code>")
| |
| h --- eps2("<code>ε</code>")
| |
| z --- xx("<strong><code>XX</code></strong>")
| |
| e --- iii("<strong><code>III</code></strong>")
| |
| classDef node stroke:none,fill:none;
| |
| }}
| |
| | |
| Die letztendlich abgeleiteten Terminalsymbole stehen dann unten in den Blättern des Baumes.
| |
|
| |
|
| == Zum Weiterlesen == | | == Zum Weiterlesen == |