Wie kann ich eine EBNF programmieren?

2 Antworten

Die Eingaben kannst du mit einem regulären Ausdruck prüfen.

In Python könntest du hierfür das re-Modul verwenden. Andere Programmiersprachen haben wiederum ihre eigenen Klassen/Module, mit denen sie reguläre Ausdrücke unterstützen. Du solltest lediglich berücksichtigen, dass nicht jede Programmiersprache dieselbe Regex-Enginge verwendet, weshalb es Unterschiede in der Syntax geben kann. Eine Übersicht dazu findest du hier.

Zuletzt noch ein einfaches Beispiel mit Python:

import re

value = input()

if not re.fullmatch("[0-9]*", value):
  print("Contains more than digits")

Hier wird geprüft, ob die Eingabe noch andere Zeichen als nur Ziffern beinhaltet.

Im Endeffekt parst Du die Eingabe und schaust, ob sie durch die Grammatik erzeugt wird.

EBNFs sind kontextfrei, d.h. Du kannst REs fürs matching bei halbwegs umfangreichen Grammatiken vergessen.

Du brauchst also eine Stackmaschine, einfache Lösung ist den Callstack zu nutzen und eine Form eines rekursiven Descendparsers zu schreiben.

https://en.wikipedia.org/wiki/Recursive_descent_parser

(Link zur wikipedia, da hier ein Beispiel dargestellt wird, es gibt natürlich auch umfangreichere Lektüre)