Ein Überblick über Spirit2
-
Netter Bericht - wenn ich die Zeit finde, sollte ich mich wieder in Spirit einarbeiten (seit dem Fachpraktikum habe ich nichts mher in dieser Richtung gemacht)
phlox81 schrieb:
Als allererstes sollte man vielleicht sagen, dass Spirit2 nicht unbedingt kompatibel zu seinem Vorgänger ist, da es die Erfahrungen und das Feedback der Spiritcommunitiy aufgreift, und von Grund auf neu entwickelt wurde. Zwar blieb bewährtes, wie z.B. die bekannten Regeldefinitionen, aber vieles hat sich verändert bzw. wurde erweitert oder neu hinzugefügt.
Na toll - da müsste ich meinen Parser wohl auch komplett überarbeiten, damit der sich den Neuerungen anpasst. Gibt es eigentlich eine Abschätzung, wie aufwendig die Umstellung von Spirit 1.x auf Spirit 2 werden kann?
-
CStoll schrieb:
Netter Bericht - wenn ich die Zeit finde, sollte ich mich wieder in Spirit einarbeiten (seit dem Fachpraktikum habe ich nichts mher in dieser Richtung gemacht)
phlox81 schrieb:
Als allererstes sollte man vielleicht sagen, dass Spirit2 nicht unbedingt kompatibel zu seinem Vorgänger ist, da es die Erfahrungen und das Feedback der Spiritcommunitiy aufgreift, und von Grund auf neu entwickelt wurde. Zwar blieb bewährtes, wie z.B. die bekannten Regeldefinitionen, aber vieles hat sich verändert bzw. wurde erweitert oder neu hinzugefügt.
Na toll - da müsste ich meinen Parser wohl auch komplett überarbeiten, damit der sich den Neuerungen anpasst. Gibt es eigentlich eine Abschätzung, wie aufwendig die Umstellung von Spirit 1.x auf Spirit 2 werden kann?
Schwer zu schätzen, praxis Erfahrung habe ich damit keine. Es hat sich nicht alles geändert, und vieles ist nur marginal anders.
Z.b. das aus anychar_p nun char_ wurde. Wenn du Grammatiken einsetzt, ist da evtl. eine Menge zu ändern, je nachdem wieviele und wieaufwendige Regeln du darin nutzt. Generell würde ich erstmal empfehlen sich in die Library einzuarbeiten, und dann zu schauen, wo man evtl. einen kleinen Teilbereich schon mal testweise portieren kann.
-
Ja, ich setze Grammatiken ein - um damit andere Grammatiken zu erzeugen (will heißen: ich habe eine Grammatik, die beschreibt, was eine EBNF-Formel ist - diese jage ich über die Eingaben, um neue Regeln anzulegen).
-
CStoll schrieb:
Ja, ich setze Grammatiken ein - um damit andere Grammatiken zu erzeugen (will heißen: ich habe eine Grammatik, die beschreibt, was eine EBNF-Formel ist - diese jage ich über die Eingaben, um neue Regeln anzulegen).
Dann wird der Aufwand wohl etwas größer sein.
Ich habe mich bei meinem Projekt dafür entschieden, auf eine Portierung zu verzichten, sondern es von Grund auf neu aufzusetzen, um auch im Design den Änderungen in Spirit2 Rechnung tragen zu können. Du solltest evtl. mal etwas in der Mailingliste von spirit suchen, da gabs schon Posts zu:
http://dir.gmane.org/gmane.comp.parsers.spirit.general
http://dir.gmane.org/gmane.comp.parsers.spirit.develphlox
-
spirit2 ist jetzt im boost svn trunk. Spirit 1.8.x heist jetzt classic, nur als update information
-
Ein entwickler von Boost.Spirit2 hat doch mal ein Präsentation mit ausblicke auf Spirit2 gegeben. Dazu gabes m.E. auch PDF Slides Online (zummindest hatte ich schon mal Slides mit dem Title in etwa Spirit2 Cookbook in den händen).
Leider kann ich diese Slides nich mehr finden (auch mit Google & Co.).
Das einigste was ich bis jetzt herrausfinden konnte war, dsa der Vortrag "A Cookbook Approach To Parsing And Output Generation With Spirit2" hieß.Hat die vielleicht jemand oder weiss wo ich die runter laden kann?
Beste Grüße
jhonny
-
ynnohj schrieb:
Ein entwickler von Boost.Spirit2 hat doch mal ein Präsentation mit ausblicke auf Spirit2 gegeben. Dazu gabes m.E. auch PDF Slides Online (zummindest hatte ich schon mal Slides mit dem Title in etwa Spirit2 Cookbook in den händen).
Leider kann ich diese Slides nich mehr finden (auch mit Google & Co.).
Das einigste was ich bis jetzt herrausfinden konnte war, dsa der Vortrag "A Cookbook Approach To Parsing And Output Generation With Spirit2" hieß.Hat die vielleicht jemand oder weiss wo ich die runter laden kann?
Beste Grüße
jhonnyDie pdf slides von 2007 und auch die von diesem Jahr sind im Spirit SVN hier (neben anderen Dokumenten):
2007: http://spirit.svn.sourceforge.net/svnroot/spirit/trunk/final/libs/spirit/doc/_temp_/auxiliary
2008: http://spirit.svn.sourceforge.net/svnroot/spirit/trunk/final/libs/spirit/doc/auxiliary/HTH
Regards Hartmut
-
Gestern wurde boost 1.36 freigegeben, und damit ist spirit2 nun auch offiziell in Boost integriert.
Eine Dokumentation gibts jetzt auch:
http://www.boost.org/doc/libs/1_36_0/libs/spirit/doc/html/index.html
-
Spirit2 ist echt klasse!
Aber in Spirit.Classic gibt es doch
repeat_p(...)
, wie kann ich sowas in Spirit.Qi machen?Ich möche folgendes parsen "<size>#<size times char_>" (Bsp.: "5#Hallo").
Momentan habe ich das hier (Funktioniert natürlich nicht):
template <typename Iterator> struct b_grammer : grammar_def<Iterator, space_type> { b_grammer() { data = uint_[_a = _1] >> '#' >> repeat_p(boost::ref(_a))[char_] //< FIXME ; } rule<Iterator, locals<unsigned>, space_type> data; };
Eigentlich recht ähnlich zu dem Beispiel "Pascal-style length prefixed string" aus der Spirit.Classic doku
http://www.boost.org/doc/libs/1_35_0/libs/spirit/doc/loops.htmlWie kann ich ein
repeat_p(...)
aus Spirit.Classic nach Spirit.Qi übersetzen?Beste Grüße
jhonny
-
Hm, das gibts so afaik noch nicht.
Es hat sich auch noch was anderes geändert, Grammatiken werden jetzt direkt von qi::grammar abgeleitet:
template <typename Iterator> struct b_grammer : grammar<Iterator,void(), locals<unsinged int>,space_type> { b_grammer():b_grammar::base_type(start) { start = uint_[_a = _1] >> '#' >> repeat(boost::ref(_a))[char_] //< FIXME ; } rule<Iterator, void(), locals<unsinged int>, space_type> start; };
was repeat_p angeht, kann ich dir momentan auch nicht weiterhelfen, evtl. schaust du dir mal die implementation in spirit1.x an oder wendest dich einfach an die spirit user mailingliste.
Oder -mit etwas glück- es ist wie mit anderen parsern, das der Name nun etwas anders ist (z.B. das _p fehlt).phlox
-
Es ist schon länger her als ich diesbezüglich die ML durchsucht habe.
Aber hab haeute was interesantes gefunden:
http://www.nabble.com/repeat_p-in-Spirit2-to11744164.html#a11773014Hätte wohl doch vor dem posten hier nochmal suchen sollen.
-
ynnohj schrieb:
Es ist schon länger her als ich diesbezüglich die ML durchsucht habe.
Aber hab haeute was interesantes gefunden:
http://www.nabble.com/repeat_p-in-Spirit2-to11744164.html#a11773014Hätte wohl doch vor dem posten hier nochmal suchen sollen.
repeat_p bzw. etwas etwas equivalentes ist derzeit noch nicht in Spirit2 implementiert, wird es aber demnächst sein (ich bin gerade dabei...).
Nach einigen Diskussionen wird nun doch eine etwas konventionellere Syntax implementiert, sehr ähnlich dem, was in Spirit1 vorhanden ist:
// repeat embedded expression exactly N times loop(N)[...some parser/generator expression...] // repeat embedded expression at least N, but not more often than M times loop(N, M)[...some parser/generator expression...] // repeat embedded expression at least N times loop(N, more)[...some parser/generator expression...]
wobei N und M entweder ganze Zahlen oder (lazy) Funktionen sind, die eine ganze Zahl liefern. 'more' ist ein Platzhalter.
HTH
Regards Hartmut
-
phlox81 schrieb:
Eine Dokumentation gibts jetzt auch:
http://www.boost.org/doc/libs/1_36_0/libs/spirit/doc/html/index.htmlMagst du den Link in den Artikel aufnehmen? Dort steht noch "Allerdings gibt es noch keine offizielle Dokumentation" und im Magazin sieht man ja nicht die weiteren Posts.
-
Badestrand schrieb:
phlox81 schrieb:
Eine Dokumentation gibts jetzt auch:
http://www.boost.org/doc/libs/1_36_0/libs/spirit/doc/html/index.htmlMagst du den Link in den Artikel aufnehmen? Dort steht noch "Allerdings gibt es noch keine offizielle Dokumentation" und im Magazin sieht man ja nicht die weiteren Posts.
Gute Idee. Ist ergänzt.