AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Datei parsen - Welche Vorgehensweise ist die vielversprechendste?
Thema durchsuchen
Ansicht
Themen-Optionen

Datei parsen - Welche Vorgehensweise ist die vielversprechendste?

Ein Thema von Dawn87 · begonnen am 26. Apr 2012 · letzter Beitrag vom 26. Apr 2012
Antwort Antwort
Seite 1 von 2  1 2      
Dawn87

Registriert seit: 15. Feb 2007
Ort: Lüdenscheid
189 Beiträge
 
Delphi XE5 Professional
 
#1

Datei parsen - Welche Vorgehensweise ist die vielversprechendste?

  Alt 26. Apr 2012, 09:45
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
Angehängte Dateien
Dateityp: txt Dateiformat.txt.txt (4,9 KB, 71x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von isilive
isilive

Registriert seit: 15. Okt 2008
Ort: Österreich
192 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Datei parsen - Welche Vorgehensweise ist die vielversprechendste?

  Alt 26. Apr 2012, 10:10
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!

Es gab auch parallel dazu noch "Algorithms" und "Natural language processing". Die könnten helfen die beste Methode zu entwickeln/verstehen/auszusuchen.
Stefan
Jedoch kann die referenzbasierte Implementierung des Standard-Objektmodells in Kombination mit den komplexen syntaktischen Dereferenzierungsregeln bei einer objektorientierten API wie ein Stolperstein wirken.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: Datei parsen - Welche Vorgehensweise ist die vielversprechendste?

  Alt 26. Apr 2012, 12:03
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?
  Mit Zitat antworten Zitat
Dawn87

Registriert seit: 15. Feb 2007
Ort: Lüdenscheid
189 Beiträge
 
Delphi XE5 Professional
 
#4

AW: Datei parsen - Welche Vorgehensweise ist die vielversprechendste?

  Alt 26. Apr 2012, 12:23
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
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Datei parsen - Welche Vorgehensweise ist die vielversprechendste?

  Alt 26. Apr 2012, 12:34
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.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

AW: Datei parsen - Welche Vorgehensweise ist die vielversprechendste?

  Alt 26. Apr 2012, 13:12
... 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.
Andreas
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#7

AW: Datei parsen - Welche Vorgehensweise ist die vielversprechendste?

  Alt 26. Apr 2012, 13:15
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.
  Mit Zitat antworten Zitat
Dawn87

Registriert seit: 15. Feb 2007
Ort: Lüdenscheid
189 Beiträge
 
Delphi XE5 Professional
 
#8

AW: Datei parsen - Welche Vorgehensweise ist die vielversprechendste?

  Alt 26. Apr 2012, 13:32
@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
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Datei parsen - Welche Vorgehensweise ist die vielversprechendste?

  Alt 26. Apr 2012, 14:03
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.
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#10

AW: Datei parsen - Welche Vorgehensweise ist die vielversprechendste?

  Alt 26. Apr 2012, 16:24
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
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden

Geändert von Memnarch (26. Apr 2012 um 16:30 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:00 Uhr.
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