Java Eingabeüberprüfung mit Erweiterte Backus-Naur-Form

Mechanius

Member
Hi,

ich möchte vom Benutzer eingegebene Strings auf ihrer Gültigkeit hin überprüfen.
Die "gültigen" Werte liegen als EBNF vor.
Kann ich damit in Java irgendwas anfangen oder muss ich die EBNF durch reguläre Ausdrücke ersetzen?

MfG
Mechanius
 

Tarantoga

Moderator
Wenn ich Dich richtig verstehe willst Du vom Benutzer eingegebene Daten mit gespeicherten Daten abgleichen, also einfach Zeichenketten miteinander vergleichen... Warum nimmst Du nicht einfach die Benutzer-Eingabe als Muster und durchsuchst die gespeicherten Daten nach diesem Muster? Die Methode mit der Du die Daten durchsuchst hängt davon ab ob die Daten z. B. in einer Datenbank oder einfach in einer Datei liegen...
 

Mechanius

Member
würde gehen ich will kurz ein ein Beispiel geben:
Code:
length ::= number (~"em" | ~"ex" | ~"px" | ~"in" | ~"cm" | ~"mm" | ~"pt" | ~"pc")?
number ::= integer | [+-]? [0-9]* "." [0-9]+
integer ::= [+-]? [0-9]+
So sehen die Informationen die ich über eine korrekte Eingabe hab aus. Meine Frage ist jetzt ob man das ohne größeren Aufwand in Java als Prüfung umsetzen kann.

MfG
Mechanius
 

GrafZahl

Member of Honour
"ohne größeren aufwand" ... ist ein dehnbarer begriff ...

du wirst vermutlich einen parser für EBNF schreiben müssen, der das ganze in einen graphen überführt, und die test primitiven (string/regex vergleich) in objekte überführt

jedes element des graphen, ob blatt oder nicht, muss für einen eingabestring vermelden ob es den string akzeptiert, und wieviele zeichen es "verbrauchen kann" ... alles was kein blatt des graphen ist, muss den test an seine untergeordneten knoten weitergeben.

für untergeordnete knoten muss es eine prioritätsliste geben in welcher reihenfolge sie zu testen sind.

untergeordnete knoten der priorität 0 sind als erste dran ...
untergeordnete knoten einer priorität n != 0 werden nur getestet, wenn ein knoten der priorität n-1 die eingabe akzeptiert ... für den test der knoten der priorität n sind die verbrauchten zeichen der vorgängers mit der priorität n-1 aus der eingabe zu entfernen

ein knoten der kein blatt ist meldet die eingabe nur als akzeptiert, wenn knoten aller vorhandenen prioritäten die eingabe akzeptieren


...


das ganze ist also umsetzbar ... nur bleibt die frage des aufwands ...
 

Mechanius

Member
Danke,

nur ohne größeren Aufwand schließt aus meiner sicht einen eigen Parser aus aber mal sehen ob ich die Zeit nicht doch dazu finde.
 
Oben