Informatik · Klasse 11–13 · aktualisiert
EBNF einfach erklärt: Regeln lesen und entwerfen
Du liest EBNF-Regeln, prüfst Zeichenfolgen Teil für Teil, schreibst eigene Regeln und erfährst, was EBNF nicht festlegt.
0 von 9 Aufgaben gelöst
Kurz gesagt
EBNF ist eine Schreibweise für Regeln, die den Aufbau von Zeichenfolgen beschreiben. Terminalsymbole stehen in Anführungszeichen, | trennt Alternativen, [ … ] ist eine Option, { … } eine Wiederholung (auch keinmal). Die Bedeutung eines Textes legt EBNF nicht fest.
Ob ein Text zu einer Sprache passt, lässt sich mit genauen Regeln prüfen. Für solche Regeln gibt es eine knappe Schreibweise: die Erweiterte Backus-Naur-Form, kurz EBNF. Du lernst, sie zu lesen, anzuwenden und selbst zu schreiben. Du erfährst auch, wo ihre Grenze liegt.
Deine Lernziele
Hake ab, was du schon kannst. Löst du alle Aufgaben eines Abschnitts, hakt Mela das Ziel für dich ab.
4 Abschnitte
Ein Text besteht zunächst aus sichtbaren Zeichen wie Buchstaben, Ziffern und Satzzeichen. Diese Zeichen heißen Terminalsymbole. In EBNF werden sie grundsätzlich in Anführungszeichen geschrieben, zum Beispiel "7".
Eine EBNF-Regel ordnet Zeichenfolgen einem Nichtterminalsymbol zu. Das ist ein Name wie Ziffer, der bei der Erzeugung eines Textes durch Terminal- und Nichtterminalsymbole ersetzt wird. Der Name steht links vom Gleichheitszeichen, rechts steht, was er bedeuten soll. Am Ende der Regel steht normalerweise ein Semikolon als Endezeichen. Spitze Klammern um Nichtterminalsymbole sind nicht nötig, weil die Anführungszeichen Verwechslungen ausschließen.
Ein Beispiel mit zwei Regeln:
ZifferAusserNull = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; Ziffer = "0" | ZifferAusserNull ;
Gelesen heißt das: Eine Ziffer ist eine 0 oder eine ZifferAusserNull. Die ZifferAusserNull ist eine der Zahlen von 1 bis 9. Der senkrechte Strich trennt die Alternativen. Es gilt nur die eine oder die andere, nie beide zugleich.
EBNF selbst ist eine formale Metasyntax: eine Schreibweise, mit der man Regeln für Texte aufschreibt.
Definition
Nichtterminalsymbol
Ein Nichtterminalsymbol ist ein Name, der in einer Regel definiert wird und bei der Erzeugung eines Textes durch Folgen von Terminal- und Nichtterminalsymbolen ersetzt wird. Es steht auf der linken Seite der Regel.
| Zeichen | Name | Bedeutung |
|---|---|---|
| = | Definition | Links steht das Nichtterminalsymbol, rechts seine Erklärung |
| , | Aufzählung | Die Bestandteile folgen nacheinander |
| | | Alternative | Nur eine der Möglichkeiten gilt |
| [ … ] | Option | Der Inhalt kann, muss aber nicht vorkommen |
| { … } | Optionale Wiederholung | Beliebig oft, auch keinmal |
| ( … ) | Gruppierung | Fasst Elemente zu einer Einheit zusammen |
| " … " | Anführungszeichen | Umschließen ein Terminalsymbol |
| ; | Endezeichen | Beendet die Regel, normalerweise mit einem Semikolon |
Teste dich
Prüfen heißt: Lässt sich der Text aus der Regel erzeugen? Du gehst so vor.
Zuerst liest du die Regel in Worten. Dann zerlegst du den Text von links nach rechts in Teile und ordnest jedem Teil ein Symbol der Regel zu. Bei einer Alternative probierst du, welche Möglichkeit passt; es gilt nur eine davon. Bei einer Option fragst du, ob das Teil da ist oder fehlt. Bei { … } zählst du, wie oft das Element vorkommt; auch keinmal ist erlaubt. Am Ende muss jedes Zeichen des Textes einem Symbol zugeordnet sein.
Eine Folge mit Kommata passt Teil für Teil in dieser Reihenfolge. Mit Zwoelf = "1", "2" ; und Dreihundertzwoelf = "3", Zwoelf ; passt der Text 312: erst "3", dann "1", dann "2".
In den Beispielen dieser Seite steht kein Leerzeichen im Text. Wie Leerzeichen zwischen Symbolen zu behandeln sind, wird hier nicht geklärt.
Beispiel: Zwei Texte an der Regel Zahl prüfen
- 1Regel: Zahl = ([ "-" ], ZifferAusserNull, { Ziffer }) | "0" ;
- 2Text -305: "-" passt zur Option, 3 ist eine ZifferAusserNull, 0 und 5 passen zu { Ziffer }. Der Text passt.
- 3Text 0: Er passt zur zweiten Alternative "0".
- 4Text 007: Die erste Alternative braucht als erstes Zeichen "-" oder eine Ziffer außer 0. Die zweite Alternative passt nur zum Text 0. Der Text passt nicht.
Merke: Ein Text passt nur dann zur Regel, wenn du jedes Zeichen einem Teil der Regel zuordnen kannst, und zwar in der richtigen Reihenfolge.
Teste dich
Beim Entwerfen gehst du in drei Schritten vor. Erst beschreibst du das Format in Worten. Dann wählst du für jeden Teil den passenden Baustein. Eine Auswahl schreibst du mit |, etwas, das fehlen darf, mit [ … ], und etwas, das beliebig oft und auch keinmal vorkommt, mit { … }. Mit ( … ) fasst du Elemente zu einer Einheit zusammen. Zuletzt prüfst du die Regel.
Zum Prüfen schreibst du Beispiele auf, die passen sollen, und Beispiele, die nicht passen sollen. Du brauchst beide Arten. Passende Beispiele zeigen, ob die Regel genug erlaubt. Unpassende zeigen, ob sie zu viel erlaubt.
Auch eine feste Anzahl an Wiederholungen lässt sich in EBNF festlegen. Alle Formate in diesem Abschnitt sind ausgedacht. Die Bausteine stammen aus EBNF.
Beispiel: Ausgedacht: Klassennamen
- 1Format: eine Zahl ohne führende 0, danach ein kleiner Buchstabe a oder b. Bei Zahlen mit zwei Stellen darf die zweite Ziffer vorkommen oder fehlen.
- 2Regel: Klasse = ZifferAusserNull, [ Ziffer ], ( "a" | "b" ) ;
- 3Passt: 5a und 10b
- 4Passt nicht: 05a (beginnt mit 0), 5c (c fehlt in der Alternative), 123a (nur eine zweite Ziffer ist erlaubt)
Merke: Alternative: | · darf fehlen: [ … ] · beliebig oft, auch keinmal: { … } · eine Einheit: ( … ).
Teste dich
Syntax ist ein Regelsystem, das elementare Zeichen zu zusammengesetzten Zeichen kombiniert. Ihr gegenüber stehen die Interpretationsregeln der Semantik, also die Bedeutung. Geht es nur darum, ob ein Text wohlgeformt („syntaktisch korrekt“) ist, kann man von der inhaltlichen Bedeutung der Zeichen absehen.
EBNF beschreibt die Syntax. Für die Semantik einer Sprache ist sie nicht geeignet. Man kann damit zum Beispiel eindeutige Sachverhalte gar nicht oder mehrfach definieren, sodass logische Lücken oder Widersprüche entstehen können. Auch die Zuweisungskompatibilität von Ausdrücken kann EBNF nicht festlegen. Gemeint ist, ob ein Ausdruck zu dem passt, dem er zugewiesen wird.
EBNF stellt kontextfreie Grammatiken dar. Oft versteht man unter der Syntax einer Programmiersprache nur Regeln, die sich so ausdrücken lassen. Nicht dazu zählt zum Beispiel die Pflicht, vorkommende Namen zu deklarieren, also vorher bekannt zu machen.
Definition
Syntax
Die Syntax einer formalen Sprache ist ein System von Regeln, nach denen wohlgeformte Texte aus einem Zeichenvorrat gebildet werden. Die Bedeutung der Texte gehört zur Semantik.
Beispiel: Aufbau stimmt, Bedeutung offen
- 1Regel einer Mini-Sprache: Zuweisung = Bezeichner, ":=", ( Zahl | Bezeichner | String ) ;
- 2Der Text ESEL:=GIRAFFE passt zur Regel: ESEL und GIRAFFE sind Bezeichner, dazwischen steht :=.
- 3Damit ist der Aufbau in Ordnung. Das ist die Syntax.
- 4Ob GIRAFFE vorher festgelegt wurde und ob der Wert zu ESEL passt, legt EBNF nicht fest.
Merke: EBNF sagt, wie ein Text aufgebaut sein muss. Was er bedeutet und ob die Teile inhaltlich zusammenpassen, sagt sie nicht.
Teste dich
Alles auf einen Blick
Erweiterte Backus-Naur-Form
Regelaufbau
Links steht ein Nichtterminalsymbol, nach = die Erklärung, normalerweise endet die Regel mit ;
Terminalsymbole
stehen grundsätzlich in Anführungszeichen
Zeichen
| Alternative, [ … ] Option, { … } Wiederholung (auch keinmal), ( … ) Gruppierung
Prüfen
Den Text Teil für Teil den Symbolen der Regel zuordnen
Grenze
EBNF beschreibt die Syntax, nicht die Semantik und nicht die Zuweisungskompatibilität
Musteraufgabe · Schritt für Schritt
Ausgedacht: Spindcode als Regel schreiben
- 1Aufgabe (ausgedachtes Format): Ein Spindcode beginnt mit L oder R. Danach folgt eine Zahl ohne führende 0. Am Ende darf ein ! stehen. Es gelten ZifferAusserNull und Ziffer wie oben.
- 2Schritt 1, Alternative für den ersten Buchstaben: ( "L" | "R" )
- 3Schritt 2, erste Ziffer nicht 0, danach beliebig viele Ziffern, auch keine: ZifferAusserNull, { Ziffer }
- 4Schritt 3, Option für das Ausrufezeichen: [ "!" ]
- 5Regel: Spindcode = ( "L" | "R" ), ZifferAusserNull, { Ziffer }, [ "!" ] ;
- 6Passt: L7 und R120! (R, dann 1, dann 2 und 0, dann !)
- 7Passt nicht: L0 (0 ist keine ZifferAusserNull), 7L (beginnt nicht mit L oder R), L12!! (nur ein ! ist erlaubt)
Fehler finden
Prüfe die Aussagen zur Regel für natürliche Zahlen In einer Zeile steckt ein Fehler. Tippe sie an.
Fehler in Zeile 4Geschweifte Klammern erlauben auch keinmal. Richtig: Der Text 7 passt, denn die Wiederholung darf leer bleiben.
Lückentext
Wähl in jeder Lücke das passende Wort und prüf dann deine Antworten.
Links vom Gleichheitszeichen steht das , das die Regel definiert. Das Endezeichen am Ende einer Regel ist normalerweise das . Der senkrechte Strich trennt Alternativen. Davon ist erlaubt.
Karteikasten
Erst selbst überlegen, dann umdrehen.
Übung mit Feedback