Beschleunigen eines CodeParsers

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Artemis

Betreff: Beschleunigen eines CodeParsers

BeitragSo, Nov 06, 2005 17:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen.

Ich arbeite zur Zeit an einem CodeParser, welcher einen String in einen formatierten String umwandelt.

Jetzt hab ich 4 Variablen.

  1. Den Text als String
  2. Die Wörter, die gehighlighted werden sollen als String-Array
  3. Die Zeichen, die vor den Wörtern stehen dürfen als String
  4. Die Zeichen, die nach den Wörtern stehen dürfen als String


Meine Überlegung is folgende.
Code: [AUSKLAPPEN]
Schleife, die alle Wörter in dem Array durchläuft
   Schleife, die alle Zeichen in dem String vor den Wörtern durchläuft
      Schleife, die alle Zeichen in dem String nach den Wörtern durchläuft
         Text = replace(Text, VorDemString+Wort+NachDemString, VorDemString+"FarbeStart"+Wort+"FarbeEnde"+NachDemString)
      }
   }
}


Hier hätte ich drei Schleifen (wenn es mehrere Wort Arrays gibt, sogar vier).

Meine Frage:
Kann ich das irgendwie kürzen, sodass ich eine Schleife weniger habe?

thx jonas
 

Dreamora

BeitragSo, Nov 06, 2005 17:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Jain. Mit umstrukturieren des ganzen könntest du es beschleunigen.
Denn bestimmte Vor- und Nach Wörter können ja nur um ein bestimmtes Wort kommen. Also solltest du das vielleicht direkt irgendwie mit dem Wort verbinden.
Die Wörter selbst kannst du mittels Hashing direkt in einen Array speichern. Damit kannst du das Suchen drastisch beschleunigen, weil du nicht komplett durchgehen musst, sondern mehr oder weniger direkt anspringen kannst.

Auf jeden Fall dürfen die Schleifen nicht so verschachtelt werden sondern nach einander aufgerufen werden.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Artemis

BeitragSo, Nov 06, 2005 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Shocked Also was ich verstanden habe, ist dass das schneller gehen könnte.
Wie das geht hab ich nicht verstanden. Könntest du das ein bissel genauer erklären? Bitte! Crying or Very sad
 

Dreamora

BeitragSo, Nov 06, 2005 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Statt Keywords in den Array speichern und den dann komplett durchsuchen zu müssen, speicherst du die Keywords mittels Hashing. Das beschleunigt das suchen und je mehr Keywords du hast desto mehr beschleunigt es sich!

2. Pre- und Post-Wörter: Diese können ja nur mit bestimmten Keywords in Erscheinung tretten. Deswegen würde ich diese zusammen mit dem Keyword selbst "verbinden". Eine simple möglichkeit wäre zum Beispiel Keywords in Form eines Types zu machen. Dann kannst du in diesem Type 2 Listen integrieren. Eine Liste mit den PreWords und eine mit den PostWords. Dadurch würde das entsprechende Suchen drastisch beschleunigt werden.

Das sind lediglich generelle Ideen ...
Es gibt gewiss auch beträchtlich effizientere Ideen als das ...
Müssteste notfalls googlen, gibt da sicher was bezüglich texthighlight oder codehighlight
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Artemis

BeitragSo, Nov 06, 2005 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Also erstmal thx für die Hilfe.

1. ich hab keine ahnung, wie das mittelst hashing gehen sollte
2. ich verstehe nicht, warum die pre und post-wörter nur mit bestimmten keyword auftreten können
3. unter google finde ich nix vernünftiges.
4. ich hab hier noch ein beispiel in c#, da steig ich aber nicht durch
 

Dreamora

BeitragSo, Nov 06, 2005 22:53
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Solange du nicht verstehst was hashing macht, ist dies durchaus verständlich. Wirst dich wohl oder übel mit richtiger Informatik beschäftigen müssen, wenn sich das ändern soll

2. Naja das war eine Annahme, dass nur bestimmte kombinationen möglich sind (zum beispiel macht ein "wend" als blockending eines If 0 sinn etc). Kann auch anders sein, dann macht diese Optimierung natürlich keinen sinn.
Pre- und Post Words können ja eigentlich nur als "vorgegebene" kombination auftreten. wenn du ein setxy hast und später ein setxz dann stehen die in keinster relation zu einander und müssen eigentlich auch nicht mit einander verglichen werden.

3/4. Naja solche beispiele gibts halt nur für sprachen die für entsprechende Projekte benutzt werden, was normalerweise C++ oder C# ist (oder VB oder Delphi, ich weiss). Es gibt jedoch auch Editoren die in PureBasic geschrieben ist, müsstest dort mal schauen, der Code sollte dir verständlicher sein. Aber selbst dann musst du dich erst mit der Theorie und den Ideen dahinter beschäftigen ... sonst ist da nix zu machen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group