Extended Backus-Naur Form (EBNF)
EBNF ist eine formale Metasprache zur kompakten Beschreibung kontextfreier Grammatiken. Sie erweitert BNF mit syntaktischem Zucker für Optionen, Wiederholungen und Gruppierungen.
Klassifikation
- KomplexitätMittel
- AuswirkungTechnisch
- EntscheidungstypArchitektur
- OrganisationsreifeFortgeschritten
Technischer Kontext
Prinzipien & Ziele
Use Cases & Szenarien
Kompromisse
- Implizite Ambiguitäten führen zu inkonsistenten Implementierungen.
- Verwendung nicht standardisierter Erweiterungen erschwert Tool-Support.
- Unzureichende Tests können fehlerhafte Parser zur Folge haben.
- Kleine, modulare Regeln statt sehr langer Produktionen.
- Explizite Beispiele zu jeder Regel bereitstellen.
- Regelmäßige Validierung mit realen Beispielen durchführen.
I/O & Ressourcen
- Anforderungskatalog zur Syntax
- Bisherige informelle Dokumentation oder Beispiele
- Auswahl eines Ziel-Parsers oder Generators
- Formale EBNF-Grammatikdateien
- Generierter Parser-Code
- Testsuite zur Syntaxvalidierung
Beschreibung
Die Extended Backus-Naur Form (EBNF) ist eine formale Metasprache zur kompakteren und lesbareren Beschreibung von kontextfreien Grammatiken. Sie erweitert die klassische BNF um syntaktische Zucker wie Optionen und Wiederholungen. EBNF dient als Grundlage für Sprachspezifikationen, Parser-Generatoren und Dokumentation von Programmiersprachen.
✔Vorteile
- Kompakte, formale Beschreibung von Syntax reduziert Missverständnisse.
- Direkte Grundlage für automatisierte Parser-Generierung.
- Verbessert Dokumentation und Kommunikation zwischen Teams.
✖Limitationen
- Für kontextsensitive Sprachen nicht ausreichend präzise.
- Unterschiedliche EBNF-Dialekte können Portabilität einschränken.
- Große oder verschachtelte Grammatiken werden schwer lesbar.
Trade-offs
Metriken
- Regelanzahl
Anzahl der Produktionsregeln in der EBNF-Grammatik zur Abschätzung von Komplexität.
- Ambiguitätsfälle
Anzahl und Schwere der erkannten Ambiguitäten während der Validierung.
- Testabdeckung für Syntax
Prozentsatz der Grammatikregeln, die durch Tests abgedeckt sind.
Beispiele & Implementierungen
Einfache Arithmetik-Grammatik
Eine kompakte EBNF-Definition für Zahlen, Additionen und Multiplikationen mit Präzedenzregeln.
Teilmenge einer Konfigurationssprache
Beschreibung der Syntax einer Konfigurationsdatei (Abschnitte, Schlüssel, Werte) in EBNF zur Validierung.
ECMAScript-ähnliche Notation
Abschnittsweise Darstellung von Sprachkonstrukten ähnlich der Notation in Sprachspezifikationen.
Implementierungsschritte
Kernsyntax identifizieren und in EBNF formulieren.
Grammatik mit einem Parser-Generator testen und Konflikte beheben.
Automatisierte Tests und Beispiele ergänzen.
Dokumentation und Styleguide für Grammatikpflege erstellen.
⚠️ Technische Schulden & Engpässe
Tech Debt
- Veraltete, nicht mehr angepasste EBNF-Dialekte in Legacy-Projekten.
- Unzureichende Testabdeckung bei Syntaxänderungen.
- Dokumentation stimmt nicht mit implementierter Grammatik überein.
Bekannte Engpässe
Beispiele für Missbrauch
- EBNF verwenden, um kontextsensitive Semantik vollständig zu beschreiben.
- Nicht abgestimmte Dialekte zwischen Dokumentation und Implementierung.
- Grammatik so komprimieren, dass sie für Leser unverständlich wird.
Typische Fallen
- Verschiedene Tools interpretieren Wiederholungs- und Optionssyntax unterschiedlich.
- Implizite Präzedenzregeln nicht klar dokumentieren.
- Fehlende Testfälle für Randfälle der Grammatik.
Erforderliche Fähigkeiten
Drivers (Architectural Drivers)
Constraints
- • Unterschiedliche EBNF-Dialekte zwischen Tools
- • Limitationen kontextsensitiver Regeln
- • Abhängigkeit von Parser-Generator-Fähigkeiten