Erweiterte Backus-Naur-Form
Die Erweiterte Backus-Naur-Form, kurz EBNF, ist eine Erweiterung der Backus-Naur-Form (BNF), die ursprünglich von Niklaus Wirth zur Darstellung der Syntax der Programmiersprache Pascal eingeführt wurde. Sie ist eine formale Metasyntax (Metasprache), die benutzt wird, um kontextfreie Grammatiken darzustellen.
Die EBNF ist von der ISO als ISO/IEC 14977:1996(E) standardisiert. Die Beispiele in diesem Artikel richten sich nach dem ISO-Standard. Gelegentlich werden auch andere erweiterte Varianten der BNF als EBNF bezeichnet.
Grundlagen
Ein Text, etwa Quelltext eines Computerprogramms, besteht zunächst aus Terminalsymbolen, das heißt, aus sichtbaren Zeichen wie Buchstaben, Ziffern, Satzzeichen, Leerzeichen etc.
Die EBNF definiert Produktionsregeln, in denen Symbolfolgen jeweils einem Nichtterminalsymbol zugeordnet werden, etwa <syntaxhighlight lang="ebnf">
ZifferAusserNull = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; Ziffer = "0" | ZifferAusserNull ;
</syntaxhighlight>
In dieser Produktionsregel wird das Nichtterminalsymbol Ziffer definiert, das stets auf der linken Seite steht. Der vertikale Strich stellt eine (exklusive) Alternative dar, die Terminalsymbole werden in Anführungszeichen eingeschlossen und mit einem Semikolon als Endezeichen abgeschlossen. Eine Ziffer ist also eine 0 oder eine ZifferAusserNull, die wiederum eine natürliche Zahl zwischen 1 und 9 sein kann.
Eine Produktionsregel kann auch eine Folge von Terminal- oder Nichtterminalsymbolen enthalten, wobei die Bestandteile durch Kommata verbunden werden, etwa: <syntaxhighlight lang="ebnf">
Zwoelf = "1", "2" ; Zweihundertundeins = "2", "0", "1" ; Dreihundertzwoelf = "3", Zwoelf ; ZwoelfTausendzweihunderteins = Zwoelf, Zweihundertundeins ;
</syntaxhighlight>
Ausdrücke, die ausgelassen oder wiederholt werden dürfen, können mit geschweiften Klammern dargestellt { … } werden: <syntaxhighlight lang="ebnf">
NatuerlicheZahl = ZifferAusserNull {, Ziffer } ;
</syntaxhighlight>
Hier passen die Texte 1, 2, …,10, …,12345, … . Zu beachten ist, dass alles, was innerhalb der geschweiften Klammern steht, beliebig oft, jedoch auch keinmal vorkommen kann.
Eine Option kann durch eckige Klammern [ … ] dargestellt werden: <syntaxhighlight lang="ebnf">
GanzeZahl = "0" | [ "-" ], NatuerlicheZahl ;
</syntaxhighlight>
Eine ganze Zahl ist also die Null (0) oder eine natürliche Zahl, der optional ein Minuszeichen vorangestellt werden kann. Hier passen also alle ganzen Zahlen wie 0, -3, 1234 etc.
Außerdem ist die Möglichkeit vorgesehen, eine definierbare Anzahl an Wiederholungen zu erlauben. <syntaxhighlight lang="ebnf">
LeerzeichenAlsTab = 4 * " " , "Yes" ;
</syntaxhighlight>
Hier wird vor der Zeichenfolge "Yes" viermal das " "-Zeichen erwartet.
Motivation zur Erweiterung der BNF
Die BNF benötigt teilweise umständliche Konstrukte, um optionale Elemente, also Elemente, die ausgelassen werden dürfen, sowie sich wiederholende Elemente darzustellen, da sie – anders als die EBNF – nicht "[…]" für Optionen oder "{…}" für optionale Wiederholungen kennt, sondern diese Fälle durch entsprechende Alternativen (mittels '|'-Fällen), Rekursion oder auch 'leerem Inhalt' löst.
In der Spezifikation von PL/1 wurden bereits eckige Klammern "[…]" für Optionen verwendet. Niklaus Wirth hat in der Definition der Sprache Pascal zusätzlich geschweifte Klammern "{…}" für Wiederholungen in die BNF eingeführt und nannte dies extended BNF (erweiterte BNF).
Alle Formulierungen in einer EBNF-Syntax lassen sich auch in BNF ausdrücken. Die EBNF wurde von Wirth aus Gründen der besseren Lesbarkeit und kompakteren Schreibweise geschaffen.
Zahldefinition in BNF
Eine Zahl ist eine Ziffernfolge mit optionalem Minuszeichen als Vorzeichen. In BNF muss man mehrere Alternativen und eine Rekursion für die Ziffernwiederholung verwenden:
BNF <syntaxhighlight lang="bnf">
<Zahl> ::= <Positive Zahl> | - <Positive Zahl> | 0 <Positive Zahl> ::= <Ziffer ausser Null><Optionale Ziffernfolge> <Optionale Ziffernfolge> ::= <Ziffer> <Optionale Ziffernfolge> | ε
</syntaxhighlight>
Lies: Eine Zahl ist entweder eine positive Zahl oder ein Minuszeichen gefolgt von einer positiven Zahl oder das Zeichen Null. Eine positive Zahl ist eine Ziffer außer Null gefolgt von einer optionalen Ziffernfolge. Eine optionale Ziffernfolge ist eine Ziffer gefolgt von einer optionalen Ziffernfolge oder leer.
Zahldefinition in EBNF
In EBNF kann man dies in einer einzigen Regel ohne Rekursion darstellen:
EBNF <syntaxhighlight lang="ebnf">
Zahl = ([ "-" ], ZifferAusserNull, { Ziffer }) | "0" ;
</syntaxhighlight>
Lies: Eine Zahl besteht aus einem optionalen Minuszeichen, gefolgt von einer Ziffer außer Null, gefolgt von beliebig vielen weiteren Ziffern (auch keiner weiteren Ziffer). Oder: Eine Zahl besteht aus dem Zeichen Null.
Das Minuszeichen kann weggelassen werden. Die Wiederholung kann auch keinmal auftreten (optionale Wiederholung). Die EBNF benötigt hier nur eine einzige Regel ohne Alternative, während die BNF drei Regeln mit vier Alternativen benötigt, inklusive einer Rekursion (<Optionale Ziffernfolge> enthält sich selbst in der eigenen Definition).
Die EBNF kennzeichnet Terminalsymbole durch Anführungszeichen und verwendet ein Endezeichen. Nichtterminalsymbole werden nicht in spitze Klammern eingeschlossen. Durch die Anführungszeichen sind Verwechslungen ausgeschlossen.
Andere Ergänzungen und Modifikationen
Die EBNF beseitigt einige Schwachstellen der BNF:
- Die BNF verwendet selbst die Symbole (<, >, |, ::=). Wenn diese in der definierten Sprache auftauchen, kann die BNF nicht ohne Modifikation oder Erklärung verwendet werden.
- Eine BNF-Syntax kann eigentlich nur einzeilige Regeln enthalten.
Die EBNF löst diese Probleme:
- Terminalsymbole werden grundsätzlich in Anführungszeichen geschrieben ("…" oder '…'). Auf die spitzen Klammern ("<…>") bei Nichtterminalsymbolen kann dann verzichtet werden.
- Ein Endezeichen, normalerweise das Semikolon, bei manchen Autoren ein Punkt, kennzeichnet das Ende jeder Regel.
Darüber hinaus sind Erweiterungsmechanismen, Definition der Wiederholungszahl, Herausnehmen von Alternativen (zum Beispiel alle Zeichen ohne Anführungszeichen), Kommentare usw. vorgesehen.
Trotz aller Erweiterungen ist die EBNF nicht „mächtiger“ als die BNF in Hinsicht der Sprachen, die sie definieren kann. Prinzipiell lässt sich jede in EBNF definierte Grammatik auch durch Regeln in der BNF darstellen, was jedoch häufig in einer wesentlich umfangreicheren Beschreibung resultiert.
Unter Umständen wird auch jede erweiterte BNF als EBNF bezeichnet. So nutzt das W3C eine EBNF zur Spezifikation von XML.<ref>{{#if:Vorlage:Cite book/URL|{{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}| |}}}}{{#if:{{#if:
|
| {{#if:
| {{#if:
| [[|Vorlage:Cite book/Name]]
| Vorlage:Cite book/Name
}}
}}{{#if:
| {{#if:
| , [[|Vorlage:Cite book/Name]]
| Vorlage:Cite book/Name
}}
}}{{#if:
| {{#if:
| , [[|Vorlage:Cite book/Name]]
| Vorlage:Cite book/Name
}}
}}{{#if:
| {{#if:
| , [[|Vorlage:Cite book/Name]]
| Vorlage:Cite book/Name
}}
}}{{#if:
| {{#if:
| , [[|Vorlage:Cite book/Name]]
| Vorlage:Cite book/Name
}}
}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}
}}Vorlage:Cite book/Name|{{#if:
|
| {{#if:
| {{#if:
| [[|Vorlage:Cite book/Name]]
| Vorlage:Cite book/Name
}}
}}{{#if:
| {{#if:
| , [[|Vorlage:Cite book/Name]]
| Vorlage:Cite book/Name
}}
}}{{#if:
| {{#if:
| , [[|Vorlage:Cite book/Name]]
| Vorlage:Cite book/Name
}}
}}{{#if:
| {{#if:
| , [[|Vorlage:Cite book/Name]]
| Vorlage:Cite book/Name
}}
}}{{#if:
| {{#if:
| , [[|Vorlage:Cite book/Name]]
| Vorlage:Cite book/Name
}}
}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}{{#if:|Vorlage:Cite book/Name}}
}}Vorlage:Cite book/Name: }}{{#if:Vorlage:Cite book/URL|{{#if:{{#if: Notation | {{#invoke: WLink|getEscapedTitle|1=Notation}} | ? }}|[{{#invoke:Vorlage:Internetquelle|archivURL|1={{#invoke:URLutil|getNormalized|1=Vorlage:Cite book/URL}}}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{#if: Notation | {{#invoke: WLink|getEscapedTitle|1=Notation}} | ? }}}}]{{#if:| ()}}{{#if:{{#if: | ( }}{{#if: | Originaltitel: {{{script-title}}} }}{{#if: | {{#if: | , }}deutsch: {{{trans-title}}} }}{{#if: | ) }}| {{#if: | ( }}{{#if: | Originaltitel: {{{script-title}}} }}{{#if: | {{#if: | , }}deutsch: {{{trans-title}}} }}{{#if: | ) }}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{#if: | ( }}{{#if: | Originaltitel: {{{script-title}}} }}{{#if: | {{#if: | , }}deutsch: {{{trans-title}}} }}{{#if: | ) }}}}}}}}|{{#if:http://www.w3c.org/TR/REC-xml#sec-notation%7C{{#if:{{#invoke:TemplUtl%7Cfaculty%7CVorlage:Cite book/URL}}|{{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{#invoke:WLink|getEscapedTitle|1={{#if: Notation | {{#invoke: WLink|getEscapedTitle|1=Notation}} | ? }}}}}}|[{{#invoke:URLutil|getNormalized|1=http://www.w3c.org/TR/REC-xml#sec-notation}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{#invoke:WLink|getEscapedTitle|1={{#if: Notation | {{#invoke: WLink|getEscapedTitle|1=Notation}} | ? }}}}}}]}}{{#if:| ({{#if:{{#if: | ( }}{{#if: | Originaltitel: {{{script-title}}} }}{{#if: | {{#if: | , }}deutsch: {{{trans-title}}} }}{{#if: | ) }}Vorlage:Cite book/URLW3C ® {{#if: | via {{{via}}} }}Vorlage:Cite book/DateVorlage:Cite book/URL{{#if: {{#if: 2019-04-01
| {{#iferror: {{#invoke:DateTime|format|2019-04-01|ISO}}
| 0001-01-01
}}
| 0001-01-01
}} | {{#if:{{#invoke:TemplUtl|faculty|{{#if: 2019-04-01
| {{#if: {{#invoke:DateTime|format|2019-04-01 |ISO|noerror=1}} || 1 }}
| 1
}}}}||1}}}}
| )
| {{#if:{{#ifeq:englisch|de||{{#if:englisch|1}}}}{{#if: | {{{at}}}{{#if: | , }}}}{{#if: | {{{id}}}{{#if: | , }}}}{{#if: | {{{doi}}}{{#if: | , }}}}{{#if: | PMID {{{pmid}}}{{#if: | , }}}}{{#if: | {{{arxiv}}}{{#if: | , }}}}{{#if: | Bibcode: {{{bibcode}}}{{#if: | , }}}}{{#if: | Volltext bei PMC: {{{pmc}}}{{#if: | , }}}}| ;
| )}}}}}}{{#if:{{#if: | ( }}{{#if: | Originaltitel: {{{script-title}}} }}{{#if: | {{#if: | , }}deutsch: {{{trans-title}}} }}{{#if: | ) }}| {{#if: | ( }}{{#if: | Originaltitel: {{{script-title}}} }}{{#if: | {{#if: | , }}deutsch: {{{trans-title}}} }}{{#if: | ) }}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{#if: | ( }}{{#if: | Originaltitel: {{{script-title}}} }}{{#if: | {{#if: | , }}deutsch: {{{trans-title}}} }}{{#if: | ) }}}}}}}}}}{{#if:http://www.w3c.org/TR/REC-xml#sec-notation%7C{{#if:{{#invoke:URLutil%7CisResourceURL%7C1=http://www.w3c.org/TR/REC-xml#sec-notation}}%7C%7C}}}}{{#if:{{#if: Notation | {{#invoke: WLink|getEscapedTitle|1=Notation}} | ? }}|{{#if:{{#invoke:WLink|isValidLinktext|1={{#if: Notation | {{#invoke: WLink|getEscapedTitle|1=Notation}} | ? }}|lines=0}}||}}}}{{#if: | In: {{#invoke:Vorlage:Internetquelle|TitelFormat|titel=}}}}{{#if: W3C ® {{#if: | via {{{via}}} }}| W3C ® {{#if: | via {{{via}}} }}{{#if: Vorlage:Cite book/DateVorlage:Cite book/URL|,|{{#if: {{#if: 2019-04-01
| {{#iferror: {{#invoke:DateTime|format|2019-04-01|ISO}}
| 0001-01-01
}}
| 0001-01-01
}} | {{#if:{{#invoke:TemplUtl|faculty|{{#if: 2019-04-01
| {{#if: {{#invoke:DateTime|format|2019-04-01 |ISO|noerror=1}} || 1 }}
| 1
}}}}||,}}}}}}}}{{#if: Vorlage:Cite book/Date| {{#if:{{#invoke:DateTime|format|Vorlage:Cite book/Date|noerror=1}}
|{{#invoke:DateTime|format|Vorlage:Cite book/Date|T._Monat JJJJ}}
|{{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, datum=Vorlage:Cite book/Date|class=Zitationswartung}} }}{{#if: Vorlage:Cite book/URL|,|{{#if: {{#if: 2019-04-01
| {{#iferror: {{#invoke:DateTime|format|2019-04-01|ISO}}
| 0001-01-01
}}
| 0001-01-01
}} | {{#if:{{#invoke:TemplUtl|faculty|{{#if: 2019-04-01
| {{#if: {{#invoke:DateTime|format|2019-04-01 |ISO|noerror=1}} || 1 }}
| 1
}}}}||,}}}}}}}}{{#if: | S. {{#if: Vorlage:Cite book/URL|,|{{#if: {{#if: 2019-04-01
| {{#iferror: {{#invoke:DateTime|format|2019-04-01|ISO}}
| 0001-01-01
}}
| 0001-01-01
}} | {{#if:{{#invoke:TemplUtl|faculty|{{#if: 2019-04-01
| {{#if: {{#invoke:DateTime|format|2019-04-01 |ISO|noerror=1}} || 1 }}
| 1
}}}}||,}}}}}}}}{{#if: Vorlage:Cite book/URL{{#invoke:TemplUtl|faculty|Vorlage:Cite book/URL}}| {{#if:Vorlage:Cite book/DateW3C ® {{#if: | via {{{via}}} }}|{{#if:Vorlage:Cite book/URL|archiviert|ehemals}}|{{#if:Vorlage:Cite book/URL|Archiviert|Ehemals}}}} {{#if:Vorlage:Cite book/URL|vom|im}} Vorlage:Referrer{{#if:{{#invoke:TemplUtl|faculty|Vorlage:Cite book/URL}}| (nicht mehr online verfügbar)}}{{#if: Vorlage:Cite book/URL| am {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}|Vorlage:Cite book/URL{{#if:21117||(?)}}}}}}{{#if: {{#if: 2019-04-01
| {{#iferror: {{#invoke:DateTime|format|2019-04-01|ISO}}
| 0001-01-01
}}
| 0001-01-01
}}|;}}}}{{#if: {{#if: 2019-04-01
| {{#iferror: {{#invoke:DateTime|format|2019-04-01|ISO}}
| 0001-01-01
}}
| 0001-01-01
}}| {{#if:Vorlage:Cite book/DateW3C ® {{#if: | via {{{via}}} }}Vorlage:Cite book/URL{{#invoke:TemplUtl|faculty|Vorlage:Cite book/URL}}|abgerufen|Abgerufen}} {{#switch: {{#invoke:Str|len| {{#invoke:DateTime|format| {{#if: 2019-04-01
| {{#iferror: {{#invoke:DateTime|format|2019-04-01|ISO}}
| 0001-01-01
}}
| 0001-01-01
}} |ISO|noerror=1}} }}
|4=im Jahr
|7=im
|10=am
|#default={{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, abruf={{#if: 2019-04-01
| {{#iferror: {{#invoke:DateTime|format|2019-04-01|ISO}}
| 0001-01-01
}}
| 0001-01-01
}}|class=Zitationswartung}} }} {{#invoke:DateTime|format|{{#if: 2019-04-01
| {{#iferror: {{#invoke:DateTime|format|2019-04-01|ISO}}
| 0001-01-01
}}
| 0001-01-01
}}|T._Monat JJJJ}}
| {{#invoke:TemplUtl|failure|1=Vorlage:Internetquelle | abruf=2026-MM-TT ist Pflichtparameter}} }}{{#if:{{#ifeq:englisch|de||{{#if:englisch|1}}}}{{#if: | {{{at}}}{{#if: | , }}}}{{#if: | {{{id}}}{{#if: | , }}}}{{#if: | {{{doi}}}{{#if: | , }}}}{{#if: | PMID {{{pmid}}}{{#if: | , }}}}{{#if: | {{{arxiv}}}{{#if: | , }}}}{{#if: | Bibcode: {{{bibcode}}}{{#if: | , }}}}{{#if: | Volltext bei PMC: {{{pmc}}}{{#if: | , }}}}|{{#if:{{#if: | ( }}{{#if: | Originaltitel: {{{script-title}}} }}{{#if: | {{#if: | , }}deutsch: {{{trans-title}}} }}{{#if: | ) }}Vorlage:Cite book/URLW3C ® {{#if: | via {{{via}}} }}Vorlage:Cite book/DateVorlage:Cite book/URL{{#if: {{#if: 2019-04-01
| {{#iferror: {{#invoke:DateTime|format|2019-04-01|ISO}}
| 0001-01-01
}}
| 0001-01-01
}} | {{#if:{{#invoke:TemplUtl|faculty|{{#if: 2019-04-01
| {{#if: {{#invoke:DateTime|format|2019-04-01 |ISO|noerror=1}} || 1 }}
| 1
}}}}||1}}}}
| (
| {{#if: | | (}}
}}{{#ifeq:{{#if:englisch|englisch|de}}|de||
{{#invoke:Multilingual|format|englisch|slang=!|split=[%s,]+|shift=m|separator=, }}}}{{#if: {{#if: | {{{at}}}{{#if: | , }}}}{{#if: | {{{id}}}{{#if: | , }}}}{{#if: | {{{doi}}}{{#if: | , }}}}{{#if: | PMID {{{pmid}}}{{#if: | , }}}}{{#if: | {{{arxiv}}}{{#if: | , }}}}{{#if: | Bibcode: {{{bibcode}}}{{#if: | , }}}}{{#if: | Volltext bei PMC: {{{pmc}}}{{#if: | , }}}}|{{#ifeq:{{#if:englisch|englisch|de}}|de||, }}{{#if: | {{{at}}}{{#if: | , }}}}{{#if: | {{{id}}}{{#if: | , }}}}{{#if: | {{{doi}}}{{#if: | , }}}}{{#if: | PMID {{{pmid}}}{{#if: | , }}}}{{#if: | {{{arxiv}}}{{#if: | , }}}}{{#if: | Bibcode: {{{bibcode}}}{{#if: | , }}}}{{#if: | Volltext bei PMC: {{{pmc}}}{{#if: | , }}}}}})}}{{#if: Vorlage:Cite book/DateVorlage:Cite book/URL{{#if: {{#if: 2019-04-01
| {{#iferror: {{#invoke:DateTime|format|2019-04-01|ISO}}
| 0001-01-01
}}
| 0001-01-01
}} | {{#if:{{#invoke:TemplUtl|faculty|{{#if: 2019-04-01
| {{#if: {{#invoke:DateTime|format|2019-04-01 |ISO|noerror=1}} || 1 }}
| 1
}}}}||1}} }}englisch{{#if: | {{{at}}}{{#if: | , }}}}{{#if: | {{{id}}}{{#if: | , }}}}{{#if: | {{{doi}}}{{#if: | , }}}}{{#if: | PMID {{{pmid}}}{{#if: | , }}}}{{#if: | {{{arxiv}}}{{#if: | , }}}}{{#if: | Bibcode: {{{bibcode}}}{{#if: | , }}}}{{#if: | Volltext bei PMC: {{{pmc}}}{{#if: | , }}}}|{{#if: |: {{
#if:
| „{{
#ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
| Vorlage:Str trim
| {{#invoke:Vorlage:lang|flat}}
}}“
| {{#ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
| „Vorlage:Str trim“
| {{#invoke:Text|quote
|1={{#if:
| {{#invoke:Vorlage:lang|flat}}
| {{#invoke:Vorlage:lang|flat}} }}
|2={{#if: {{#invoke:TemplUtl|faculty|}}|de-CH|de}}
|3=1}} }}
}}{{#if:
| (<templatestyles src="Person/styles.css" />{{#if: | : }}{{#if: | , deutsch: „“ }})
| {{#if:
| ({{#if: | , deutsch: „“ }})
| {{#if: | (deutsch: „“) }}
}}
}}{{#if:
| {{#if:
| {{#if:
| Vorlage:": Text= und 1= gleichzeitig, bzw. Pipe zu viel }} }}
| Vorlage:": Text= fehlt }}{{#if: | {{#if: {{#invoke:Text|unstrip|{{{ref}}}}}
| Vorlage:": Ungültiger Wert: ref=
| {{{ref}}} }}
}}|.{{#if:{{#invoke:TemplUtl|faculty|Vorlage:Cite book/URL}}|{{#if:Vorlage:Cite book/URL||{{#ifeq: Vorlage:Cite book/URL | JaKeinHinweis |{{#switch:
|0|=Vorlage:Toter Link/Core{{#if: http://www.w3c.org/TR/REC-xml#sec-notation | {{#if: | [1] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }} }} | (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.) }}{{#switch: |no|0|= |#default={{#if: || }} }}{{#invoke:TemplatePar|check |opt = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: http://www.w3c.org/TR/REC-xml#sec-notation | {{#if:{{#invoke:URLutil|isWebURL|http://www.w3c.org/TR/REC-xml#sec-notation}} || {{#if: || }} }} | {{#if: | {{#if: || }} | {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: deadurl |checked|deadurl|= |#default= {{#if: || }} }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=http://www.w3c.org/TR/REC-xml#sec-notation Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. ) {{#if: | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }} }}Vorlage:Toter Link/Core{{#switch: |no|0|= |#default= {{#if: || }} }}{{#invoke:TemplatePar|check |all = inline= url= |opt = datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: http://www.w3c.org/TR/REC-xml#sec-notation | {{#if:{{#invoke:URLutil|isWebURL|http://www.w3c.org/TR/REC-xml#sec-notation}} || {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: deadurl |checked|deadurl|= |#default= {{#if: || }} }}[http://www.w3c.org/TR/REC-xml#sec-notation }}|{{#switch: |0|=Vorlage:Toter Link/Core{{#if: http://www.w3c.org/TR/REC-xml#sec-notation | {{#if: | [2] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: | {{#if: | | Vorlage:Toter Link/archivebot }} }} | (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.) }}{{#switch: |no|0|= |#default={{#if: || }} }}{{#invoke:TemplatePar|check |opt = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: http://www.w3c.org/TR/REC-xml#sec-notation | {{#if:{{#invoke:URLutil|isWebURL|http://www.w3c.org/TR/REC-xml#sec-notation}} || {{#if: || }} }} | {{#if: | {{#if: || }} | {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=http://www.w3c.org/TR/REC-xml#sec-notation Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. ) {{#if: | {{#if: | | Vorlage:Toter Link/archivebot }} }}Vorlage:Toter Link/Core{{#switch: |no|0|= |#default= {{#if: || }} }}{{#invoke:TemplatePar|check |all = inline= url= |opt = datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: http://www.w3c.org/TR/REC-xml#sec-notation | {{#if:{{#invoke:URLutil|isWebURL|http://www.w3c.org/TR/REC-xml#sec-notation}} || {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}[http://www.w3c.org/TR/REC-xml#sec-notation }} }}}}}}}}}}{{#if:| {{#invoke:Vorlage:Internetquelle|archivBot|stamp=|text={{#if:Vorlage:Cite book/URL|Vorlage:Webarchiv/archiv-bot}}
}}}}{{#invoke:TemplatePar|check |all= url= titel= |opt= autor= hrsg= format= sprache= titelerg= werk= seiten= datum= abruf= zugriff= abruf-verborgen= archiv-url= archiv-datum= archiv-bot= kommentar= zitat= AT= CH= offline= |cat= {{#ifeq: 0 | 0 | Wikipedia:Vorlagenfehler/Vorlage:Internetquelle}} |template= Vorlage:Internetquelle |format=0 |preview=1 }}{{#invoke:TemplatePar|check
|all = url= title= |opt = script-title= trans-title= archive-url= archiveurl= archive-date= archivedate= authors= vauthors= author= author1= authorlink= authorlink1= author-link= author-link1= author2= author-link2= author3= author-link3= author4= author-link4= author5= author-link5= author6= author7= author8= author9= last= first= last1= first1= last2= first2= last3= first3= last4= first4= last5= first5= last6= first6= last7= first7= last8= first8= last9= first9= others= language= lang= format= website= work= publisher= via= pages= page= at= date= year= id= bibcode= doi= pmid= pmc= arxiv= archivedate= archive-date= archivebot= accessdate= access-date= quote= comment= url-status= ref= url-access= orig-year= editor= editor-link= editor-last= editor-first= editor1-link= editor1-last= editor1-first= editor2= editor2-last= editor2-first= editor2-link= department= series= agency= location= place= publication-place= publication-date= type= asin= doi-broken-date= isbn= issn= jfm= jstor= lccn= mr= oclc= ol= osti= rfc= ssrn= zbl= postscript= df= mode= display-authors= display-editors= book-title= contribution-url= offline= coauthors= month= authorlink2= authorlink3= authorlink4= authorlink5= last10= first10= last11= first11= last12= first12= last13= first13= last14= first14= last15= first15= last16= first16= last17= first17= last18= first18= last19= first19= last20= first20= last21= first21= |cat = Wikipedia:Vorlagenfehler/Vorlage:Cite web |errNS = 0 |template = Vorlage:Cite web |format = |preview = 1 }}Vorlage:Cite book/URL{{#if: Vorlage:Cite book/Webarchiv | Vorlage:Cite book/Meldung }}{{#if: | Vorlage:Cite book/Meldung }}Vorlage:Cite book/Meldung2{{#if: Vorlage:Cite book/ParamBool | Vorlage:Cite book/Meldung }}{{#if: Vorlage:Cite book/ParamBool | Vorlage:Cite book/Meldung }}{{#if: Vorlage:Cite book/ParamBool | Vorlage:Cite book/Meldung }}{{#if: Vorlage:Cite book/ParamBool | Vorlage:Cite book/Meldung }}{{#if: Vorlage:Cite book/ParamBool | Vorlage:Cite book/Meldung }}{{#ifexpr: {{#ifeq:^^|^^|0|1}}{{#ifeq:^^|^^||+1}}{{#ifeq:^^|^^||+1}}{{#ifeq:^^|^^||+1}} > 1 | Vorlage:Cite book/Meldung }}{{#ifexpr: {{#ifeq:^^|^^|0|1}}{{#ifeq:^^|^^||+1}}{{#ifeq:^^|^^||+1}}{{#ifeq:^^|^^||+1}} > 1 | Vorlage:Cite book/Meldung }}{{#ifexpr: {{#ifeq:^^|^^|0|1}}{{#ifeq:^^|^^||+1}} > 1 | Vorlage:Cite book/Meldung }}{{#ifexpr: {{#ifeq:^^|^^|0|1}}{{#ifeq:^^|^^||+1}} > 1 | Vorlage:Cite book/Meldung }}{{#ifexpr: {{#ifeq:^^|^^|0|1}}{{#ifeq:^^|^^||+1}} > 1 | Vorlage:Cite book/Meldung }}{{#ifexpr: {{#ifeq:^^|^^|0|1}}{{#ifeq:^^|^^||+1}} > 1 | Vorlage:Cite book/Meldung }}{{#ifexpr: {{#ifeq:^^|^^|0|1}}{{#ifeq:2019-04-01|^^||+1}} > 1 | Vorlage:Cite book/Meldung }}{{#ifexpr: {{#ifeq:englisch|^^|0|1}}{{#ifeq:^^|^^||+1}} > 1 | Vorlage:Cite book/Meldung }}{{#ifexpr: {{#ifeq:^^|^^|0|1}}{{#ifeq:^^|^^||+1}} > 1 | Vorlage:Cite book/Meldung }}</ref>
Kontrollstrukturen
Die Sprache kann leicht um Kontrollstrukturen, arithmetische Ausdrücke und Ein- bzw. Ausgabeanweisungen ergänzt werden. Dann entstünde bereits eine brauchbare, kleine Programmiersprache.
Die folgenden Zeichen, die im ISO/IEC Standard als normale Darstellung empfohlen werden, wurden hier verwendet:
| Verwendung | Erklärung | Zeichen |
|---|---|---|
| Definition | = | |
| Aufzählung | , | |
| Endezeichen | ; | |
| Alternative | Trennt die möglichen Alternativen. Es ist aber als exklusives Oder zu lesen, da nur das eine oder das andere erlaubt ist. Beides gleichzeitig geht nicht. | | |
| Option | Umschließt optionale Angaben. Diese Inhalte können, müssen aber nicht gesetzt werden. | [ … ] |
| Optionale Wiederholung | Umschlossene Elemente dürfen beliebig oft wiederholt werden. Die Elemente dürfen aber auch ausgelassen werden. | { … } |
| Gruppierung | Fasst umschlossene Elemente als eine Einheit zusammen. | ( … ) |
| Anführungszeichen, 1. Variante | " … " | |
| Anführungszeichen, 2. Variante | ' … ' | |
| Kommentar | (* … *) | |
| Spezielle Sequenz | ? … ? | |
| Ausnahme | - |
Diese Kontrollstrukturen können auch als Syntaxdiagramm dargestellt werden. Die Abbildung rechts zeigt einige Beispiele.
Anwendungen
Viele Metasprachen, wie beispielsweise HTML können in der EBNF definiert werden.<ref name="tomasetti">Federico Tomassetti: EBNF: How to Describe the Grammar of a Language vom 1. August 2017, abgerufen am 6. August 2019</ref>
Im Prinzip können alle formalen Sprachen in der EBNF ausgedrückt werden. Insbesondere in der Informatik bei der Definition von Programmiersprachen, regulären Ausdrücken oder Parsern (siehe zum Beispiel Spirit) wird EBNF häufig eingesetzt.<ref>Niklaus Wirth: What can we do about the unnecessary diversity of notation for syntactic definitions?, Communications of the ACM, Volume 20, Issue 11, November 1977, 822–823, ACM New York</ref>
EBNF ist nicht geeignet, um die Semantik einer Sprache festzulegen. So ist es zum Beispiel ohne weiteres möglich, wesentliche eindeutige Sachverhalte gar nicht oder mehrfach zu definieren, so dass es zu logischen Lücken oder Widersprüchen kommen kann. Ferner kann die Zuweisungskompatibilität von Ausdrücken durch EBNF nicht festgelegt werden.<ref name="tomasetti"></ref>
Beispiele
Einfache Programmiersprache
Eine ganz einfache Programmiersprache, die nur Zuweisungen erlaubt, kann in EBNF so definiert werden:
<syntaxhighlight lang="ebnf">
(* ein einfaches Beispiel in EBNF - Wikipedia *)
Programm = 'PROGRAM', Bezeichner ,
'BEGIN' ,
{ Zuweisung, ";" } ,
'END', "." ;
Zuweisung = Bezeichner, ":=", ( Zahl |
Bezeichner |
String ) ;
Bezeichner = Buchstabe, { ( Buchstabe | Ziffer ) } ;
Zahl = [ '-' ], Ziffer, { Ziffer } ;
String = '"', { AlleZeichen - '"' }, '"' ;
Buchstabe = "A" | "B" | "C" | "D" | "E" | "F" | "G"
| "H" | "I" | "J" | "K" | "L" | "M" | "N"
| "O" | "P" | "Q" | "R" | "S" | "T" | "U"
| "V" | "W" | "X" | "Y" | "Z" ;
Ziffer = "0" | "1" | "2" | "3" | "4" | "5" | "6"
| "7" | "8" | "9" ;
AlleZeichen = ? alle sichtbaren Zeichen ? ;
</syntaxhighlight>
Hier wurden die Standardsymbole ("=" für Definitionen, ";" als Endezeichen usw.) verwendet. Bei Bedarf darf davon abgewichen werden.
Ein syntaktisch zulässiges Programm wäre dann <syntaxhighlight lang="pascal">
PROGRAM DEMO1 BEGIN A0:=3; B:=45; H:=-100023; C:=A; D123:=B34A; ESEL:=GIRAFFE; TEXTZEILE:="Hallo, Welt!"; END.
</syntaxhighlight>
Binärbäume
Die Darstellung von Binärbaumen in pre-order als Zeichenkette kann in EBNF so definiert werden:<syntaxhighlight lang="ebnf"> BinaryTree = Identifier, "(", BinaryTree, ")(", BinaryTree, ")" | [Identifier] ; Identifier = Letter, { ( Letter | Digit ) } ; Letter = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" ; Digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
</syntaxhighlight>
Der Binärbaum rechts hat dann die pre-order Darstellung F(B(A)(D(C)(E)))(G()(I(H)())).
Die Produktionsregeln dieser EBNF können auch wie folgt dargestellt werden:
- <math>\begin{align}
S & \rightarrow I(S)(S) \\ S & \rightarrow I \\ S & \rightarrow \varepsilon \\ I & \rightarrow LE \\ E & \rightarrow LE \\ E & \rightarrow DE \\ E & \rightarrow \varepsilon \\ L & \rightarrow \mathrm{A} \\ L & \rightarrow \mathrm{B} \\
& \cdots \\
L & \rightarrow \mathrm{Z} \\ D & \rightarrow 0 \\ D & \rightarrow 1 \\
& \cdots \\
D & \rightarrow 9 \\ \end{align} </math>
Die Menge der Terminalsymbole ist <math>T = \{ (, ), \mathrm{A}, \mathrm{B}, \ldots, \mathrm{Z}, 0, 1, \ldots, 9 \} </math>, die Menge der Nichtterminalsymbole ist <math>N = \{ S, I, E, L, D \} </math> und das Startsymbol ist <math>S </math>.
Siehe auch
- Backus-Naur-Form
- Angereicherte Backus-Naur-Form
- Kontextfreie Grammatik
- Kellerautomat
- Syntaxdiagramm
- vereinfachte Programmiersprache PL/0 als EBNF-Muster
Weblinks
- SELFHTML: Backus Naur Form
- GeeksforGeeks: BNF Notation in Compiler Design
- Christian-Albrechts-Universität zu Kiel: EBNF (Erweiterte Backus-Naur-Form)
- ISO/IEC 14977: 1996(E) – ISO-Standard zu EBNF (final draft version SC22/N2249) (PDF) Anmerkung: „Dieses Dokument ist ein Entwurf, der noch Fehler enthält. ‚Meta-Identifiers‘ etwa werden im Text mit Bindestrichen verbunden (siehe Abschnitt 4: “written as one or more words joined together by hyphens”), in den Beispielen hingegen werden bis auf einige Kommentare diese Meta-Identifiers mit Leerzeichen geschrieben.“ Anmerkung 2: „In den Beispielen können (bis auf eben in den Kommentaren) die Bindestriche gar nicht verwendet werden, da diese das ‚Except-Symbol‘ repräsentieren und man dadurch die im Dokument spezifizierten EBNF-Syntaxregeln verletzte…“ (PDF-Datei; 79 kB)
- ISO/IEC 14977: 1996(E) – ISO-Standard zu EBNF (1st Edition) (ZIP-komprimiertes PDF, 2,2 MB)
- Varianten der BNF und EBNF im Überblick
- EBNF Parser & Renderer auf Basis PHP
- Parser & Renderer in PHP5
- <templatestyles src="Webarchiv/styles.css" />{{#if:20101030132932
| {{#ifeq: 20101030132932 | *
| {{#if: Vergleich der BNF-Varianten (englisch) | {{#invoke:WLink|getEscapedTitle|Vergleich der BNF-Varianten (englisch)}} | {{#invoke:Webarchiv|getdomain|http://www-cgi.uni-regensburg.de/~brf09510/grammartypes.html}} }} (Archivversionen)
| {{#iferror: {{#time: j. F Y|20101030132932}}
| {{#if: || }}Der Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
| {{#if: Vergleich der BNF-Varianten (englisch) | {{#invoke:WLink|getEscapedTitle|Vergleich der BNF-Varianten (englisch)}} | {{#invoke:Webarchiv|getdomain|http://www-cgi.uni-regensburg.de/~brf09510/grammartypes.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer }} vom {{#time: j. F Y|20101030132932}} im Internet Archive{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
}}
| {{#if:
| {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
| {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
| 16= {{#if: Vergleich der BNF-Varianten (englisch) | {{#invoke:WLink|getEscapedTitle|Vergleich der BNF-Varianten (englisch)}} | {{#invoke:Webarchiv|getdomain|http://www-cgi.uni-regensburg.de/~brf09510/grammartypes.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| 9 = {{#if: Vergleich der BNF-Varianten (englisch) | {{#invoke:WLink|getEscapedTitle|Vergleich der BNF-Varianten (englisch)}} | {{#invoke:Webarchiv|getdomain|http://www-cgi.uni-regensburg.de/~brf09510/grammartypes.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!{{#if: || }}
}}
| c|{{{webciteID}}}}} {{#if: Vergleich der BNF-Varianten (englisch) | {{#invoke:WLink|getEscapedTitle|Vergleich der BNF-Varianten (englisch)}} | {{#invoke:Webarchiv|getdomain|http://www-cgi.uni-regensburg.de/~brf09510/grammartypes.html}} }} ({{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
| {{#if:
| Vorlage:Webarchiv/Today
| {{#if:
| Vorlage:Webarchiv/Generisch
| {{#if: Vergleich der BNF-Varianten (englisch) | {{#invoke:WLink|getEscapedTitle|Vergleich der BNF-Varianten (englisch)}} | {{#invoke:Webarchiv|getdomain|http://www-cgi.uni-regensburg.de/~brf09510/grammartypes.html}} }}
}}}}}}}}{{#if:
| Vorlage:Webarchiv/archiv-bot
}}{{#invoke:TemplatePar|check
|all = url=
|opt = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
|cat = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
|errNS = 0
|template = Vorlage:Webarchiv
|format = *
|preview = 1
}}{{#ifexpr: {{#if:20101030132932|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
}}{{#if:
| {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
| web.archive.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}}
| webcitation.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}}
| archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
}}{{#if:
| {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
| }}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
}}
| {{#if:
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
}}
}}{{#if:{{#invoke:URLutil|isHostPathResource|http://www-cgi.uni-regensburg.de/~brf09510/grammartypes.html}}
|| {{#if: || }}
}}{{#if: Vergleich der BNF-Varianten (englisch)
| {{#if: {{#invoke:WLink|isBracketedLink|Vergleich der BNF-Varianten (englisch)}}
| {{#if: || }}
}}
| {{#if: || }}
}}{{#switch:
|addlarchives|addlpages= {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
}}{{#ifeq: {{#invoke:Str|find|http://www-cgi.uni-regensburg.de/~brf09510/grammartypes.html%7Carchiv}} |-1
|| {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://www-cgi.uni-regensburg.de/~brf09510/grammartypes.html%7C4}}%7Chttp}} |-1
|| {{#switch: {{#invoke:Webarchiv|getdomain|http://www-cgi.uni-regensburg.de/~brf09510/grammartypes.html }}
| abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org =
| #default = {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
}}
}}
}}
- <templatestyles src="Webarchiv/styles.css" />{{#if:20111201001222
| {{#ifeq: 20111201001222 | *
| {{#if: Erzeugen von Syntaxdiagrammen aus EBNF | {{#invoke:WLink|getEscapedTitle|Erzeugen von Syntaxdiagrammen aus EBNF}} | {{#invoke:Webarchiv|getdomain|http://homepages.uni-regensburg.de/~brf09510/syntax.html}} }} (Archivversionen)
| {{#iferror: {{#time: j. F Y|20111201001222}}
| {{#if: || }}Der Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
| {{#if: Erzeugen von Syntaxdiagrammen aus EBNF | {{#invoke:WLink|getEscapedTitle|Erzeugen von Syntaxdiagrammen aus EBNF}} | {{#invoke:Webarchiv|getdomain|http://homepages.uni-regensburg.de/~brf09510/syntax.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer }} vom {{#time: j. F Y|20111201001222}} im Internet Archive{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
}}
| {{#if:
| {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
| {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
| 16= {{#if: Erzeugen von Syntaxdiagrammen aus EBNF | {{#invoke:WLink|getEscapedTitle|Erzeugen von Syntaxdiagrammen aus EBNF}} | {{#invoke:Webarchiv|getdomain|http://homepages.uni-regensburg.de/~brf09510/syntax.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| 9 = {{#if: Erzeugen von Syntaxdiagrammen aus EBNF | {{#invoke:WLink|getEscapedTitle|Erzeugen von Syntaxdiagrammen aus EBNF}} | {{#invoke:Webarchiv|getdomain|http://homepages.uni-regensburg.de/~brf09510/syntax.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!{{#if: || }}
}}
| c|{{{webciteID}}}}} {{#if: Erzeugen von Syntaxdiagrammen aus EBNF | {{#invoke:WLink|getEscapedTitle|Erzeugen von Syntaxdiagrammen aus EBNF}} | {{#invoke:Webarchiv|getdomain|http://homepages.uni-regensburg.de/~brf09510/syntax.html}} }} ({{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
| {{#if:
| Vorlage:Webarchiv/Today
| {{#if:
| Vorlage:Webarchiv/Generisch
| {{#if: Erzeugen von Syntaxdiagrammen aus EBNF | {{#invoke:WLink|getEscapedTitle|Erzeugen von Syntaxdiagrammen aus EBNF}} | {{#invoke:Webarchiv|getdomain|http://homepages.uni-regensburg.de/~brf09510/syntax.html}} }}
}}}}}}}}{{#if:
| Vorlage:Webarchiv/archiv-bot
}}{{#invoke:TemplatePar|check
|all = url=
|opt = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
|cat = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
|errNS = 0
|template = Vorlage:Webarchiv
|format = *
|preview = 1
}}{{#ifexpr: {{#if:20111201001222|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
}}{{#if:
| {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
| web.archive.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}}
| webcitation.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}}
| archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
}}{{#if:
| {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
| }}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
}}
| {{#if:
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
}}
}}{{#if:{{#invoke:URLutil|isHostPathResource|http://homepages.uni-regensburg.de/~brf09510/syntax.html}}
|| {{#if: || }}
}}{{#if: Erzeugen von Syntaxdiagrammen aus EBNF
| {{#if: {{#invoke:WLink|isBracketedLink|Erzeugen von Syntaxdiagrammen aus EBNF}}
| {{#if: || }}
}}
| {{#if: || }}
}}{{#switch:
|addlarchives|addlpages= {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
}}{{#ifeq: {{#invoke:Str|find|http://homepages.uni-regensburg.de/~brf09510/syntax.html%7Carchiv}} |-1
|| {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://homepages.uni-regensburg.de/~brf09510/syntax.html%7C4}}%7Chttp}} |-1
|| {{#switch: {{#invoke:Webarchiv|getdomain|http://homepages.uni-regensburg.de/~brf09510/syntax.html }}
| abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org =
| #default = {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
}}
}}
}}
Einzelnachweise
<references/>
- Wikipedia:Vorlagenfehler/Parameter:URL
- Wikipedia:Vorlagenfehler/Parameter:Linktext
- Wikipedia:Vorlagenfehler/Parameter:Datum
- Wikipedia:Vorlagenfehler/Vorlage:"
- Wikipedia:Weblink offline fix-attempted
- Wikipedia:Vorlagenfehler/Vorlage:Toter Link
- Wikipedia:Vorlagenfehler/Vorlage:Toter Link/URL fehlt
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv/Archiv-URL
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv/Linktext fehlt
- Compilerbau
- Theorie formaler Sprachen