草庐IT

c++ - boost::spirit 默认语义 Action 和字符串组合

我有以下代码和平:#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#includenamespacespi=boost::spirit;namespaceqi=boost::spirit::qi;TEST(TestBoost,cpp_comment){usingqi::char_;usingqi::omit;usingqi::eoi;typedefstd::stri

c++ - 使用 Boost::Spirit 解析前置条件和递归

我正在尝试使用Boost::Spirit解析PDDL文件,但在将前提条件解析为结构时遇到了一些问题。我很难理解关于如何将条件放入我的结构和递归的Boost手册。我在下面给出了一段代码,应该可以很好地说明问题。必须解析如下所示的字符串::precondition(and(at-pos?r?pos)(not(has-pos?m?pos)))到目前为止,我的代码看起来像这样,但我几乎可以肯定我不了解at_c是如何工作的,因为我还没有使用过Boost::Phoenix。predi_param='?'>>name_type;predi='('>>name_type>>+predi_param>>

c++ - Boost Spirit 在 DLL 中使用时崩溃

我在使用Boost.Spirit和Boost.Thread时遇到崩溃我的应用程序中的库。这只有在我使用圣灵时才会发生在进程的生命周期内从主线程解析器。崩溃发生在退出时,似乎与清理由Spirit解析器分配的线程特定存储。它可能由于DLL的顺序而崩溃已卸载,因为线程特定内存是在DLL中分配的那已经被卸载了。然而,直到应用程序本身退出时,Boost.ThreadDLL才会被卸载。有没有办法让我强制Spirit清除它的特定线程存储,例如当我收到进程分离通知时在我的dll-main中?任何解决方案/提示将不胜感激。附言!我的平台和设置:VisualStudio2005BOOST_ALL_DYN_

c++ - 如何从 Spirit::Qi 规则访问 boost::variant 成员?

在我的Spirit-Qi语法中,我找不到使用boost::phoenix访问boost::variant成员的正确方法。这是我想要实现的一个简单示例。(我的整个语法要复杂得多,这是我正在测试提到的问题的简单片段)。namespaceph=boost::phoenix;typedefboost::variantVariantType;typedefstd::listTlstVariants;rulerule1;rule1=qi::eps[ph::push_back(qi::_r1,ph::construct(2))]>>qi::eps[ph::get(ph::back(qi::_r1))

c++ - 我如何 grok boost spirit 编译器错误

我正在尝试使用no_skip指令来解析表单的输入:statePASSstateFAIL我正在使用ascii::blank作为我的skipper。当我包装no_skip[trans_assign_expr]以解析选项卡时,出现编译错误。如何修复此错误,一般而言,我如何理解这些错误以便修复future的错误?boostspirit文档从不涉及使用spirit的这方面:(这是错误Infileincludedfrom/usr/include/boost/spirit/home/qi/nonterminal/grammar.hpp:18:0,from/usr/include/boost/spir

c++ - boost::spirit:语义 Action block 中的多个语句

boost::phoenix使用运算符“,”定义语句block(参见boostphoenixblockstatements)。我试图在boost::spirit规则的语义Action部分使用这个构造。但是,看起来只执行了语句block中的最后一条语句。这是一个显示问题的最小可编译示例:#include#include#include#include#include#include#include#includeintmain(){usingboost::spirit::qi::int_;usingboost::phoenix::ref;usingboost::spirit::qi::p

c++ - boost::spirit 当词法分析器标记 > 10 时编译错误

当我尝试编译以下代码时,当token_list>10个标记时,出现编译失败(错误C2903:“应用”:符号既不是类模板也不是函数模板...)。当token#defineBOOST_VARIANT_MINIMIZE_SIZE#include#include#include#includenamespaceqi=boost::spirit::qi;namespacelex=boost::spirit::lex;templatestructtoken_list:lex::lexer{token_list(){cs1="tok1";cs2="tok2";cs3="tok3";cs4="tok4

c++ - 提振 spirit ,递归和堆栈溢出

为什么下面的代码会在运行时崩溃(它会给出堆栈溢出错误)?#include#include#include#include#include#include#include#include#include#includenamespaceqi=boost::spirit::qi;//Helperstructs//typesenumclasstypes{void_t,int_t,double_t,bool_t,string_t};structtypes_:qi::symbols{types_(){add("void",types::void_t)("int",types::int_t)("d

c++ - 传递参数以增强精神自定义解析器

我正在尝试按照此处的说明创建自定义解析器:http://boost-spirit.com/home/articles/qi-example/creating-your-own-parser-component-for-spirit-qi/.在本文中,解析器没有参数,即我不能写类似qi::parse(first,input.end(),+qi::alpha>>custom_parser::iter_pos("myargument"));。如何修改示例以传递参数?我试过这个:usingnamespaceboost::spirit;namespaceparsernm{BOOST_SPIRIT

c++ - Boost spirit解析器如何打印符号表匹配的变量?

我是使用boostspirit的初学者假设我有以下代码解析一个带变量的简单算术表达式:#include#include#include#include#include#include#include#include#includenamespaceclient{namespaceast{structnil{};structsigned_;structprogram;typedefboost::variant,boost::recursive_wrapper>operand;structsigned_{charsign;operandoperand_;};structoperation{