草庐IT

c++ - 是否允许递归 boost spirit 语法?

我正准备为一种类似mathematica的语言编写一个解析器,并且发现有时调用我的spirit语法来解析表达式的子部分会很好。即如果我要解析a+b*c+d在查询'+'符号时,在'b*c'部分调用parse()会很方便。在使用我的语法的相同实例时可以这样做吗?(语法参数将是'*this')虽然我还不确定这是否是完成此特定任务的最佳方法,但我发现这个问题很有趣,因为我在文档中找不到任何内容。如果我使用这种技术,显然我不应该依赖类局部变量或全局变量。但我想知道它是否主要是spirit设计所允许的。编辑:我的语法实例如下所示:classMyGrammar:publicboost::spirit

c++ - Boost Spirit Qi Custom Syntesized Attribute(通过语义操作设置结构属性的特定成员)

假设我有一个我想用灵气解析成的结构,它是这样定义的:structdata_{boolexport;std::wstringname;data_():export(false){}};此外,假设结构已适应这样的融合:BOOST_FUSION_ADAPT_STRUCT(data_,(bool,export)(std::wstring,name))关联的规则是:qi::rule>rule_data;rule_data=-lexeme["SpecialText">>!(alnum|'_')][boost::phoenix::at_c=true]//Ifthisstringisfound,,se

c++ - 在 boost::spirit::qi 语法中处理深度递归的正确方法是什么?

我有一个类似于以下的工作语法:stock_price=symbol_>>date_>>price_;stock_prices_=stock_price_>>stock_prices_|eps;grammar_=lit("PRICES")>>stock_prices_>>lit("END");问题是,当股票价格列表太高时(比如大约1000个价格),系统会使用exc_bad_access解析段错误。我实际上可以通过以下方式解决这个问题:stock_prices_=stock_price_>>stock_price_>>stock_price_>>stock_price>>stock_pri

c++ - 我如何将多态属性与 boost::spirit::qi 解析器一起使用?

我希望我的基于boost::spirit的解析器能够解析文件,将解析的规则转换为不同的类型,并发出一个包含它找到的所有匹配项的vector。所有作为属性发出的类型都应该从基类型继承,例如:#include#include#include#includestructCommandBase{virtualvoidcommandAction(){std::coutvalueB;virtualvoidcommandAction(){std::coutlabelName;std::vector>commands;virtualvoidcommandAction(){std::coutc,comm

c++ - Boost Spirit Qi Re-Establish skipping with custom skip 语法

到目前为止,我有一个语法一直在使用标准的boost::spirit::ascii::space/boost::spirit::ascii::space_type船长。我有一些使用船长的规则和一些不使用的规则,比如qi::rule(),ascii::space_type>expression;qi::rule()>term;当我在跳跃式非终结符(如expression)内部使用非跳跃式非终结符(如term)时,一切都像我期望的那样工作-空格只在内部起作用term非终结符。此外,到目前为止,我一直很好地包括在不使用qi::skip重新建立跳过的非终端内部使用skipper的非终端,例如in

c++ - boost::spirit 示例无法编译

我正在按照Spirit文档中的教程进行操作,但我被困在这里:#include#include#includetemplateboolparse_numbers(Iteratorfirst,Iteratorlast,double&sum){namespaceqi=boost::spirit::qi;namespaceascii=boost::spirit::ascii;namespaceph=boost::phoenix;boolr=qi::phrase_parse(first,last,//begingrammar(qi::double_[ph::ref(sum)=qi::_1]>>*

c++ - boost spirit skipper 问题

我在使用boostspiritskippers时遇到了麻烦。我需要像这样解析一个文件:ROWintint[int,int]int[int,int]...我能够毫无问题地解析它(感谢stackoverflow;)只有当我在第一个int之后添加一个'_'时。事实上,我认为skipper在第一个int之后吃掉行尾,所以第一个和第二个(在第二行)看起来只有一个int。我不明白如何保持eol但吃空间。我找到了使用自定义解析器的示例,例如here和here.我尝试了qi::blank,一个带有一条规则的自定义解析器lit('')不管我用什么skipper,space和eol总是吃。我的语法是:一行

c++ - 如何使用 boost::spirit 解析 csv

我有这条csv行std::strings=R"(1997,Ford,E350,"ac,abs,moon","some"rusty"parts",3000.00)";我可以使用boost::tokenizer解析它:typedefboost::tokenizer,std::string::const_iterator,std::string>Tokenizer;boost::escaped_list_separatorseps('\\',',','\"');Tokenizertok(s,seps);for(autoi:tok){std::cout它做对了,除了token“生锈”应该有双引

c++ - 如何使用 boost::spirit 将单词序列解析为 vector ?

我正在努力学习boost::spirit.例如,我试图将一系列单词解析为vector.我试过这个:#include#includenamespaceqi=boost::spirit::qi;intmain(){std::vectorwords;std::stringinput="thisisatest";boolresult=qi::phrase_parse(input.begin(),input.end(),+(+qi::char_),qi::space,words);BOOST_FOREACH(std::stringstr,words){std::cout这给了我这个输出:'thi

c++ - boost::spirit 中的运算符优先级?

我使用spiritmini_c样本做了一些测试。不幸的是,它没有像预期的那样保持运算符优先级:intmain(){return3>10||3>1;}计算为0。return(3>10)||(3>1);返回1我试图移动“||”的定义和“&&”到构造函数的最顶端templateexpression::expression(但这并没有改变任何东西。这怎么能解决。我正在使用boost1.3.38。 最佳答案 已确认,这是mini_c示例中与运算符优先级相关的错误。我提交了对SVN的修复,它将在BoostV1.45中可用。这是我在头文件mini