Abrufen von AST von boost :: spirit parser

8

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?

    
Lanbo 10.12.2011, 23:41
quelle

1 Antwort

7

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 :

bereitgestellt %Vor%

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:

%Vor%

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.

    
overcoder 11.12.2011, 00:32
quelle