Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Die Artikel ::  Ein Überblick über Spirit2  
Gehen Sie zu Seite Zurück  1, 2
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
ynnohj
Unregistrierter




Beitrag ynnohj Unregistrierter 20:42:43 12.05.2008   Titel:   A Cookbook Approach To Parsing And Output Generation With Spirit2            Zitieren

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
hkaiser
Mitglied

Benutzerprofil
Anmeldungsdatum: 11.07.2007
Beiträge: 18
Beitrag hkaiser Mitglied 03:34:25 20.05.2008   Titel:   Re: A Cookbook Approach To Parsing And Output Generation With Spirit2            Zitieren

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
phlox81
Moderator

Benutzerprofil
Anmeldungsdatum: 21.04.2001
Beiträge: 7208
Beitrag phlox81 Moderator 11:45:32 15.08.2008   Titel:              Zitieren

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

_________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | The Black Board | Code Node | Xing | Blog | Twitter
ynnohj
Unregistrierter




Beitrag ynnohj Unregistrierter 10:13:03 16.08.2008   Titel:              Zitieren

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):

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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;
};
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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;
};
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
phlox81
Moderator

Benutzerprofil
Anmeldungsdatum: 21.04.2001
Beiträge: 7208
Beitrag phlox81 Moderator 10:59:02 16.08.2008   Titel:              Zitieren

Hm, das gibts so afaik noch nicht.

Es hat sich auch noch was anderes geändert, Grammatiken werden jetzt direkt von qi::grammar abgeleitet:

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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;
};
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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;
};
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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

_________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | The Black Board | Code Node | Xing | Blog | Twitter


Zuletzt bearbeitet von phlox81 am 12:20:56 16.08.2008, insgesamt 1-mal bearbeitet
ynnohj
Unregistrierter




Beitrag ynnohj Unregistrierter 13:38:00 17.08.2008   Titel:              Zitieren

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.
hkaiser
Mitglied

Benutzerprofil
Anmeldungsdatum: 11.07.2007
Beiträge: 18
Beitrag hkaiser Mitglied 02:24:16 25.08.2008   Titel:              Zitieren

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:

C/C++ Code:
// 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...]
C/C++ Code:
// 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...]
C/C++ Code:
// 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
Badestrand
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
Beitrag Badestrand Mitglied 13:56:22 18.10.2008   Titel:              Zitieren

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.
phlox81
Moderator

Benutzerprofil
Anmeldungsdatum: 21.04.2001
Beiträge: 7208
Beitrag phlox81 Moderator 11:49:07 21.10.2008   Titel:              Zitieren

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.

_________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | The Black Board | Code Node | Xing | Blog | Twitter
C/C++ Forum :: Die Artikel ::  Ein Überblick über Spirit2  
Gehen Sie zu Seite Zurück  1, 2
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




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.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

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.