Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Datei parsen - Welche Vorgehensweise ist die vielversprechendste? (https://www.delphipraxis.net/167932-datei-parsen-welche-vorgehensweise-ist-die-vielversprechendste.html)

Dawn87 26. Apr 2012 09:45

Datei parsen - Welche Vorgehensweise ist die vielversprechendste?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

demnächst werde ich eine Anwendung entwickeln müssen, die ein vorgebenes Dateiformat interpretieren können muss (siehe Dateianhang).

Grundsätzlich stellt sich mir die Frage, wie man das Ganze am cleversten angeht. Es gibt die Option einen Parser "per Hand" zu schreiben. Alternativ könnte man hier einen Compilergenerator einsetzen. Letztere Möglichkeit würde die Wartung und zukünftige Erweiterungen meiner Meinung nach erleichtern. In der Vergangenheit habe ich ein wenig mit Coco/R für C# experimentiert, finde aber keine Version für Delphi, die noch gepflegt wird - oder zumindest eine mit Delphi XE2 lauffähig ist.

Ausprobiert habe ich Tetzels Coco/R Variante. Die generierten Projekte lassen sich zwar mit Delphi XE2 kompilieren, aber verarbeiten den Eingabestream anscheinend nicht.

Wie würdest ihr diese Aufgabe angehen? Einen Parser per Hand schreiben (Crenshaw's Compiler-Tutorial) ? Einen Compiler-Generator nutzen? Wenn letzteres, welchen?

Ich habe an diesen Thread eine Beispieldatei angehangen, die dem zu parsenden Dateiformat entspricht.

Grundsätzlich besteht auch die Möglichkeit C# für diese Aufgabe zu nutzen. Dort ist die Verwendung von Compiler-Generatoren etwas einfacher, da es dort einige gibt die gewartet werden und bei mir ohne größere Probleme funktioniert haben. In der Firma verwenden wir allerdings hauptsächlich Delphi, deswegen wäre eine Lösung in meiner "Hauptsprache" etwas einfacher, da man auch auf fertige Bausteine zurückgreifen kann usw.

Beste Grüße

isilive 26. Apr 2012 10:10

AW: Datei parsen - Welche Vorgehensweise ist die vielversprechendste?
 
Ich weiss nicht wieviel Zeit du hast? Aber HIER gibts einen 10-wöchigen gratis Unikurs in Compilerbau. Ich weiss jetzt nicht ob dir der viel hilft, aber ich mache einen Parallelkurs und man lernt dabei unheimlich viel! :coder:

Es gab auch parallel dazu noch "Algorithms" und "Natural language processing". Die könnten helfen die beste Methode zu entwickeln/verstehen/auszusuchen.

Popov 26. Apr 2012 12:03

AW: Datei parsen - Welche Vorgehensweise ist die vielversprechendste?
 
An für sich sehe ich da kein so großes Problem, erinnert nicht klein wenig an JSON.

Die Frage vorerst ist, willst du es komplett konvertieren oder nur auf einen Wert zugreifen?

Dawn87 26. Apr 2012 12:23

AW: Datei parsen - Welche Vorgehensweise ist die vielversprechendste?
 
Hallo,

unmöglich ist diese Aufgabe keinesfalls. Ich bin mir bloß nicht sicher, welcher Lösungsansatz der eleganteste wäre.

Ich muss die komplette Struktur parsen, da später sämtlich Werte über eine GUI verstellt werden sollen. Anschließend muss aus der Struktur im Speicher auch wieder eine Datei generiert werden.

Die Links zu den Online-Kursen sehen erst einmal vielversprechen aus. Vielen Dank dafür.

Grüße

Codewalker 26. Apr 2012 12:34

AW: Datei parsen - Welche Vorgehensweise ist die vielversprechendste?
 
An einem Grundproblem wirst du auch mit einem Compilergenerator nicht vorbeikommen: Eine gute (d.h. vollständige und eindeutige) kontextfreie Grammatik für dein Dateiformat zu schreiben. Oder genauer: Die genau die Sprache erkennt, die dein Dateiformat definiert. Je nach Compilergenerator, also eine LL(k)-Grammatik (z.B. JavaCC), LALR(1)-Grammatik (Yacc), etc. .
Dazu gehören diverse Transformationen, aber auch Intuition und Gefühl. Die Compilergeneratoren arbeiten auf Basis der Grammatiken nach einem weitgehend festen Schema. Wenn es also um zukünftige Wartbarkeit geht, würde ich den Generator weglassen und den Parser selber schreiben, um möglichst unabhängig vom Compilergenerator zu sein.

shmia 26. Apr 2012 13:12

AW: Datei parsen - Welche Vorgehensweise ist die vielversprechendste?
 
Zitat:

Zitat von Popov (Beitrag 1163625)
... erinnert nicht klein wenig an JSON

Wenn man die Daten auf das von XML bekannte Document Object Modell (DOM) abbilden würde, dann könnte man nach dem Einlesen der Daten programmintern so arbeiten, als ob man eine XML-Datei eingelesen hätte.
Damit kann man auch XPath-Ausdrücke benützen um auf die Daten zuzugreifen.
Als Bonus kann man die Baumstruktur der Daten auch als XML laden/speichern.

Iwo Asnet 26. Apr 2012 13:15

AW: Datei parsen - Welche Vorgehensweise ist die vielversprechendste?
 
Zitat:

Zitat von Codewalker (Beitrag 1163631)
Wenn es also um zukünftige Wartbarkeit geht, würde ich den Generator weglassen und den Parser selber schreiben, um möglichst unabhängig vom Compilergenerator zu sein.

Gerade deswegen (Wartbarkeit) würde ich einen Generator verwenden. Sollte sich die Grammatik ändern, hat man das -wupps- eingebaut.

Wobei bei dieser kleinen Sprache ein CoGen ein wenig überdimensioniert wäre. Das bekommt man per Hand gerade noch so hin ;-)

@Shmia: Sogar noch eleganter.

Dawn87 26. Apr 2012 13:32

AW: Datei parsen - Welche Vorgehensweise ist die vielversprechendste?
 
@Codewalker / Iwo:
Welchen Generator würde man denn in Verbindung mit Delphi XE2 am Besten verwenden?

@Shmia:
Wie würde man bei Deinem Vorschlag vorgehen? Also, wenn man Deinen Vorschlag befolgen würde, wie würde man anfangen? Gibt es eine Klasse/Interface auf das man aufsetzen kann?

Grüße

implementation 26. Apr 2012 14:03

AW: Datei parsen - Welche Vorgehensweise ist die vielversprechendste?
 
Zitat:

Zitat von Iwo Asnet (Beitrag 1163642)
Gerade deswegen (Wartbarkeit) würde ich einen Generator verwenden. Sollte sich die Grammatik ändern, hat man das -wupps- eingebaut.

Je nachdem, wie man den Parser schreibt, ließe sich auch ein handgeschriebener Parser problemlos erweitern.
Ein kleiner Parser ist schnell geschrieben und unkompliziert und verschlingt handgeschrieben in der Regel viel weniger Code als ein generierter.

Memnarch 26. Apr 2012 16:24

AW: Datei parsen - Welche Vorgehensweise ist die vielversprechendste?
 
Ich bin kein spezialist auf dem Gebite, aber habe so meine Erfahrungen gesammelt.

Also wenn du alles per hand machst, würde ich erstmal mit einem Lexer anfangen, der dir alles in Tokens aufsplittet. Dazu noch methoden die für dich tokens aus der liste holen und vielleicht auch gleich dabei auf nen bestimmten typ testen(oder inhalt).

Dein parser nutzt dan den Lexer. Wie bereits erwähnt ist ein Handgeshcriebener Parser nicht soo schwer. Vorausgesetzt du nutzt soetwas wie einen Lexer. Ansonsten artet es in Spaghetti code aus.

Ich habe in der vergangenheit öfters nen parser geschrieben und mein aktueller höhepunkt ist der Compiler für die DCPU16(siehe spiel 0x10c) der mit meinem Assembler auch direkt auf den Bytecode runtergeht. Coomipliert wird eine Pascal ähnliche Hochsprache. Alles 100% handcrafted.

Alles was ich wissen musste steht hier drin:
Lets build a compiler

Ja es lässt viele der Theorie höllen des Cimpilerbaus außen vor, aber ich musste eh nur noch an infos fürs formelparsing rankommen. Der Lexer wird auch hier vorgesdchlagen(wobei er bei mir mit Classen etc arbeitet)

PS: Ich habe noch nie mit einem Compilergenerator gearbeitet, aber meinen Handgeschriebenen parser kann ich sehr leicht warten und erweitern.

MFG
Memnarch


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:13 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz