EBNF (Extended Backus-Naur Form) ist Sprache zur Darstellung von kontextfreien Grammatiken. Jede EBNF-Klausel definiert eine Ersetzungsregel, die vorschreibt, wie ein Nichtterminalsymbol (ein Symbol, das nicht in Wörtern der erzeugten Sprache vorkommen darf) in andere Nichtterminalsymbole oder Terminalsymbole (Symbole aus dem Alphabet der erzeugten Sprache) umgesetzt wird. Eine Regel sieht so aus:
ganzeZahl ::= | [vorzeichen ]ziffer { ziffer } |
Eine ganze Zahl besteht danach aus einem optionalen Vorzeichen (die eckigen Klammern), einer Ziffer und null oder mehr weiteren Ziffern (die geschweiften Klammern). Die (kursiv geschriebenen) Nichtterminalsymbole vorzeichen und ziffer müssen noch erklärt werden. Das geht mit
ziffer ::= | "0" | "1" | "2" | "3" | "4" | |
"5" | "6" | "7" | "8" | "9" | | |
vorzeichen ::= | "+" | "-" |
In typewriter gedruckt sind Terminalsymbole , der vertikale Strich steht für “oder”.
Oft sieht man auch (schlampig, aber bequem):
ziffer ::= | "0 " -"9" |
Letztlich ist EBNF eine kompakte Darstellung der bei formalen Sprachen gewohnten Regelmengen. Die Regel für ganzeZahl z.B. ließe sich auch schreiben als:
Vorsicht: Es gibt so viele Varianten von BNF und EBNF wie es AutorInnen gibt, die etwas damit Ausdrücken. Häufige Varianten: