Gast+2008-09-10 01:00:02--ParseRecDescent ist (E)BNF in seiner Struktur sehr ähnlich und ParseRecDescent ist mächtiger als BNF.
Es sollte Möglich sein zumindest das BNF-Format ohne Änderung der Logik in ParseRecDescent überführen zu können.
ok, ich schau mir das mal an
Quotezu CSV und BNF:
Einfach ist es Einzelne Felder auf Richtigkeit zu testen. Wenn aber Felder von einander Abhängen, so muß die ganze Zeile geprüft werden.
Schlimm wird es, wenn Zeilen von einader abhängen.
die einzelnen Felder sollen geprüft werden auf:
syntax_1. Belegung=optional, mandatorisch, eindeutig
Wobei die Prüfung auf Eindeutigkeit (unique) sich eh nur auf die aktuelle Datei beziehen könnte, und dann schon genug Mühe macht (Feldwerte sammeln -> sortieren -> doppelte identifizieren.
==> nächst schwächerers Kriterium für unique Felder wäre "mandatorisch", das wäre auch schon ok
syntax_2. Format-Prüfung
vermutlich relativ leicht machbar (Grundtyp = String definierter Länge, numerischer Wert mit definierter Anzahl vorkomma/Nachkommastellen, oder Datum in einer bestimmten Formatform)
syntax_3. Wertebereich-Überprüfung
Da stelle ich mir einen regulären Ausdruck vor, dann sind zumindest "einfache" numerische und alfanumerische Dinge relativ leicht abprüfbar (incl. "*" oder "'a' | 'b' | 'c'" ) . Bei Datums-Formatangaben könnte es etwas kniffliger werden (z.B. "vorgefundene Uhrzeit muß größer/kleiner als $sysdate sein", oder: "Uhrzeit wird mit hh:mm:ss angegeben, aber mm:ss müssen 00:00 enthalten"
semantik_1: (Spaltenabhängigkeiten innerhalb einer Zeile)
zuvor benannte Urzeit-Bereichs-Prüfung könnte schon fast zu derartigen semantischen prüfungen zählen.
Spaltenabhängigkeiten kommen bei meinen Datenformaten auch vor, aber da könnte ich momentan noch drauf verzichten
semantik_2: (Zeilenabhängigkeiten zwischen Zeilen)
"Ende-Record 1. Spalte enthält die Anzahl aller Datenrecords" verlangt ein wenig Arithmetik-Kenntnisse, deises Feld gibts in jeder Datei. Auf dessen Auswertung müsste ich vermutlich initial verzichten
Die unter syntax_1 genannte eindeutigkeit (unique key) fällt im Prinzip in die gleiche Prüfklasse wie die Zählerei