Ich versuche, einen AST mit Boost Spirit zu bauen, und ich habe mit dem Erstellen synthetischer Argumente gekämpft, wenn ich C ++ 11 Lambda-Ausdrücke als semantische Aktionen benutze.
Sagen Sie, ich habe eine Regel:
qi::rule<char*,ascii::space_type,SomeStruct()> rule = some_parser[[](some_type val){/*code to build SomeStruct from val*/}];
Wie gibt mein Lambda das synthetisierte Argument (SomeStruct) zurück? Durch den Rückgabewert? Weil qi :: _ val in diesem Kontext nicht verfügbar ist, oder? (Dies ist ein wenig unklar für mich, tut mir leid, wenn diese Frage nicht gut formuliert ist)
Vielen Dank im Voraus für jeden Zeiger in die richtige Richtung!
Das scheint der Trick zu sein: Ссылка
Relevantes Zitat:
%Vor%Der wichtigste Teil hier ist der typedef und sein
context_type
. Wenn Sie nur C ++ 11 Lambdas verwenden möchten, um sehr einfache Dinge mit Ihrem übergebenen Attribut zu tun, sind die Dinge sehr einfach, aber wenn Sie Zugriff auf die Locals oderqi::_val
haben wollen, müssen Sie den Kontextparameter verwenden. Kontext ist eine Instanz vonboost::spirit::context
mit Vorlagen, die Zugriff auf zweiboost::fusion
Sequenzen gewährt. Attribute und Einheimische.
Tags und Links boost-spirit