Um die Syntax (Aufbau) einer Programmiersprache präzise zu definieren, werden formale Notationen verwendet. Die beiden wichtigsten sind:
Beide beschreiben kontextfreie Grammatiken und definieren, welche Zeichenfolgen syntaktisch korrekt sind.
Die BNF wurde von John Backus und Peter Naur in den 1960er Jahren für die Beschreibung der Programmiersprache ALGOL 60 entwickelt.
Bestandteile:
Beispiel – Einfache arithmetische Ausdrücke:
<ausdruck> ::= <term> | <ausdruck> "+" <term>
<term> ::= <faktor> | <term> "*" <faktor>
<faktor> ::= <zahl> | "(" <ausdruck> ")"
<zahl> ::= <ziffer> | <zahl> <ziffer>
<ziffer> ::= "0" | "1" | "2" | ... | "9"Die EBNF erweitert die BNF um zusätzliche Operatoren für häufige Muster:
Beispiel in EBNF:
ausdruck = term { "+" term } .
term = faktor { "*" faktor } .
faktor = zahl | "(" ausdruck ")" .
zahl = ziffer { ziffer } .
ziffer = "0" | "1" | "2" | ... | "9" .Die EBNF ist kompakter als die BNF und vermeidet viele rekursive Regeln.
Syntaxdiagramme (Railroad Diagrams) sind die grafische Äquivalenz zur BNF/EBNF. Regeln:
Ein syntaktisch korrektes Wort entsteht, wenn man dem Diagramm von Eingang (links) zu Ausgang (rechts) folgen kann.
Beispiel für ausdruck = term { "+" term }:
Syntaxdiagramm "ausdruck":
---->[ term ]---+---->
|
+<---(+)<---[ term ]<---+Man liest: Zuerst ein „term“, dann optional beliebig oft „+“ gefolgt von einem weiteren „term“.
Ein Parser ist ein Programm, das prüft, ob eine Eingabe der Grammatik entspricht, und dabei einen Syntaxbaum (Parse Tree) aufbaut:
Der Syntaxbaum für den Ausdruck „3 + 4 * 2“:
ausdruck
/ \
term + term
| / \
faktor faktor * faktor
| | |
3 4 2Abitur-Tipp: Im Abitur wird häufig eine BNF-Grammatik gegeben mit der Aufgabe, zu prüfen, ob ein bestimmter Ausdruck ableitbar ist, oder ein Syntaxdiagramm in BNF umzuwandeln (und umgekehrt). Übe die Ableitung von Ausdrücken wie „3 + 4 * 2“ Schritt für Schritt. Merke: Ovale = Terminale, Rechtecke = Nichtterminale, Rückpfeile = Wiederholung.