Angereicherte Backus-Naur-Form
Die angereicherte Backus-Naur-Form (ABNF, {{#invoke:Vorlage:lang|full|CODE=en|SCRIPTING=Latn|SERVICE=englisch}}) ist eine Variante der Backus-Naur-Form-Metasprache zur Beschreibung von Syntax-Notationen. Sie wurde ursprünglich als RFC 2234<ref name="RFC2234" /> zur eindeutigen Spezifikation von RFC-Internet-Standards der IETF entwickelt und eignet sich zur syntaktischen Festlegung von technischen Sprachen und Protokollen.
Entstehung
Während der Entstehung der RFC-Standards entstand die Notwendigkeit, die benötigten Syntaxbeschreibungen durch eine standardisierte BNF-Variante darzustellen. Der Standard RFC 2234<ref name="RFC2234" /> vereinheitlichte die leicht abweichenden Varianten in den bisher erschienenen RFC-Standards. Neuere RFC-Standards brauchten nun keine Definition der verwendeten Metasprache mehr zu enthalten. Stattdessen reichte ein Verweis auf RFC 2234 aus.
Das Dokument enthält eine Selbstdefinition der ABNF-Syntax. Darin wird ABNF mithilfe der ABNF-Notation ausgedrückt.
Nachfolgeversionen
Später lösten die korrigierten Ausgaben RFC 4234,<ref>Vorlage:RFC-Internet</ref> RFC 5234<ref name="aktuelleNorm">Vorlage:RFC-Internet</ref> inklusive der Erweiterung RFC 7405<ref name="RFC7405">Vorlage:RFC-Internet</ref> die erste Version ab.
Eigenschaften
Die ABNF-Notation baut auf der BNF auf, die auch hier geltenden Grundlagen der BNF können dort entnommen werden.
Die Erweiterungen zur BNF bestehen aus einer modifizierten Namensgebung von Regeln, Wiederholungen, Alternativen, Wertebereichen und einem Satz vordefinierter Basisregeln. Sie erlauben eine komfortablere und ausdrucksstärkere Formulierung der zu beschreibenden Strukturen. Der Schwerpunkt der Ausdrucksmittel ist für die Definition von Zeichenketten gedacht. Es wurden bewusst Mechanismen definiert, die eine bestimmte Kodierung voraussetzen (z. B. ASCII). Werden z. B. Zeichencodes oder Bereiche verwendet, so sind diese Definitionen abhängig von der ursprünglich zugrunde gelegten Zeichenkodierung, und müssen in der Regel für andere Zeichenkodierungen angepasst werden.
Kommentare
Ein Semikolon (;) leitet den Kommentar ein. Der Kommentartext folgt und reicht bis zum nächsten Zeilenende (Zeilenkommentar). Mehrzeilige Kommentare erfordern ein Semikolon je Zeile.
Terminalsymbole
Terminalsymbole sind die Werte, aus denen die Regeldefinitionen letztlich aufgebaut sind. Zu den Terminalsymbolen gehören:
- wörtliche Zeichenketten ohne Unterscheidung zwischen Groß- und Kleinschreibung. Sie werden in doppelte Anführungszeichen
"gesetzt. Sie können auch explizit mit dem Präfix%igekennzeichnet werden.<ref name="RFC7405"/> Wird das Anführungszeichen in der Zeichenkette benötigt, so muss die Zeichenkette mit einem Zeichencode für das Anführungszeichen als Sequenz ausgedrückt werden. Beispiel:"PROGRAM" - wörtliche Zeichenketten, bei denen Groß- und Kleinschreibung beachtet werden muss. Sie werden durch das Präfix
%sgekennzeichnet. Beispiel:%s"GROSSklein" - Zeichencodes, dargestellt in einer von drei Basen:
- Dezimal: das Präfix
%dkennzeichnet die Verwendung des Dezimalsystems. Beispiel:%d13für das Zeichen mit dem Codewert 13 (das ist im ASCII das Zeichen Carriage Return, kurz CR) - Hexadezimal: das Präfix
%xkennzeichnet die Verwendung des Hexadezimalsystems. Beispiel:%x0dfür das Zeichen mit dem Codewert 13. - Binär: das Präfix
%bkennzeichnet die Verwendung des Binärsystems. Beispiel:%b00001101für das Zeichen mit dem Codewert 13.
- Dezimal: das Präfix
- Sequenzen (oder Ketten) von Zeichencodes: Sie bestehen aus einem Zeichencode und beliebig vielen Anhängen für Folgezeichen bestehend jeweils aus Punkt
.und einer Zahl ohne%-Präfix. Sequenzen waren vor der Einführung der%s-Zeichenketten die einzige Möglichkeit, Zeichenketten mit festgelegter Groß- und Kleinschreibung anzugeben. Beispiel:%d13.10für die Zeichenfolge Wagenrücklauf ({{#invoke:Vorlage:lang|full|CODE=en|SCRIPTING=Latn|SERVICE=englisch}}) und Zeilenvorschub ({{#invoke:Vorlage:lang|full|CODE=en|SCRIPTING=Latn|SERVICE=englisch}}) im ASCII.
Namensregeln
Namen für Definitionen dürfen die Zeichen A–Z, a–z, 0–9 und das Minuszeichen - enthalten, wobei das erste Zeichen ein Buchstabe sein muss.
Im Vergleich zur BNF sind keine spitzen Klammern < > um Namen notwendig; sie sind jedoch aus Kompatibilitätsgründen möglich.
Die Definition einer Regel beginnt mit dem Namen und einem Gleichzeichen =. Sie wird solange fortgesetzt, bis keine Folgezeile mehr mit erweiterter Einrückung angetroffen wird.
<syntaxhighlight lang="abnf">
Regel1 = Regelbestandteil1 Regelbestandteil2 Regelbestandteil3 Regel2 = …
</syntaxhighlight> Eine Ausnahme betrifft die inkrementelle Alternative (siehe unten). Sie erweitert eine schon vorhandene Definition.
Bereiche
Bereiche stellen eine Menge von Zeichen dar, deren Codewerte in dem angegebenen Bereich liegen. Sie sind eine spezielle Form von Alternativen. Der Bereich wird durch die Codewerte an den Grenzen des Bereichs gebildet. Beide Werte sind mit einem Minuszeichen - verbunden, das Präfix für das verwendete Zahlensystem ist nur bei der ersten Zahl angegeben.
Zum Beispiel wird hiermit der Bereich der hexadezimalen Zeichenkodes 0x30 bis 0x39 (oder dezimal 48 bis 57) festgelegt. Dies entspricht im gebräuchlichen Zeichenkode ASCII den Ziffern '0', '1' usw. bis '9':
<syntaxhighlight lang="abnf">
Ziffer = %x30–39
</syntaxhighlight> entspricht der Alternative <syntaxhighlight lang="abnf">
Ziffer = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9"
</syntaxhighlight>
Wiederholungen
Angaben zu Wiederholungen werden vor den Ausdruck gesetzt und können ein Minimum und/oder ein Maximum der Vorkommen enthalten. Die explizite Form ist <Minimum>*<Maximum>, wobei ein fehlendes Minimum als 0 (nicht vorhanden) und ein fehlendes Maximum als Unendlich (unbegrenztes Vorkommen) genommen wird. Eine exakte Anzahl von n Wiederholungen wird durch die einzelne Zahl n ausgedrückt.
<syntaxhighlight lang="abnf">
beliebighaeufig = *meinWert genau-dreimal = 3allergutenDinge mindestens-zweimal = 2*abzweidabei hoechstens-drei = *3Versuchefrei ein-bis-zwei = 1*2Vornamen
</syntaxhighlight>
Gruppen
Gruppen dienen der eindeutigen Vorrangdefinition bei zusammengesetzten Ausdrücken und werden durch runde Klammern ( und ) gebildet.
<syntaxhighlight lang="abnf">
Ausdruck1 = (To be) / (not to be) Ausdruck2 = To (be / not) to be
</syntaxhighlight>
Das erste Beispiel bildet die Alternativen „To be“ und „not to be“.
Im zweiten Beispiel wird eine Sequenz gebildet aus „To“, dann entweder „be“ oder „not“, und dann „to be“, also „To be to be“ oder „To not to be“.
Sequenzen
Bei Sequenzen werden alle aufgereihten Ausdrücke genau so erwartet wie angegeben. Sequenzen werden einfach durch Aneinanderreihung von Ausdrücken (getrennt mit Leerraum) gebildet. <syntaxhighlight lang="abnf">
Sequenz = Eins nach dem Anderen
</syntaxhighlight>
Optionale Sequenzen
Optionale Sequenzen können einmal vorhanden sein, müssen es aber nicht.
Sie werden durch eckige Klammern [ und ] gebildet.
Die folgenden Idiome sind gleichwertig:
<syntaxhighlight lang="abnf">
[optionalerAusdruck]
- 1optionalerAusdruck
0*1optionalerAusdruck </syntaxhighlight>
Alternativen
Bei Alternativen kann nur genau eine der aufgeführten Varianten vorhanden sein.
Alternativen werden mit Solidus bzw. Schrägstrich / getrennt aufgelistet.
<syntaxhighlight lang="abnf">
Auswahl = Sein / Nichtsein
</syntaxhighlight>
Inkrementelle Alternativen
Vorhandene Definitionen können inkrementell mit Alternativen erweitert werden. Damit sind dezentrale Definitionen möglich, was allerdings zu Lasten der Übersichtlichkeit gehen kann, falls die Bestandteile einer Definition weit voneinander entfernt stehen. Der Name der Regel muss mit =/ wiederholt werden.
<syntaxhighlight lang="abnf">
Status = Ja … Status =/ Nein … Status =/ WeissNicht
</syntaxhighlight>
entspricht
<syntaxhighlight lang="abnf">
Status = Ja / Nein / WeissNicht
</syntaxhighlight>
Vorrangfestlegung
Bei zusammengesetzten Ausdrücken gilt die folgende Bearbeitungsreihenfolge:
- Namen, Zeichenketten, Terminale
- Kommentare
- Bereiche
- Wiederholungen
- Gruppen und optionale Sequenzen
- Sequenzen
- Alternativen
Der RFC-Standard empfiehlt das Setzen von Gruppen zur eindeutigen Vorrangfestlegung bei gemischten Ausdrücken mit Sequenzen und Alternativen.
Vordefinierte Regeln
Häufig gebrauchte Definitionen werden als core rules schon vordefiniert. Sie umfassen allgemeine Klassen wie Ziffern, Buchstaben und Leerräume.
| Regel | = | Definition | Kommentar | POSIX Zeichenklasse |
|---|---|---|---|---|
| ALPHA | = | %x41-5A / %x61-7A | ; Groß- und Kleinbuchstaben A–Z bzw. a–z in ASCII | [:alpha:] |
| BIT | = | "0" / "1" | ; Die Werte eines Bits | |
| CHAR | = | %x01-7F | ; jedes 7-bit US-ASCII Zeichen, bis auf das NUL-Zeichen | |
| CR | = | %x0D | ; Wagenrücklauf ({{#invoke:Vorlage:lang|full|CODE=en|SCRIPTING=Latn|SERVICE=englisch}}) | |
| CRLF | = | CR LF | ; Internet standard für Zeilenumbruch | |
| CTL | = | %x00-1F / %x7F | ; Kontrollzeichen | [:cntrl:] |
| DIGIT | = | %x30-39 | ; Die Ziffern des Dezimalsystems 0-9 | [:digit:] |
| DQUOTE | = | %x22 | ; " (Anführungszeichen, engl. Double Quote) | |
| HEXDIG | = | DIGIT / "A" / "B" / "C" / "D" / "E" / "F" | ; Die Ziffern des Hexadezimalsystems | [:xdigit:] |
| HTAB | = | %x09 | ; Horizontal-Tabulatorzeichen | |
| LF | = | %x0A | ; Zeilenvorschub ({{#invoke:Vorlage:lang|full|CODE=en|SCRIPTING=Latn|SERVICE=englisch}}) | |
| LWSP | = | *(WSP / CRLF WSP) | ; linearer Leerraum (nach Zeilenenden) | |
| OCTET | = | %x00-FF | ; 8-bit-Daten | |
| SP | = | %x20 | ; Leerzeichen ({{#invoke:Vorlage:lang|full|CODE=en|SCRIPTING=Latn|SERVICE=englisch}}) | |
| VCHAR | = | %x21-7E | ; sicht- und druckbare Zeichen | [:graph:] |
| WSP | = | SP / HTAB | ; Leerraum ({{#invoke:Vorlage:lang|full|CODE=en|SCRIPTING=Latn|SERVICE=englisch}}) |
Beispiel
Zur Demonstration wird die Beispielsprachdefinition der EBNF-Variante auf ABNF adaptiert. Sie erlaubt Programme mit einfachen Zuweisungen. <syntaxhighlight lang="abnf">
; ein Beispiel in ABNF - analog zum Beispiel der EBNF-Wikipediaseite
Programm = "PROGRAM" Bezeichner
"BEGIN"
*( Zuweisung ";" )
"END."
Zuweisung = Bezeichner ":=" ( Zahl /
Bezeichner /
String )
Bezeichner = Buchstabe *( Buchstabe / Ziffer )
Zahl = [ "-" ] 1*Ziffer
String = %x22 *( %x20-21 / %x23-7E ) %x22 ; "beliebige sichtbare Zeichen ausser doppelten Anfuehrungszeichen"
Buchstabe = %x41-5A ; Bereich der Zeichen von "A" bis "Z"
Ziffer = DIGIT ; alle Ziffern
AlleZeichen = VCHAR ; alle sicht- und druckbaren Zeichen (wird hier nicht verwendet)
</syntaxhighlight>
Das folgende willkürliche Programm passt zu der oben gegebenen Definition. <syntaxhighlight lang="pascal">
PROGRAM WERTESETZEN BEGIN A:=-1234; B:=A; BEZEICHNER:=""; C:=BEZEICHNER; R2D2:="Piep"; RESULTAT:="Erfolg"; END.
</syntaxhighlight>
Vergleich mit der EBNF
Zur Orientierung sind hier die Unterschiede zwischen ABNF und EBNF<ref>{{#if:|{{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}| |}}}}{{#if:|{{{autor}}}: }}{{#if:|{{#if:ISO/IEC 14977 : 1996(E)|[{{#invoke:Vorlage:Internetquelle|archivURL|1={{#invoke:URLutil|getNormalized|1={{{archiv-url}}}}}}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel=ISO/IEC 14977 : 1996(E)}}]{{#if:| ({{{format}}})}}{{#if:ISO Standard zu EBNF (1st Edition)| ISO Standard zu EBNF (1st Edition){{#invoke:Vorlage:Internetquelle|Endpunkt|titel=ISO Standard zu EBNF (1st Edition)}}}}}}|{{#if:https://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip%7C{{#if:{{#invoke:TemplUtl%7Cfaculty%7C}}%7C{{#invoke:Vorlage:Internetquelle%7CTitelFormat%7Ctitel={{#invoke:WLink%7CgetEscapedTitle%7C1=ISO/IEC 14977 : 1996(E)}}}}|[{{#invoke:URLutil|getNormalized|1=https://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{#invoke:WLink|getEscapedTitle|1=ISO/IEC 14977 : 1996(E)}}}}]}}{{#if:| ({{{format}}}{{#if:ISO Standard zu EBNF (1st Edition)ISO Komitee{{#if: 2011-08-25 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}
| )
| {{#if:{{#ifeq:en|de||{{#if:en|1}}}}| ;
| )}}}}}}{{#if:ISO Standard zu EBNF (1st Edition)| ISO Standard zu EBNF (1st Edition){{#invoke:Vorlage:Internetquelle|Endpunkt|titel=ISO Standard zu EBNF (1st Edition)}}}}}}}}{{#if:https://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip%7C{{#if:{{#invoke:URLutil%7CisResourceURL%7C1=https://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip}}%7C%7C}}}}{{#if:ISO/IEC 14977 : 1996(E)|{{#if:{{#invoke:WLink|isValidLinktext|1=ISO/IEC 14977 : 1996(E)|lines=0}}||}}}}{{#if: | In: {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{{werk}}}}}}}{{#if: ISO Komitee| ISO Komitee{{#if: |,|{{#if: 2011-08-25 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: | {{#if:{{#invoke:DateTime|format|{{{datum}}}|noerror=1}}
|{{#invoke:DateTime|format|{{{datum}}}|T._Monat JJJJ}}
|{{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, datum={{{datum}}}|class=Zitationswartung}} }}{{#if: |,|{{#if: 2011-08-25 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: | S. {{{seiten}}}{{#if: |,|{{#if: 2011-08-25 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: {{#invoke:TemplUtl|faculty|}}| {{#if:ISO Komitee|{{#if:|archiviert|ehemals}}|{{#if:|Archiviert|Ehemals}}}} {{#if:|vom|im}} Vorlage:Referrer{{#if:{{#invoke:TemplUtl|faculty|}}| (nicht mehr online verfügbar)}}{{#if: | am {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}|{{{archiv-datum}}}{{#if:2379573||(?)}}}}}}{{#if: 2011-08-25|;}}}}{{#if: 2011-08-25| {{#if:ISO Komitee{{#invoke:TemplUtl|faculty|}}|abgerufen|Abgerufen}} {{#switch: {{#invoke:Str|len| {{#invoke:DateTime|format| 2011-08-25 |ISO|noerror=1}} }}
|4=im Jahr
|7=im
|10=am
|#default={{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, abruf=2011-08-25|class=Zitationswartung}} }} {{#invoke:DateTime|format|2011-08-25|T._Monat JJJJ}}
| {{#invoke:TemplUtl|failure|1=Vorlage:Internetquelle | abruf=2026-MM-TT ist Pflichtparameter}} }}{{#if:{{#ifeq:en|de||{{#if:en|1}}}}|{{#if:ISO Standard zu EBNF (1st Edition)ISO Komitee{{#if: 2011-08-25 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}
| (
| {{#if: | | (}}
}}{{#ifeq:{{#if:en|en|de}}|de||
{{#invoke:Multilingual|format|en|slang=!|split=[%s,]+|shift=m|separator=, }}}}{{#if: |{{#ifeq:{{#if:en|en|de}}|de||, }}{{{kommentar}}}}})}}{{#if: {{#if: 2011-08-25 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}} }}en|{{#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: {{{zitat}}}
| {{#if:
| {{#if: {{{zitat}}}
| 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|}}|{{#if:||{{#ifeq: | JaKeinHinweis |{{#switch:
|0|=Vorlage:Toter Link/Core{{#if: https://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip | {{#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: https://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip | {{#if:{{#invoke:URLutil|isWebURL|https://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip}} || {{#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=https://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip 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: https://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip | {{#if:{{#invoke:URLutil|isWebURL|https://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip}} || {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: deadurl |checked|deadurl|= |#default= {{#if: || }} }}[https://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip }}|{{#switch: |0|=Vorlage:Toter Link/Core{{#if: https://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip | {{#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: https://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip | {{#if:{{#invoke:URLutil|isWebURL|https://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip}} || {{#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=https://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip 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: https://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip | {{#if:{{#invoke:URLutil|isWebURL|https://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip}} || {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}[https://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip }} }}}}}}}}}}{{#if:| {{#invoke:Vorlage:Internetquelle|archivBot|stamp={{{archiv-bot}}}|text={{#if:|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 }}</ref> tabellarisch aufgeführt.
| In ABNF vorhanden | In EBNF vorhanden | In EBNF verwendete Zeichen |
|---|---|---|
| Bereiche | – | – |
| Zeichencodes | – | – |
| inkrementelle Alternativen | – | – |
| Wiederholungen mit Minimum und Maximum | – | – |
| Zeilenkommentar | Blockkommentar | (* … *)
|
| – | Alternatives „Anführungszeichen“ | '
|
| – | full|CODE=en|SCRIPTING=Latn|SERVICE=englisch}}) | -
|
| – | Optionale Wiederholung | { … }
|
| – | Explizites Terminatorzeichen | ;
|
| – | Spezielle Sequenz | ? … ?
|
Beide Notationen erlauben den gleichen Umfang an Syntaxdefinitionen.
Siehe auch
Weblinks
- tools.ietf.org Tools des IETF
- tools.ietf.org ABNF-Tools des IETF: Parsergeneratoren und Validation (englisch) nicht mehr auf aktuellem Stand (März 2016)
- github.com/fenner/bap ‘bap’ ist ein open source ABNF-Parsergenerator.
- bortzmeyer.org ‘eustathius’ ist ein open source Toolset zum Parsen von ABNF und Generieren von Beispielprogrammen.
- quut.com/abnfgen ‘abnfgen’ ist ein open source Generator von Beispielprogrammen nach vorgegebener ABNF-Syntax.
- a-k-r.org/abnf ‘ABNF’ ist ein open source Ruby Modul, das ABNF-Syntax in reguläre Ausdrücke konvertiert.
- coasttocoastresearch.com ‘apg’ ist ein open source ABNF-Parsergenerator (für C/C++/Java/JavaScript).
- vinegen.com/metabbs ein ABNF-Parsergenerator von VineGen (closed source).
Einzelnachweise
<references> <ref name="RFC2234"> Vorlage:RFC-Internet </ref> </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
- Theorie formaler Sprachen
- Compilerbau