![]() |
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. |
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... ;) |
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] |
Re: Wie am besten Parsen?
Schleifen und If Abfragen gehören dazu, kommst eh nicht drumrum.
|
Re: Wie am besten Parsen?
Zitat:
|
Re: Wie am besten Parsen?
Zitat:
|
Re: Wie am besten Parsen?
Zitat:
|
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) |
Re: Wie am besten Parsen?
Zitat:
|
Re: Wie am besten Parsen?
Zitat:
for(;Abbruchbedingung;) {} ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz