EBNF: Unterschied zwischen den Versionen

Aus KGS-Wiki
K (Runde Klammern ergänzt)
Keine Bearbeitungszusammenfassung
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Die [[EBNF|Erweiterte Backus-Naur-Form]] ist eine Möglichkeit, um [[Formale Sprache#Grammatik|Grammatiken]] verkürzt aufzuschreiben. Die wesentlichen neuen Syntax-Elemente sind:
Die [[EBNF|Erweiterte Backus-Naur-Form (EBNF)]] ist eine Möglichkeit, um [[formale Grammatik]]en verkürzt aufzuschreiben. Die wesentlichen neuen Syntax-Elemente sind:


* Runde Klammern <code>( ... )</code> funktionieren wie in der Mathematik.
* Runde Klammern <code>( ... )</code> funktionieren wie in der Mathematik und gruppieren Operanden und Operatoren. Beispiel: <code>Mo|ein</code> ist entweder <code>Mo</code> oder <code>ein</code>; <code>M(o|e)in</code> ist entweder <code>Moin</code> oder <code>Mein</code>.
* Eckige Klammern <code>[ ... ]</code> markieren einen optionalen Teil <code>http[s]</code> heißt: <code>http</code> oder <code>https</code>
* Eckige Klammern <code>[ ... ]</code> markieren einen optionalen Teil. Beispiel: <code>http[s]</code> heißt: <code>http</code> oder <code>https</code>
* Geschweifte Klammern <code>{ ... }</code> markieren einen Teil, der beliebig oft wiederholt werden darf. <code>h{t}ps</code> heißt: <code>hps</code>, <code>htps</code> oder auch <code>htttttttttttttttttps</code>
* Geschweifte Klammern <code>{ ... }</code> markieren einen Teil, der beliebig oft wiederholt werden darf. Beispiel: <code>h{t}ps</code> heißt: <code>hps</code>, <code>htps</code> oder auch <code>htttttttttttttttttps</code>
 
== Beispiele ==
 
=== Telefonnummern ===


== Beispiel ==
Die folgende Grammatik definiert Telefonnummern in EBNF:<syntaxhighlight lang="ebnf" line="1">
Die folgende Grammatik definiert Telefonnummern in EBNF:<syntaxhighlight lang="ebnf" line="1">
<Telefonnummer> ::= 0 <ZifferAusserNull> {<Ziffer>} / <ZifferAusserNull> {<Ziffer>}
<Telefonnummer> ::= 0 <ZifferAusserNull> {<Ziffer>} / <ZifferAusserNull> {<Ziffer>}
<Ziffer> ::= 0 | <ZifferAusserNull>
<ZifferAusserNull> ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<ZifferAusserNull> ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<Ziffer> ::= 0 | <ZifferAusserNull>
</syntaxhighlight>lies:
 
# Eine Telefonnummer besteht aus einer <code>0</code>, gefolgt von einer Ziffer außer 0, beliebig vielen Ziffern (<code>{<Ziffer>}</code>), einem <code>/</code>, wieder einer Ziffer außer 0 und zuletzt noch einmal beliebig vielen Ziffern
# Eine Ziffer ist entweder 0 oder eine Ziffer außer 0
# Eine Ziffer außer 0 ist entweder 1, 2, 3, 4, 5, 6, 7, 8 oder 9
 
=== Römische Zahlen ===
Die Grammatik für römische Zahlen aus dem Artikel [[Formale Grammatik]] kann in EBNF verkürzt werden zu:<syntaxhighlight lang="ebnf" line="1">
<RoemischeZahl> ::= {M} (CD|CM|[D][C][C][C]) (XL|XC|[L][X][X][X]) (IV|IX|[V][I][I][I])
</syntaxhighlight>
</syntaxhighlight>
{| class="wikitable"
|+lies
!Element
!Erläuterung
|-
|<code>{M}</code>
|beliebig viele <code>M</code>
|-
|<code><nowiki>(CD|CM|</nowiki></code>...<code>)</code>
|<code>CD</code>, <code>CM</code> oder ...
|-
|... <code>[D][C][C][C]</code>
|... <code>C</code>, <code>CC</code>, <code>CCC</code>, <code>D</code>, <code>DC</code>, <code>DCC</code>, <code>DCCC</code> oder  nichts.
|-
|<code><nowiki>(XL|XC|</nowiki></code>...<code>)</code>
|<code>XL</code>, <code>XC</code> oder ...
|-
|... <code>[L][X][X][X]</code>
|... <code>X</code>, <code>XX</code>, <code>XXX</code>, <code>L</code>, <code>LX</code>, <code>LXX</code>, <code>LXXX</code> oder nichts
|-
|<code><nowiki>(CD|CM|</nowiki></code>...<code>)</code>
|<code>IV</code>, <code>IM</code> oder ...
|-
|... <code>[D][C][C][C]</code>
|... <code>I</code>, <code>II</code>, <code>III</code>, <code>V</code>, <code>VI</code>, <code>VII</code>, <code>VIII</code> oder  nichts.
|}
== Weblinks ==
* {{Inf-Schule|4.2.2.2.4|Grammatiken in EBNF}}
[[Kategorie:Sprache]]
[[Kategorie:Sprache]]
[[Kategorie:Theoretische Informatik]]
[[Kategorie:Theoretische Informatik]]

Aktuelle Version vom 17. September 2024, 13:40 Uhr

Die Erweiterte Backus-Naur-Form (EBNF) ist eine Möglichkeit, um formale Grammatiken verkürzt aufzuschreiben. Die wesentlichen neuen Syntax-Elemente sind:

  • Runde Klammern ( ... ) funktionieren wie in der Mathematik und gruppieren Operanden und Operatoren. Beispiel: Mo|ein ist entweder Mo oder ein; M(o|e)in ist entweder Moin oder Mein.
  • Eckige Klammern [ ... ] markieren einen optionalen Teil. Beispiel: http[s] heißt: http oder https
  • Geschweifte Klammern { ... } markieren einen Teil, der beliebig oft wiederholt werden darf. Beispiel: h{t}ps heißt: hps, htps oder auch htttttttttttttttttps

Beispiele

Telefonnummern

Die folgende Grammatik definiert Telefonnummern in EBNF:

<Telefonnummer> ::= 0 <ZifferAusserNull> {<Ziffer>} / <ZifferAusserNull> {<Ziffer>}
<Ziffer> ::= 0 | <ZifferAusserNull>
<ZifferAusserNull> ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

lies:

  1. Eine Telefonnummer besteht aus einer 0, gefolgt von einer Ziffer außer 0, beliebig vielen Ziffern ({<Ziffer>}), einem /, wieder einer Ziffer außer 0 und zuletzt noch einmal beliebig vielen Ziffern
  2. Eine Ziffer ist entweder 0 oder eine Ziffer außer 0
  3. Eine Ziffer außer 0 ist entweder 1, 2, 3, 4, 5, 6, 7, 8 oder 9

Römische Zahlen

Die Grammatik für römische Zahlen aus dem Artikel Formale Grammatik kann in EBNF verkürzt werden zu:

<RoemischeZahl> ::= {M} (CD|CM|[D][C][C][C]) (XL|XC|[L][X][X][X]) (IV|IX|[V][I][I][I])
lies
Element Erläuterung
{M} beliebig viele M
(CD|CM|...) CD, CM oder ...
... [D][C][C][C] ... C, CC, CCC, D, DC, DCC, DCCC oder nichts.
(XL|XC|...) XL, XC oder ...
... [L][X][X][X] ... X, XX, XXX, L, LX, LXX, LXXX oder nichts
(CD|CM|...) IV, IM oder ...
... [D][C][C][C] ... I, II, III, V, VI, VII, VIII oder nichts.

Weblinks