Nachdem ich die Tutorials auf boost :: spirit , ich mochte es wegen der Parser-Kombinator-Syntax. Einen Parser zu erstellen ist so einfach.
Leider waren die Tutorials nicht so genau, um eine komplexe Datenstruktur aus dem Parser herauszuholen. Ich versuche, zum Kaleidoskop AST zu gelangen.
Wie auch immer, hier ist mein AST-Code:
%Vor% Ich habe die BOOST_FUSION_ADAPT_STRUCT
Teile weggelassen, aber sie sind da.
Und das ist mein Ausdrucksparser:
%Vor% Das Problem, das ich habe, ist, dass es ein Problem mit dem resultierenden ast::expression
zu haben scheint. Das Kompilierte wirft mehr als 200 Zeilen komplexer Vorlagenfehler aus. Ich vermute, es ist etwas mit der Art, wie ich versucht habe, die Information aus der binop
-Regel zu bekommen, aber ich bin mir nicht sicher.
Kann jemand helfen?
Sie versuchen, den Konstruktor von ast::binary_op
mit Boost Phoenix-Platzhaltern aufzurufen. Sie mischen sich nicht gut. Sie müssen ein faul verwenden Rufen Sie für den Konstruktor ast::binary_op
auf. Dies wird in Phoenix mit construct
:
Ich glaube auch, dass Sie nur die Platzhalter _1
und _2
benötigen, da die '+'
, '-'
, ... in qi::lit
(litteral) umgewandelt werden und somit kein Attribut haben.
Ich habe auch ein paar fehlende Klammern in varname
und number
rules festgestellt:
Boost Spirit Qi ist sehr mächtig, aber auch sehr schwer zu debuggen. Als ich anfing, es zu benutzen, fand ich diese Boost-Spirit-Anwendungen sehr nützlich.
Ich hoffe, das wird hilfreich sein, da ich kein Boost-Spirit-Experte bin.
Tags und Links c++ templates boost-spirit boost-spirit-qi