Wie performant ist spirit eigentlich?
Kann man einen kompletten Parser der die Syntaxanalyse für C++ durchführen soll damit realisieren oder sollte man lieber auf Lex und Yacc bzw. ANTLR zurückgreifen?
Das Framework sieht echt sehr interessant aus.
Guter Artikel...
Habe mich mal an deinen Artikel versucht. Leider erhalte ich einen Compile-Error für das Debugout-Bsp. aus Abschnitt 6. Angemeckert wir die Zeile, in der _SECTION die DebugOut-Funktion übergeben bekommt:
Zitat:
Spirit1.cpp(27) : error C2896: 'boost::spirit::action<DerivedT,ParserT> boost::spirit::parser<DerivedT>::operator [](const ActionT &) const': Funktionsvorlage 'void DebugOut(IteratorT,IteratorT)' kann nicht als Funktionsargument verwendet werden
with
[
DerivedT=boost::spirit::rule<>
]
Spirit1.cpp(27) : error C2676: Binärer Operator '[': 'boost::spirit::rule<>' definiert diesen Operator oder eine Konvertierung in einen für den vordefinierten Operator geeigneten Typ nicht
Compiler: MSVC 7.1
Spirit: 1.8.x aus Boost 1.33.1
Laut MSDN ist Fehler C2896 so, das ein Funktionstemplate selbst kein Funktionstemplate verwenden kann. Hem...
Hat jemand ebenfalls diesen Fehler?
Wenn ich aus DebugOut keine Templatefunktion mache, funktioniert es, so wie es der Compiler haben will.
Du solltest einfach angeben, welche Spezialisierung deiner Template-Funkion verwendet werden soll (beachte das '_SECTION[&DebugOut<const char*>]' im Beispiel).
_________________ Wo ich bin, herrscht Chaos. Leider kann ich nicht überall sein.
@Justin:
@cplusplus.:
Hallo cplusplus. Die rule<> Klasse ist deshalb eine Templateklasse, weil du manchmal eben nicht mit einfachen plain vanilla parsern in der rule klar. Manchmal braucht man was "stärkers".
Da gibt's noch Grammatiken, Parsebäume und vieles mehr wo die rule<> parametrisiert werden muss.
brauchte man nicht auch einen anderen scanner, wenn man mit anderen typen als char oder wchar_t arbeiten wollte?
_________________ Jesus Christus! Da blickt ja kein Mensch mehr durch.
ich check das noch mal gegen wenn ich den MSVC wieder mal zur Hand habe.
Gruß
Tobi
Hallo otze,
boah das ist ne gute Frage... Bin schon ziemlich lange wieder aus Spirit draußen... Daher bin ich mir nicht sicher... Ich probier das bei gelegenheit mal wieder...
So, hab es jetzt mal mit MinGW ausprobiert. Da funktioniert es anstandslos. Fragt sich jetzt, ob MSVC7.1 hier eine Standardlücke hat...
Hab zwar eine neuere Version, glaub ich, aber ich bekomm den gleichen Fehler, wäre mal echt geil, wenn hier jemand eine Lösung parat hätte.^^
Möchte net wegen sowas direkt den Compiler wechseln...
[e]
K, hab es jetzt mit functoren probiert, die gehen, vielleicht sollte ich ich mal statt normalen Funktionen Funktionszeiger verwenden.
[e2]
So, wenn ich statt &f einfach einen Funktionszeiger auf die Funktion F verwende, dann funktionierts!
Nächstes Thema anzeigen Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums
für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de
Werbekostenerstattung verdient werden kann.
Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de
enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt
(vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in
privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden.
Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere
übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.