Erweiterte Backus-Naur-Form

In der Informatik ist Extended Backus-Naur Form (EBNF) eine Familie von metasyntax Notationen, die verwendet sind, um Grammatiken ohne Zusammenhänge auszudrücken: D. h. eine formelle Weise, Computerprogrammiersprachen und andere formelle Sprachen zu beschreiben. Sie sind Erweiterungen grundlegender Backus-Naur Form (BNF) metasyntax Notation.

Der frühste EBNF wurde von Niklaus Wirth ursprünglich entwickelt. Jedoch sind viele Varianten von EBNF im Gebrauch. Die Internationale Organisation für die Standardisierung hat einen EBNF Standard (ISO/IEC 14977) angenommen. Dieser Artikel verwendet EBNF, wie angegeben, durch den ISO für Beispiele, die für den ganzen EBNF:s gelten. Andere EBNF Varianten verwenden etwas verschiedene syntaktische Vereinbarung.

Grundlagen

EBNF ist ein Code, der die Grammatik einer Computersprache ausdrückt. Ein EBNF besteht aus dem Endsymbol und den Nichtendproduktionsregeln, die die Beschränkungsregelung sind, wie Endsymbole in eine gesetzliche Folge verbunden werden können. Beispiele von Endsymbolen schließen alphanumerische Charaktere, Satzzeichen und Leerraum-Charaktere ein.

Der EBNF definiert Produktionsregeln, wo Folgen von Symbolen beziehungsweise einem Nichtterminal zugeteilt werden:

Ziffer-Ausschließen-Null = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";

Ziffer = "0" | Ziffer-Ausschließen-Null;

Diese Produktionsregel definiert die Nichtendziffer, die auf der linken Seite der Anweisung ist. Die vertikale Bar vertritt eine Alternative, und die Endsymbole werden mit Anführungszeichen eingeschlossen, die von einem Strichpunkt als endender Charakter gefolgt sind. Folglich ist eine Ziffer 0 oder eine Ziffer-Ausschließen-Null, die 1 oder 2 oder 3 und so weiter bis 9 sein kann.

Eine Produktionsregel kann auch eine Folge von Terminals oder Nichtterminals, jeder einschließen, der durch ein Komma getrennt ist:

zwölf = "1", "2";

zweihundertein = "2", "0", "1";

dreihundertzwölf = "3", zwölf;

zwölftausendzweihundertein = eintausendzweihundert, zweihundertein;

Ausdrücke, die weggelassen oder wiederholt werden können, können durch lockige geschweifte Klammern vertreten werden {...}:

natürliche Zahl = Ziffer-Ausschließen-Null, {Ziffer};

In diesem Fall sind die Schnuren 1, 2..., 10..., 12345... richtige Ausdrücke. Um das zu vertreten, kann alles, was innerhalb der lockigen geschweiften Klammern gesetzt wird, willkürlich häufig, einschließlich überhaupt nicht wiederholt werden.

Eine Auswahl kann durch karierte Klammern vertreten werden [...]. D. h. alles, was innerhalb der eckigen Klammern gesetzt wird, kann gerade einmal, oder überhaupt nicht da sein:

ganze Zahl = "0" | ["-"], natürliche Zahl;

Deshalb ist eine ganze Zahl eine Null (0) oder eine natürliche Zahl, der durch einen fakultativen minus das Zeichen vorangegangen werden kann.

EBNF stellt auch, unter anderem, die Syntax zur Verfügung, um Wiederholungen einer bestimmten Anzahl von Zeiten zu beschreiben, einen Teil einer Produktion auszuschließen, oder Anmerkungen in eine EBNF Grammatik einzufügen.

Tisch von Symbolen

Der folgende vertritt einen vorgeschlagenen Standard.

Ein anderes Beispiel

Eine Pascal ähnliche Programmiersprache, die nur Anweisungen erlaubt, kann in EBNF wie folgt definiert werden:

(* eine einfache Programm-Syntax in EBNF  Wikipedia *)

Programm = 'PROGRAMM', Leerraum, Bezeichner, Leerraum,

'BEGINNEN SIE' Leerraum,

{Anweisung, ";" Leerraum},

'ENDE'.;

Bezeichner = alphabetischer Charakter, {alphabetischer Charakter | Ziffer};

Zahl = ["-"], Ziffer, {Ziffer};

spannen Sie = '"', {alle Charaktere  '"'}, '"';

Anweisung = Bezeichner, ": =", (Zahl | Bezeichner | Schnur);

alphabetischer Charakter = "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";

Leerraum =? Leerraum-Charaktere?;

alle Charaktere =? alle sichtbaren Charaktere?;

Ein syntaktisch richtiges Programm würde dann sein:

PROGRAMM DEMO1

BEGINNEN SIE

A0: = 3;

B: = 45;

H: =-100023;

C: = A;

D123: = B34A;

PAVIAN: = GIRAFFE;

TEXT: = "Hallo Welt!";

ENDE.

Die Sprache kann mit Kontrollflüssen, arithmetischen Ausdrücken und Instruktionen des Eingangs/Produktion leicht erweitert werden. Dann würde eine kleine, verwendbare Programmiersprache entwickelt.

Vorteile von EBNF über BNF

Der BNF hatte das Problem, dass Optionen und Wiederholungen nicht direkt ausgedrückt werden konnten. Statt dessen haben sie den Gebrauch einer Zwischenregel oder die alternative Produktion gebraucht, die definiert ist, um entweder nichts oder die fakultative Produktion für die Auswahl, oder entweder die wiederholte Produktion oder es rekursiv für die Wiederholung zu sein. Dieselben Konstruktionen können noch in EBNF verwendet werden.

Der BNF hat die Symbole verwendet (< > |:: =) für sich, aber hat Notierungen um Endschnuren nicht eingeschlossen. Das hat diese Charaktere davon abgehalten, auf den Sprachen verwendet, und ein spezielles Symbol für die leere Schnur verlangt zu werden. In EBNF werden Terminals innerhalb von Anführungszeichen ("..." oder '...') ausschließlich eingeschlossen. Die Winkelklammern ("<...>"), weil Nichtterminals weggelassen werden können.

BNF Syntax kann nur eine Regel in einer Linie vertreten, wohingegen in EBNF ein endender Charakter, der Strichpunkt, das Ende einer Regel kennzeichnet.

Außerdem schließt EBNF Mechanismen für Erhöhungen ein, die Zahl von Wiederholungen definierend, Alternativen, Anmerkungen usw. ausschließend.

Es sollte bemerkt werden, dass EBNF nicht "stärker" ist als BNF: Als Angelegenheit für den Grundsatz kann jede in EBNF definierte Grammatik auch in BNF vertreten werden (obwohl Darstellungen in den Letzteren allgemein länger sind).

Vereinbarung

1. Die folgende Vereinbarung wird verwendet:

  • Jeder Meta-Bezeichner von Verlängertem BNF wird geschrieben, weil ein oder mehr Wörter durch Bindestriche zusammengetroffen
sind
  • Ein Meta-Bezeichner, der mit - Symbol endet, ist der Name eines Endsymbols von Verlängertem BNF.

2. Der normale Charakter, der jeden Maschinenbediener von Verlängertem BNF und seiner implizierten Priorität vertritt, ist (höchste Priorität oben):

* Wiederholungssymbol

- außer dem Symbol

Verketten-Symbol

| Separator-Symbol der Definition

= Definieren-Symbol

; Terminator-Symbol

3. Die normale Priorität wird von den folgenden Klammer-Paaren überritten:

'erstes Zitat-Symbol des ersten Zitat-Symbols'

"zweites Zitat-Symbol des zweiten Zitat-Symbols"

(* EndAnmerkungssymbol des Anfang-Anmerkungssymbols *)

(Endgruppensymbol des Anfang-Gruppensymbols)

[Auswahl-Symbol des End-des Auswahl-Symbols des Anfangs]

{mehrmaliges Symbol des End-des mehrmaligen Symbols des Anfangs }\

? spezielles Folge-Symbol des speziellen Folge-Symbols?

Das erste Zitat-Symbol ist der Apostroph, wie definiert, durch ISO/IEC 646:1991, das heißt Unicode U+0027 ('); die Schriftart, die in ISO/IEC 14977:1996 (E) verwendet ist, macht es sehr viel wie das akute, Unicode U+00B4 ('), so entsteht Verwirrung manchmal. Jedoch der ISO Verlängerter BNF Standard ruft ISO/IEC 646:1991 an, "haben ISO 7 Bit Codierung für den Informationsaustausch" als eine normative Verweisung codiert und machen keine Erwähnung irgendwelcher anderen Codierungen so formell, gibt es keine Verwirrung mit Charakteren von Unicode außerhalb der ASCII 7-Bit-Reihe.

Als Beispiele illustrieren die folgenden Syntax-Regeln die Möglichkeiten, um Wiederholung auszudrücken:

aa = "A";

bb = 3 * aa, "B";

Cc = 3 * [aa], "C";

dd = {aa}, "D";

ee = aa, {aa}, "E";

ff = 3 * aa, 3 * [aa], "F";

gg = {3 * aa}, "G";

Durch diese Regeln definierte Endschnuren sind wie folgt:

aa: Ein

bb: AAAB

Cc: C AC AAC AAAC

dd: D AD AAD AAAD AAAAD usw.

ee: AE AAE AAAE AAAAE AAAAAE usw.

ff: AAAF AAAAF AAAAAF AAAAAAF

gg: G AAAG AAAAAAG usw.

EBNF Dehnbarkeit

Gemäß dem ISO werden 14977 normale EBNF gemeint, um ausziehbar zu sein, und zwei Möglichkeiten werden erwähnt. Das erste ist ein Teil der EBNF Grammatik, der speziellen Folge, die willkürlicher mit Fragezeichen eingeschlossener Text ist. Die Interpretation des Textes innerhalb einer speziellen Folge ist außer dem Spielraum des EBNF Standards. Zum Beispiel konnte der Raumcharakter durch die folgende Regel definiert werden:

Raum =? Charakter des US-ASCII 32?;

Die zweite Möglichkeit für die Erweiterung verwendet die Tatsache, dass Parenthesen nicht in EBNF können, folgend zu Bezeichnern gelegt werden (sie müssen mit ihnen verkettet werden). Der folgende ist gültiger EBNF:

etwas = foo, (Bar);

Der folgende ist nicht gültiger EBNF:

etwas = foo (Bar);

Deshalb konnte eine Erweiterung von EBNF diese Notation verwenden. Zum Beispiel, in einer Lispeln-Grammatik, konnte Funktionsanwendung durch die folgende Regel definiert werden:

Funktionsanwendung = Liste (Symbol, {Ausdruck});

Zusammenhängende Arbeit

  • Der W3C hat einen verschiedenen EBNF verwendet, um die XML Syntax anzugeben.
  • Die britische Standardeinrichtung hat einen Standard für einen EBNF veröffentlicht: BAKKALAUREUS DER NATURWISSENSCHAFTEN 6154 1981.
  • Der IETF-Gebrauch Vermehrter BNF (ABNF), angegeben in RFC 5234.

Siehe auch

Links


Mary von Gestalt / England, England
Impressum & Datenschutz