Delphi-PRAXiS
Seite 3 von 5     123 45      

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)

Christian Seehase 1. Mai 2005 16:59

Re: Wie am besten Parsen?
 
Moin Malo,

eigentlich brauchst Du Dir keinen Gedanken darum zu machen bestimmte Konstruktion zu suchen.
Als erstes solltest Du Deinen Sourcecode in einen Tokenstrom verwandeln. Ob diese dann syntaktisch richtig sind spielt zu diesem Zeitpunkt keine Rolle.

Wenn Du das Beispiel von Airblader nimmst:

x := 1;
x:=1;

Dein Tokenizer stösst auf das x
Es muss sich also um einen Bezeichner handeln.
Jetzt muss nur noch geprüft werden, wie lang dieser ist. Enden wird er an einem Trennzeichen, wobei es nun keine Rolle spielt, ob dieses Trennzeichen wieder der Beginn eines anderen Tokentyps sein kann (in diesem Falle : ) oder ein Whitespace-Zeichen ist (i.d.R. Tabulator, Leerzeichen).

Wurde der vollständige Bezeichner ermittelt, muss der Tokenizer nun alle Whitespace-Zeichen überspringen, bis er zu dem nächsten kommt, aus dem er ein Token machen kann, oder das den Ablauf steuert.

Hierbei wird er also auf ein : stossen und muss nun prüfen ob das alles ist, oder ob noch unmittelbar ein = folgt. Es könnte ja auch das Trennzeichen für ein Case-Label sein. Folgt ein = wurde ein := erkannt, und kann in die Tokenliste aufgenommen werden.

usw.

malo 1. Mai 2005 17:10

Re: Wie am besten Parsen?
 
Das würde aber meine Idee mit der Stringliste (den ganzen Code reinladen und bei Leerzeichen aufteilen) so ziemlich zunichte machen. Ich müsste alles per Hand trennen (also jedes mal einzeln prüfen, ob das zum ersten Token gehört, oder ob das Zeichen ein Begrenzer oder ein neues Token sein kann, was wahrscheinlich extrem auf die Performence gehen kann, wie ich fast schon fürchte :?

Oder geht das vielleicht noch einfacher?

Wenn nicht, dann werd ichs aber wahrscheinlich auf die "langsame" Methode machen... ;)

Christian Seehase 1. Mai 2005 17:22

Re: Wie am besten Parsen?
 
Moin Malo,

ich kann Dich beruhigen, dass geht mit Sicherheit nicht auf die Performance.
Bei dem beschriebenen Verfahren braucht mein Programm ca. 1 sek. / MB Sourcecode (C-Header).

[EDIT]
ausserdem klingt es schwieriger als es ist.
[/EDIT]

Nils_13 1. Mai 2005 18:50

Re: Wie am besten Parsen?
 
Schleifen und If Abfragen gehören dazu, kommst eh nicht drumrum.

malo 1. Mai 2005 18:54

Re: Wie am besten Parsen?
 
Zitat:

Zitat von Nils_13
Schleifen und If Abfragen gehören dazu, kommst eh nicht drumrum.

Ja, ist mir klar. Da wird der Delphi-Compiler wohl ne Menge if-Abfragen kompilieren müssen. Aber erstmal kümmere ich mich darum, überhaupt Variablen erzeugen und damit arbeiten zu können, das ist schon schwer genug. Die Sprache ist ja am Ende beliebig erweiterbar ;)

Mephistopheles 1. Mai 2005 18:54

Re: Wie am besten Parsen?
 
Zitat:

Zitat von Nils_13
Schleifen und If Abfragen gehören dazu, kommst eh nicht drumrum.

If braucht niemand. Da kann man auch while dafür nehmen. Oder gleich eine for-Schleife wie in C. :-D

malo 1. Mai 2005 18:58

Re: Wie am besten Parsen?
 
Zitat:

Zitat von Mephistopheles
Zitat:

Zitat von Nils_13
Schleifen und If Abfragen gehören dazu, kommst eh nicht drumrum.

If braucht niemand. Da kann man auch while dafür nehmen. Oder gleich eine for-Schleife wie in C. :-D

Dann muss man aber ein hässliches Break ans Ende der Schleife setzen... :?

Christian Seehase 1. Mai 2005 19:24

Re: Wie am besten Parsen?
 
Moin Malo,

das lässt sich bestens mit case lösen. (und einer while-Schleife, da man die Schleifenvariable u.U. manipulieren muss)

malo 1. Mai 2005 19:28

Re: Wie am besten Parsen?
 
Zitat:

Zitat von Christian Seehase
Moin Malo,

das lässt sich bestens mit case lösen. (und einer while-Schleife, da man die Schleifenvariable u.U. manipulieren muss)

Ich weiß aber grade nicht, ob ich wirklich nur ordinale Typen dafür abfragen muss, deshalb hab ich von if-Abfragen geredet. Wie das formal aufgebaut wird, kann ja noch ausgeklügelt werden. Die if-Abfragen sind im Moment noch nicht das Thema ;)

Mephistopheles 1. Mai 2005 19:42

Re: Wie am besten Parsen?
 
Zitat:

Zitat von malo
Dann muss man aber ein hässliches Break ans Ende der Schleife setzen... :?

Nicht bei einer C-for-Schleife :)

for(;Abbruchbedingung;) {} ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:06 Uhr.
Seite 3 von 5     123 45      

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