Syntax beschreiben mit EBNF und Syntaxdiagrammen

https://bildung.social/@oerinformatik/117484817997294240

https://oer-informatik.de/ebnf

EBNF, Erweiterte Backus-Naur-Form, Syntaxdiagramm, Railroad-Diagramm, Grammatik, Terminal, Nichtterminal, Syntax, ISO/IEC 14977, SQL-Syntax

tl/dr; (ca. 17 min Lesezeit): Wie sieht eine gültige SQL-Anweisung aus, wie ein gültiger Bezeichner? Die Erweiterte Backus-Naur-Form (EBNF) beschreibt solche Regeln kurz und eindeutig, Syntaxdiagramme machen sie anschaulich. Der Artikel erklärt die Bausteine der EBNF, zeigt, wie man Syntaxdiagramme liest, und stellt die gängigen Schreibweisen gegenüber [AI-Assisted]. (Zuletzt geändert am 22.10.2026)

Schon fit in diesem Thema? Nutze die Kann-Liste und die Leitfragen unter dem Artikel als Checkliste, ob Du die relevanten Kompetenzen bereits hast.

Als Grundlagen zur Syntaxbeschreibung kann ich nach Durchlesen des Artikels…

  • … die Begriffe Grammatik, Regel, Terminal und Nichtterminal erklären.

  • … die Bausteine der EBNF (Folge, Option, Wiederholung, Alternative, Gruppierung) nennen und ihre Schreibweise notieren.

  • … ein Syntaxdiagramm lesen und entscheiden, ob ein Ausdruck der Syntax entspricht.

  • … eine EBNF-Regel in ein Syntaxdiagramm übertragen und umgekehrt.

  • … einfache Syntaxregeln (z. B. Zahlen, Uhrzeiten, Bezeichner) selbst in EBNF formulieren.

Darüber hinaus kann ich als Expertenwissen…

  • … die Schreibweisen nach ISO/IEC 14977, nach Wirth und nach W3C unterscheiden und ineinander übertragen.

  • … lange Regeln sinnvoll in Teilregeln zerlegen.

Wer eine SQL-Anweisung schreibt, eine Konfigurationsdatei anpasst oder in der Dokumentation einer Programmiersprache nachschlägt, stößt immer wieder auf dieselbe Frage: Was genau ist erlaubt? Darf hinter SET mehr als eine Zuweisung stehen? Ist WHERE Pflicht? Darf ein Bezeichner mit einer Ziffer beginnen? Umgangssprachliche Beschreibungen sind dafür zu ungenau. Man braucht eine Sprache, mit der sich die Syntax einer Sprache beschreiben lässt – eine Metasprache.

Grammatik, Regeln, Terminale und Nichtterminale

Die Syntax einer Sprache wird durch eine Grammatik festgelegt. Sie besteht aus Regeln (auch Produktionen), die angeben, wie sich ein Sprachelement aus anderen zusammensetzt. Dabei gibt es zwei Arten von Symbolen:

  • Terminale (terminal symbols) stehen so, wie sie sind, im fertigen Text: Schlüsselwörter wie SELECT, Satzzeichen wie , oder ;, Ziffern wie 7. Sie werden nicht weiter zerlegt.

  • Nichtterminale (nonterminal symbols) sind Platzhalter, die durch eine weitere Regel erklärt werden oder für etwas stehen, das an anderer Stelle beschrieben ist, z. B. tabelle, bedingung oder ziffer.

Die erste Notation dieser Art stellten John Backus und Peter Naur 1960 für die Programmiersprache ALGOL 60 vor: die Backus-Naur-Form (BNF). Niklaus Wirth ergänzte sie 1977 um Kurzschreibweisen für Optionen und Wiederholungen – die Erweiterte Backus-Naur-Form (EBNF). Eine genormte Fassung beschreibt ISO/IEC 14977:1996. Diese Schreibweise nutzen wir im Folgenden.

Die Bausteine der EBNF

Eine Regel hat links den Namen des Nichtterminals, dann ein Gleichheitszeichen, rechts die Definition und am Ende ein Semikolon. Für die Definition gibt es wenige Bausteine:

Die Bausteine der EBNF nach ISO/IEC 14977
Schreibweise Bedeutung Beispiel
name = … ; Regel (Definition eines Nichtterminals) zuweisung = spaltenname, "=", wert;
"text" Terminal, steht wörtlich im Text "SELECT", ";"
a, b Folge: erst a, dann b "DELETE", "FROM", tabelle
a \| b Alternative: a oder b "ASC" \| "DESC"
[a] Option: a darf fehlen (0- oder 1-mal) ["WHERE", bedingung]
{a} Wiederholung: a beliebig oft (auch 0-mal) {",", zuweisung}
(a \| b), c Gruppierung mit runden Klammern ("LEFT" \| "INNER"), "JOIN"
(* … *) Kommentar (* nur MySQL *)
? … ? Spezialsequenz: Beschreibung in Worten ? A bis Z oder a bis z ?

Das Komma bindet stärker als der senkrechte Strich: "a", "b" | "c" bedeutet „a gefolgt von b“ oder „c“. Wer etwas anderes meint, setzt Klammern.

Syntaxdiagramme lesen

Dieselben Regeln lassen sich grafisch als Syntaxdiagramm darstellen, wegen der an Gleise erinnernden Linien auch Railroad-Diagramm genannt. Man liest sie von links nach rechts und folgt den Linien wie ein Zug den Schienen. Jeder Weg vom Anfang (offener Kreis) bis zum Ende (gefüllter Kreis) ergibt eine gültige Zeichenfolge. Rückwärts darf man nur dort fahren, wo ein Pfeil es erlaubt – das sind die Wiederholungen.

Nach der Konvention von Wirth stehen Terminale in abgerundeten Kästen und Nichtterminale in eckigen Kästen. Ein eckiger Kasten bedeutet: Hier wird ein anderes Diagramm „eingesetzt“.

Syntaxdiagramme der EBNF-Bausteine Folge, Option, Wiederholung, Wiederholung mindestens einmal und Alternative (mit KI erstellt)
Syntaxdiagramme der EBNF-Bausteine Folge, Option, Wiederholung, Wiederholung mindestens einmal und Alternative (mit KI erstellt)

Die Option zeigt sich als Umgehung oberhalb des Elements, die Wiederholung als Schleife mit Rücklaufpfeil. Muss etwas mindestens einmal vorkommen, fehlt die Umgehung. In ISO-EBNF schreibt man dafür entweder a, {a} oder kurz {a}-.

Beispiel: Zahlen und Bezeichner

Ein klassisches Beispiel ist die Definition ganzer Zahlen und von Bezeichnern, wie sie in vielen Programmiersprachen gelten:

ganzzahl   = ["-"], ziffer, {ziffer};
ziffer     = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
bezeichner = buchstabe, {buchstabe | ziffer | "_"};
buchstabe  = ? A bis Z oder a bis z ?;
Syntaxdiagramme für ganze Zahlen, Ziffern und Bezeichner (mit KI erstellt)
Syntaxdiagramme für ganze Zahlen, Ziffern und Bezeichner (mit KI erstellt)

Nach diesen Regeln sind -42, 0 und 007 gültige Ganzzahlen, 4-2 dagegen nicht. zaehler_1 ist ein gültiger Bezeichner, 1zaehler nicht, denn ein Bezeichner muss mit einem Buchstaben beginnen. Die Spezialsequenz bei buchstabe erspart 52 Alternativen.

Beispiel: SQL-Anweisungen

Datenbank-Handbücher beschreiben ihre Befehle fast immer mit EBNF oder Syntaxdiagrammen. Vereinfacht sehen UPDATE und DELETE so aus:

UPDATE-Anweisung = "UPDATE", tabelle, "SET", zuweisung, {",", zuweisung}, ["WHERE", bedingung], ";";
zuweisung        = spaltenname, "=", wert;
DELETE-Anweisung = "DELETE", "FROM", tabelle, ["WHERE", bedingung], ";";
Syntaxdiagramme der SQL-Anweisungen UPDATE und DELETE (mit KI erstellt)
Syntaxdiagramme der SQL-Anweisungen UPDATE und DELETE (mit KI erstellt)

Am Diagramm lässt sich ablesen: Hinter SET steht mindestens eine Zuweisung, weitere folgen jeweils nach einem Komma. WHERE ist optional – fehlt es, betrifft die Anweisung alle Zeilen der Tabelle. Damit ist UPDATE kunde SET ort = 'Bielefeld', plz = '33602' WHERE id = 7; gültig, UPDATE kunde SET WHERE id = 7; dagegen nicht.

Lange Regeln wie eine vollständige SELECT-Anweisung zerlegt man in Teilregeln (select-klausel, from-klausel, where-klausel …). Das hält jedes Diagramm übersichtlich und macht die Struktur der Anweisung sichtbar.

Eine Idee, viele Schreibweisen

In der Praxis begegnen Dir verschiedene Dialekte. Die Bedeutung ist dieselbe, nur die Zeichen unterscheiden sich:

Dieselben Bausteine in verschiedenen EBNF-Dialekten
Baustein ISO/IEC 14977 Wirth (1977) W3C (z. B. XML-Spezifikation) BNF
Regel a = … ; a = … . a ::= … <a> ::= …
Terminal "x" "x" "x" oder 'x' x
Nichtterminal a a a <a>
Folge a, b a b a b <a> <b>
Option [a] [a] a? über eigene Regel
Wiederholung (0…n) {a} {a} a* über Rekursion
Wiederholung (1…n) {a}- a {a} a+ über Rekursion

Beim Lesen einer fremden Grammatik lohnt daher zuerst ein Blick darauf, welcher Dialekt verwendet wird – vor allem, ob Terminale in Anführungszeichen stehen und ob Leerzeichen oder Kommas die Elemente trennen.

Übungsaufgaben

Übungsaufgabe 1 (Stufe 1 – Basiskompetenz): Welche der folgenden Anweisungen sind nach dem Syntaxdiagramm für UPDATE oben gültig? Begründe jeweils kurz.

  1. UPDATE artikel SET preis = 9.99;

  2. UPDATE artikel SET preis = 9.99, bestand = 3 WHERE nr = 4;

  3. UPDATE artikel WHERE nr = 4 SET preis = 9.99;

  4. UPDATE artikel SET preis = 9.99,;

  1. Gültig: WHERE ist optional (die Anweisung ändert dann alle Zeilen).

  2. Gültig: Zwei Zuweisungen, durch Komma getrennt, danach die optionale WHERE-Klausel.

  3. Ungültig: WHERE darf erst nach den Zuweisungen stehen.

  4. Ungültig: Nach dem Komma muss eine weitere Zuweisung folgen.

Übungsaufgabe 2 (Stufe 2 – Kernkompetenz): Formuliere EBNF-Regeln für eine Uhrzeit im Format hh:mm (24-Stunden-Format, also 00:00 bis 23:59). Die Regel ziffer aus dem Beispiel oben darfst Du verwenden. Zeichne anschließend das Syntaxdiagramm.

uhrzeit = stunde, ":", minute;
stunde  = ("0" | "1"), ziffer | "2", ("0" | "1" | "2" | "3");
minute  = ("0" | "1" | "2" | "3" | "4" | "5"), ziffer;

Die Stunden werden in zwei Fälle geteilt: 00 bis 19 (erste Ziffer 0 oder 1, danach beliebig) und 20 bis 23. Bei den Minuten ist nur die erste Ziffer eingeschränkt.

Beispiellösung: Syntaxdiagramme für die Uhrzeit im Format hh:mm (mit KI erstellt)
Beispiellösung: Syntaxdiagramme für die Uhrzeit im Format hh:mm (mit KI erstellt)

Leitfragen

  1. Was ist der Unterschied zwischen einem Terminal und einem Nichtterminal?

Ein Terminal steht wörtlich im fertigen Text (z. B. SELECT oder ;), ein Nichtterminal ist ein Platzhalter, der durch eine weitere Regel erklärt wird (z. B. tabelle). siehe Abschnitt „Grammatik, Regeln, Terminale und Nichtterminale“

  1. Wie notierst Du in ISO-EBNF eine Option, eine Wiederholung und eine Alternative?

Eine Option steht in eckigen Klammern [a], eine Wiederholung in geschweiften Klammern {a}, Alternativen werden mit | getrennt; Elemente einer Folge trennst Du mit Kommas, jede Regel endet mit ;. siehe Abschnitt „Die Bausteine der EBNF“

  1. Woran erkennst Du in einem Syntaxdiagramm Terminale, Nichtterminale, Optionen und Wiederholungen?

Terminale stehen in abgerundeten, Nichtterminale in eckigen Kästen. Eine Option erkennst Du an einer Umgehung, eine Wiederholung an einer Schleife mit Rücklaufpfeil. siehe Abschnitt „Syntaxdiagramme lesen“

  1. Wie prüfst Du mit einem Syntaxdiagramm, ob ein Ausdruck gültig ist?

Du folgst den Linien von links nach rechts und versuchst, die Zeichenfolge Symbol für Symbol abzufahren. Gibt es einen Weg vom Anfang bis zum Ende, ist der Ausdruck gültig. siehe Abschnitt „Beispiel: SQL-Anweisungen“

  1. Warum zerlegt man lange Regeln in Teilregeln?

Teilregeln halten jede Regel und jedes Diagramm übersichtlich, machen die Struktur sichtbar und lassen sich mehrfach verwenden, z. B. zuweisung oder where-klausel. siehe Abschnitt „Beispiel: SQL-Anweisungen“

  1. Wie wird a+ aus der W3C-Schreibweise in ISO-EBNF notiert?

a+ bedeutet „mindestens einmal“; in ISO-EBNF schreibst Du a, {a} oder kurz {a}-. siehe Abschnitt „Eine Idee, viele Schreibweisen“


Hinweis zur Nachnutzung als Open Educational Resource (OER)

Dieser Artikel und seine Texte, Bilder, Grafiken, Code und sonstiger Inhalt sind - sofern nicht anders angegeben - lizenziert unter CC BY 4.0. Nennung gemäß TULLU-Regel bitte wie folgt: “Syntax beschreiben mit EBNF und Syntaxdiagrammen” von oer-informatik.de (H. Stein), Lizenz: CC BY 4.0. Der Artikel wurde unter https://oer-informatik.de/ebnf veröffentlicht, die Quelltexte sind in weiterverarbeitbarer Form verfügbar im Repository unter https://gitlab.com/oer-informatik/ebnf. Erstellt mit KI-Assistenz; von mir umfassend redaktionell überarbeitet, geprüft und freigegeben. Stand: 22.10.2026.

[Kommentare zum Artikel lesen, schreiben] / [Artikel teilen] / [gitlab-Issue zum Artikel schreiben]

Kommentare gerne per Mastodon, Verbesserungsvorschläge per gitlab issue (siehe oben). Beitrag teilen: