Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Wie am besten Parsen? (https://www.delphipraxis.net/45151-wie-am-besten-parsen.html)

malo 30. Apr 2005 16:59


Wie am besten Parsen?
 
Hi!

Ich hab mir mal überlegt eine kleine Scriptsprache zu entwickeln... allerdings weiß ich grade nicht, wie ich am besten den Script-Quellcode parsen kann (also welche Technik ich verwenden soll). Ich könnte ja prinzipiell den ganzen Code mit einer Schleife durchlaufen, aber das halte ich nicht für eine gute Idee... besonders, wenn ich nicht nach Zeichen suche, sondern nach Strings (und die mit solch einer Schleife schwieriger zu finden sind).

Kennt jemand zufällig einen Trick, wie man leicht den Code parsen kann? Oder hat überhaupt jemand Ideen, wie man das machen könnte?



Danke schonmal im Vorraus!

Dax 30. Apr 2005 17:03

Re: Wie am besten Parsen?
 
Ich habs zwar mal gemacht, aber im erklären bin ich nicht so sehr großartig ;-)

Also, wenn du eine Sprache haben willst, musst du verschiedene syntaktische Elemente festlegen, darunter auch Begrenzer für Statements usw. in Pascal gibt es jede Menge dieser Dinger: ";,()[] begin end for in do out var type" usw.. Du gehts eigentlich beim parsen nur von einem Begrenzer zum nächsten und wertest aus, was dazwischen steht, gekoppelt mit der Bedeutung des Begrenzers selbst.

malo 30. Apr 2005 17:06

Re: Wie am besten Parsen?
 
Zitat:

Zitat von Dax
Ich habs zwar mal gemacht, aber im erklären bin ich nicht so sehr großartig ;-)

Also, wenn du eine Sprache haben willst, musst du verschiedene syntaktische Elemente festlegen, darunter auch Begrenzer für Statements usw. in Pascal gibt es jede Menge dieser Dinger: ";,()[] begin end for in do out var type" usw.. Du gehts eigentlich beim parsen nur von einem Begrenzer zum nächsten und wertest aus, was dazwischen steht, gekoppelt mit der Bedeutung des Begrenzers selbst.

Aber wie lese ich die Begrenzer am besten aus? Mit Pos(PosEx)? Oder mit Copy? Oder wie genau sollte man das am besten machen? :gruebel:

Ultimator 30. Apr 2005 17:14

Re: Wie am besten Parsen?
 
Du könntest dir eine Funktion schreiben, die dir zurückgibt, ob ein Zeichen eine Ziffer ist, ein + oder - oder * oder / Zeichen ist oder ein Buchstabe.
Dann durchläufst du mit ner while-Schleife (z.B. ob ein Zeichen eine Ziffer ist) den String und suchst nach Zahlen.
Dann machst du das ganze mit den Rechenzeichen und schaust, wie alles gerechnet werden muss.

Natürlich musst du auf Klammern aufpassen ;)

Sprint 30. Apr 2005 17:19

Re: Wie am besten Parsen?
 
Ein sehr einfacher, aber hilfreicher Parser wäre z.B. die Klasse TParser aus der Unit Classes. Darauf könntest du deinen eigenen Parser aufbauen.

malo 30. Apr 2005 17:34

Re: Wie am besten Parsen?
 
Zitat:

Zitat von Sprint
Ein sehr einfacher, aber hilfreicher Parser wäre z.B. die Klasse TParser aus der Unit Classes. Darauf könntest du deinen eigenen Parser aufbauen.

Gibts da vielleicht eine Dokumentation oder so zu? Weil ich in der OH nichts unter "Parser" oder "TParser" finde :duck:

Sprint 30. Apr 2005 17:38

Re: Wie am besten Parsen?
 
Zitat:

Zitat von malo
Gibts da vielleicht eine Dokumentation oder so zu? Weil ich in der OH nichts unter "Parser" oder "TParser" finde :duck:

Hab bis jetzt noch keine Doku zu TParser gesehen. In Borland's Newsgroups zu Delphi kannst du einige Beispiele finden.

malo 1. Mai 2005 12:08

Re: Wie am besten Parsen?
 
Naja, ich such immer noch nach einer guten Methode, einen String nach anderen Teil-Strings zu durchsuchen.

Meine Script-Syntax soll in etwa so aussehen:

Code:
int $EineIntVariable; //an Sprachen wie PHP, Perl oder C angelehnt
$EineIntVariable = 10; //Wert 10 zuweisen
Message('Hier Text'); //Messagebox
int $ZweiteIntVariable; // noch eine IntVariable erstellen
$EineIntVariable = $ZweiteIntVariable + 1;
Etwa so... jetzt brauche ich aber eine vernünftige Möglichkeit, den Code von oben bis unten durchzulaufen und zu prüfen, ob eines der Schlüsselwörter zu finden ist bzw. ob eine Funktion aufgerufen wird. Mit Pos oder PosEx zu arbeiten halte ich für ungeschickt, weil ich den Quellcode ja von oben nach unten durcharbeiten will. Bei Pos sucht der ja nur nach einzelnen Schlüsselwörtern im Zeilstring... :?

@Dax: Wie hast du denn zum Beispiel in deiner Scriptsprache nach den Bezeichnern gesucht? Also mit welcher Funktion? Eine komplett selbstgeschriebene, oder wie genau?

Dax 1. Mai 2005 12:14

Re: Wie am besten Parsen?
 
Ich hab meine Funktion komplett selbst geschrieben, nur mit Pos, Schleifen und Pointern. Ziemlich unsichere Sache, die ich da hatte, und extrem spezifisch.. die hier zu posten und deinen Wünschen entsprechend umzuändern würde länger dauern, als eine komplett neue, flexiblere Funktion zu schreiben..

Mephistopheles 1. Mai 2005 12:28

Re: Wie am besten Parsen?
 
Such mal nach "Tokenizer". Der kommt nämlich noch vor dem Parser. Der Tokenizer zerlegt Quelltext in seine Bestandteile (z.B. Schlüsselwörter, Stringliterale, Numerische Konstanten, Operatoren) und danach kommt der Parser, der ja auch weiß, ob bestimmte Token in einer gewissen Reihenfolge auftauchen dürfen. Nehmen wir mal:

Delphi-Quellcode:
for x := 0 do 78 to
Der Tokenizer würde hier finden: for, x, :=, 0, do, 78, to!

Aber erst der Parser kann ermitteln, daß das DO zwischen den beiden Zahlen syntaktisch inkorrekt ist.

Alternativ kannst du bei Bloodshed mal nach CoPascal suchen - einem Miniinterpreter von N. Wirth, dem Erfinder von Pascal - dort sind ja alle benötigten Techniken mehr oder minder implementiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:27 Uhr.
Seite 1 von 5  1 23     Letzte »    

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