EBNF: Unterschied zwischen den Versionen
Aus KGS-Wiki
Sn (Diskussion | Beiträge) (Grammatik für römische Zahlen ergänzt) |
Sn (Diskussion | Beiträge) (Beispiel vertieft, Link ergänzt) |
||
Zeile 5: | Zeile 5: | ||
* 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. <code>h{t}ps</code> heißt: <code>hps</code>, <code>htps</code> oder auch <code>htttttttttttttttttps</code> | ||
== | == Beispiele == | ||
=== Telefonnummern === | |||
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 | ||
< | </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]) | <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 == | |||
* [https://inf-schule.de/4.2.2.2.4 Grammatiken in EBNF auf inf-schule.de {{Flagge|DE}}] | |||
[[Kategorie:Sprache]] | [[Kategorie:Sprache]] | ||
[[Kategorie:Theoretische Informatik]] | [[Kategorie:Theoretische Informatik]] |
Version vom 2. Oktober 2023, 17:06 Uhr
Die Erweiterte Backus-Naur-Form ist eine Möglichkeit, um formale Grammatiken verkürzt aufzuschreiben. Die wesentlichen neuen Syntax-Elemente sind:
- Runde Klammern
( ... )
funktionieren wie in der Mathematik. - Eckige Klammern
[ ... ]
markieren einen optionalen Teilhttp[s]
heißt:http
oderhttps
- Geschweifte Klammern
{ ... }
markieren einen Teil, der beliebig oft wiederholt werden darf.h{t}ps
heißt:hps
,htps
oder auchhtttttttttttttttttps
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:
- 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 - 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:
<RoemischeZahl> ::= {M} (CD|CM|[D][C][C][C]) (XL|XC|[L][X][X][X]) (IV|IX|[V][I][I][I])
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.
|