Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

xardias

Community-Fossil

  • »xardias« ist der Autor dieses Themas

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

1

16.07.2008, 09:59

Text Transformation

Hallo allerseits,

ich bin momentan auf der Suche nach effizienten Methoden wie ich einen Text in einen anderen transformieren kann.
Der source Text wird geparst und es werden einige Tokens durch andere strings ersetzt.
Ziel ist es z.b. folgenden Text:

Quellcode

1
Dies ist eine Zahl: ${number*10}, und ein string $somestring

In folgenden umzuwandeln:

Quellcode

1
return "Dies ist eine Zahl: "..(number*10)..", und ein string "..(somestring)..""

Nur als simples Beispiel. am einfachsten wäre es natürlich std::string::replace mit find zu benutzen. Ich habe an eine effizientere Methode gedacht:
Der Compiler hat einen Zustand (TEXT, EXPRESSION, LONG_EXPRESSION, evlt später mehr) und parst den Text Zeichen für Zeichen, verändert evtl den Zustand und speichert in einer Chunk Liste Iteratorpaare welche zusammengesetzt den Transformierten Text ergeben.
Aus der Chunkliste kann man sehr fix die Größe des transformierten Strings errechnen. Somit muss jedes Zeichen des transformierten Strings nur ein einziges mal kopiert werden.

Nun, ist ne einfache selfmade Lösung. Was würdet ihr mir Empfehlen? boost::spirit? Ich weiß nicht ob das nicht ein bischen too-much für so ein simples Problem ist. Gibt es performantere Lösungsansätze?

Grüße,
Dennis[/code]

rootnode

Frischling

Beiträge: 92

Wohnort: Aachen, Pontstraße

Beruf: Student

  • Private Nachricht senden

2

16.07.2008, 12:45

Spirit wäre da nich too much in meinen Augen. Spirit ist sehr schnell eingebaut und verbraucht verdammt wenig code.

Wäre von daher, imho, die schnellstte und einfachste Methode das einzubauen.

3

18.07.2008, 11:13

is das nich sowas hier?

http://spieleprogrammierer.de/phpBB2/viewtopic.php?t=9843

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

18.07.2008, 11:31

was spricht eigentlich gegen deine selfmade lösung!? sollte doch recht schnell und einfach selber gemacht sein und klingt jetzt net wirklich so extrem ineffizient. glaub net dass man das mit spirit oder einer anderen lib viel effizienter hinbekommt...

xardias

Community-Fossil

  • »xardias« ist der Autor dieses Themas

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

5

18.07.2008, 13:06

Naja einfach und schnell implementiert ist sie auf jeden Fall. Ich hab ne Stunde gebastelt und eine einfache Template Sprache für Lua fertig.
Spirit war mir dafür gerade zu komplex, ich habe es mal verwendet, aber das ist schon lange her. Daher war die selfmade Lösung einfach schneller.

Ich dachte nur, dass jemand mit mehr Erfahrungen was Parsing angeht da ein paar Optimierungstipps hätte. Ist ja nicht so, dass das ein ungewöhnliches Problem ist, ich denke in Vorlesungen zu Compilerbau etc wird da eine Menge zu gesagt. Doch habe ich diese bisher nicht gehört.

Aber naja. Es funktioniert erstmal, wird gleich in mein Testframework Huginn eingebaut.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

18.07.2008, 13:38

Ist den Optimierung konkret notwendig? Wenn nicht, dann brauchst du dir auch erstmal keine Gedanken darüber zu machen.
@D13_Dreinig

Werbeanzeige