Ein Überblick über Spirit2



  • Tobias Gerg(offline) schrieb:

    Hallo phlox81,

    danke für den sehr interessanten Überblick über Spirit2. Es freut mich zu sehen, dass sich das ganze Framework so toll weiterentwickelt... Vor allem die Ausgaberegeln faszinieren mich sehr...

    Hast du vor zu dem Thema weitere Artikel zu schreiben, sobald es dir möglich ist? Das wäre sehr zu begrüßen...

    Gruß
    Tobias Gerg

    Ich finde den Artikel sehr gelungen
    👍 👍 👍

    Danke für das Lob.
    Und ja, es ist evtl. geplant, das sich daran weitere Artikel anschliessen, deshalb auch dieser Artikel z.T. nicht so sehr ins Detail geht,
    weil es einfach auch den Rahmen sprengen würde, gerade was die Möglichkeiten von lex,qi und karma angeht.
    Zeitlich ist es allerdings bei mir gerade schwer, daher wird wahrscheinlich Hartmut Kaiser den/die nachfolgenden Artikel für das Magazin schreiben. Er kennt sich da auch als Entwickler etwas besser aus als ich 😃

    phlox



  • warum ist dieser artikel als "wichtig" gekennzeichnet?



  • Weil er neu ist und somit ganz oben in der Liste stehen soll. Nach einem Monat, wenn andere neue Artikel raus kommen, ist er das nicht mehr.



  • 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.devel

    phlox



  • 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
    jhonny

    Die 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.html

    Wie 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#a11773014

    Hä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#a11773014

    Hä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.html

    Magst 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.html

    Magst 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.


Anmelden zum Antworten