EBNF Beispiel
Als Anwendungsbeispiel fĂĽr die EBNF Metasprache betrachten wir die formale Definition des [vereinfachten] deutschen Satzbaus:
deutsch = subjekt verb praedikat objekt subjekt = ich | (die katze) verb = spiele | spielt praedikat = [ gerne ] objekt = tafli | fangen
Damit sind die formal erlaubten Sätze:
ich spiele tafli ich spiele gerne tafli die katze spielt fangen die katze spielt gerne fangen
Neben obigen semantisch korrekten Sätzen erlaubt die Sprachdefinition aber auch die formal bzw. syntaktisch, aber nicht semantisch korrekten Sätze:
ich spielt tafli die katze spielt tafli usw.
Die Sprachdefinition mittels EBNF kann also einfache Sprachzusammenhänge wiedergeben, aber nicht alle Feinheiten einer natürlichen Sprache, die sich häufig nur aus dem Kontext ergeben. In diesem Zusammenhang spricht man auch davon, dass man mit EBNF kontextfreie Grammatiken definieren kann.
Für natürliche Sprachen ist EBNF daher ungeeignet, für einfache Compilersprachen wie C ist es aber hinreichend. Im Gegenteil, es ist sogar gewünscht, Compilersprachen mittels EBNF zu definieren, da sich der Aufwand für den Compilerbau dann aufgrund der einfachen Syntax in Grenzen hält. Es lassen sich sogar Compiler bzw. Parser automatisch aus einer EBNF-Definition erzeugen (Lex/Yacc).
Q EBNF ist selber eine Sprache, wenn auch eine Metasprache, kann sie sich selber definieren?
Ja, wenn man das damit verbundene Henne-Ei Problem außer acht läßt:
grammatik = { regel } regel = regel_name "::=" | "=" abfolge abfolge = { variante } variante = wort { "|" wort } wort = ( "[" abfolge "]" ) | ( "{" abfolge "}" ) | ( "(" abfolge ")" ) | "wort" | "regel_name"
← Erweiterte Backus Naur Form | ● | Arithmetische AusdrĂĽcke →