一个实用的,可扩展的C ++解析库
使用 boostspirit 识别带双括号的令牌字符串时遇到问题
解析字符串时: 1815 ((sd-pam)) S 1778 1778 1778 ... 我试图省略“((sd-pam))”标记 我使用了以下内容: omit_string %= lexeme['(' >> +(char_ - ')') >> '...
我正在尝试从 .net 文件解析此网表: V1 N001 N002 10 R1 N001 N002 24.9 我有以下结构: struct ElementStatement { boost::可选元素标签; ...
滥用 boost::phoenix::static_cast_ 来获取占位符后面的对象
这是我的问题。我尝试使用 boost::spirit::qi 并尝试使用“_1”和“_a”等占位符。我想访问 boo“后面”的底层对象...
struct NestedStr; typedef boost::variant> 表达式; 结构嵌套Str { 矢量 儿童; // v...
我正在考虑将spirit::qi 中的解析器重写为x3。 我找不到 X3 中与 / 运算符结合使用的 kwd 指令等效的内容。
为什么这个 nabialek 技巧在我的 boost::spirit::qi 简单语法中不起作用
我想用 boost::spirit 解析命令行参数。与以 或 组合列出所有可能的命令相比,使用符号表似乎更优雅。 现在我开始非常简单(让
编译 boost qi 解析器以跳过 php 代码字符串中的所有注释和空格时出错
按照我之前的问题并应用建议,我创建了这个 boost qi 精神语法,以便从字符串内容中的一段 PHP 代码中仅获取“非注释”: #包括 按照我之前的问题,并应用建议,我创建了这个 boost qi 精神语法,以便仅从字符串中的一段 PHP 代码中获取“非注释”contents: #include <boost/spirit/include/qi.hpp> #include <boost/spirit/include/qi.hpp> #include <boost/spirit/include/qi_char_class.hpp> #include <boost/spirit/include/qi_string.hpp> #include <boost/spirit/include/qi_operator.hpp> #include <boost/spirit/include/qi_action.hpp> #include <boost/spirit/include/qi_auxiliary.hpp> namespace qi = boost::spirit::qi; using namespace std; int main(int argc, char *argv[]) { std::string contents = "<?php echo \"Soy español\";?>"; using Iterator = std::string::const_iterator; struct StripCommentParser : qi::grammar<Iterator, std::string()> { StripCommentParser() : StripCommentParser::base_type(start) { using namespace qi; single_line_comment = "//" >> *(qi::char_ - eol) >> (eol | eoi); block_comment = ("/*" >> *(block_comment | qi::char_ - "*/")) > ("*/" | eoi); php_comment = '#' >> *(qi::char_ - eol) >> (eol | eoi); start = qi::skip(space | single_line_comment | block_comment | php_comment)[*qi::char_]; } private: qi::rule<Iterator, std::string()> start; qi::rule<Iterator> block_comment, single_line_comment, php_comment; }; string non_comments_code; // This is the line that triggers the compiler error parse(begin(contents), end(contents), StripCommentParser{}, non_comments_code); } 但是我收到这个编译器错误: In file included from /usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:36, from /usr/include/boost/spirit/home/qi/nonterminal.hpp:14, from /usr/include/boost/spirit/home/qi.hpp:21, from /usr/include/boost/spirit/include/qi.hpp:16, from ../../src/capel-tool.cpp:4: /usr/include/boost/spirit/home/qi/reference.hpp: In instantiation of ‘bool boost::spirit::qi::reference<Subject>::parse(Iterator&, const Iterator&, Context&, const Skipper&, Attribute&) const [with Iterator = __gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char> >; Context = boost::spirit::context<boost::fusion::cons<std::__cxx11::basic_string<char>&, boost::fusion::nil_>, boost::spirit::locals<> >; Skipper = boost::spirit::unused_type; Attribute = std::__cxx11::basic_string<char>; Subject = const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >, std::__cxx11::basic_string<char>(), boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type>]’: /usr/include/boost/spirit/home/qi/parse.hpp:88:47: required from ‘bool boost::spirit::qi::parse(Iterator&, Iterator, const Expr&, Attr&) [with Iterator = __gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char> >; Expr = main(int, char**)::StripCommentParser; Attr = std::__cxx11::basic_string<char>]’ /usr/include/boost/spirit/home/qi/parse.hpp:100:25: required from ‘bool boost::spirit::qi::parse(const Iterator&, Iterator, const Expr&, Attr&) [with Iterator = __gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char> >; Expr = main(int, char**)::StripCommentParser; Attr = std::__cxx11::basic_string<char>]’ ../../src/capel-tool.cpp:106:80: required from here /usr/include/boost/spirit/home/qi/reference.hpp:43:35: error: no matching function for call to ‘boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >, std::__cxx11::basic_string<char>(), boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type>::parse(__gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char> >&, const __gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char> >&, boost::spirit::context<boost::fusion::cons<std::__cxx11::basic_string<char>&, boost::fusion::nil_>, boost::spirit::locals<> >&, const boost::spirit::unused_type&, std::__cxx11::basic_string<char>&) const’ 43 | return ref.get().parse(first, last, context, skipper, attr_); | ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/boost/spirit/home/qi/nonterminal.hpp:14, from /usr/include/boost/spirit/home/qi.hpp:21, from /usr/include/boost/spirit/include/qi.hpp:16, from ../../src/capel-tool.cpp:4: /usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:282:14: note: candidate: ‘template<class Context, class Skipper, class Attribute> bool boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>::parse(Iterator&, const Iterator&, Context&, const Skipper&, Attribute&) const [with Context = Context; Skipper = Skipper; Attribute = Attribute; Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; T1 = std::__cxx11::basic_string<char>(); T2 = boost::spirit::unused_type; T3 = boost::spirit::unused_type; T4 = boost::spirit::unused_type]’ 282 | bool parse(Iterator& first, Iterator const& last | ^~~~~ /usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:282:14: note: template argument deduction/substitution failed: In file included from /usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:36, from /usr/include/boost/spirit/home/qi/nonterminal.hpp:14, from /usr/include/boost/spirit/home/qi.hpp:21, from /usr/include/boost/spirit/include/qi.hpp:16, from ../../src/capel-tool.cpp:4: /usr/include/boost/spirit/home/qi/reference.hpp:43:35: note: cannot convert ‘first’ (type ‘__gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char> >’) to type ‘__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >&’ 43 | return ref.get().parse(first, last, context, skipper, attr_); | ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/boost/spirit/home/qi/nonterminal.hpp:14, from /usr/include/boost/spirit/home/qi.hpp:21, from /usr/include/boost/spirit/include/qi.hpp:16, from ../../src/capel-tool.cpp:4: /usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:333:14: note: candidate: ‘template<class Context, class Skipper, class Attribute, class Params> bool boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>::parse(Iterator&, const Iterator&, Context&, const Skipper&, Attribute&, const Params&) const [with Context = Context; Skipper = Skipper; Attribute = Attribute; Params = Params; Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; T1 = std::__cxx11::basic_string<char>(); T2 = boost::spirit::unused_type; T3 = boost::spirit::unused_type; T4 = boost::spirit::unused_type]’ 333 | bool parse(Iterator& first, Iterator const& last | ^~~~~ /usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:333:14: note: template argument deduction/substitution failed: In file included from /usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:36, from /usr/include/boost/spirit/home/qi/nonterminal.hpp:14, from /usr/include/boost/spirit/home/qi.hpp:21, from /usr/include/boost/spirit/include/qi.hpp:16, from ../../src/capel-tool.cpp:4: /usr/include/boost/spirit/home/qi/reference.hpp:43:35: note: candidate expects 6 arguments, 5 provided 43 | return ref.get().parse(first, last, context, skipper, attr_); | ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 我不在电脑附近,所以无法测试。但是,请尝试使用 constant std::string contents;(或者实际上使用 cbegin 和 cend)来匹配预期的迭代类型。
我有这个 csv 行 std::string s = R"(1997,Ford,E350,"ac, abs, moon","一些"生锈的"零件",3000.00)"; 我可以使用 boost::tokenizer 解析它: typedef 提升::
为什么这个提神元气规则作为复合规则的一部分解析失败,单独使用却解析成功?
我正在尝试将多个 boost::spirit 解析规则组合成更大的复合规则,并具有以下代码: #define BOOST_SPIRIT_DEBUG #包括 #include...
我正在我们的软件中调试现有的 Boost QI 语法以解析“端点”(主机:端口,其中主机可以是主机名、IPv4 地址或 IPv6 地址)。我特别有一个问题......
Boost spirit qi在使用长序列语法时解析编译错误
无效解析(字符串常量和输入) { string::const_iterator begin = input.begin(), end = input.end(); 自动 pin_parser = qi::copy(+(qi::char_("a-z"))); 自动 val_parser ...
我是用这段代码把 "k1=v1;k2=v2;k3=v3;kn=vn "字符串解析成图,qi::phrase_parse( begin,end,*(*~qi::char_('=')>>'=' >>*~qi::char_(';')>>-qi:::lit(';')...。
我的数据定义为:std::string data("START34*23*43**"); 我的语法:"START" >> boost::spirit::hex % '*' 问题。如何解析有两颗星的信息结尾? https:/wandbox.org...
[我正在尝试编写一个有可能掷骰子的计算器,例如在DnD,Munchkin等中。所以我需要计算2 *(2d5 + 3d7)之类的表达式,其中2d5代表掷骰2的结果...
我如何使用boost :: karma / qi解析日期时间?
我正在解析以下格式的日志文件: ,, , , 时间格式为dd-MM-yy HH:mm:ss.fff。我需要提取...
我的解析器几乎可以工作了:)(仍然对Spirit功能集(和编译时)以及非常欢迎的社区(在堆栈溢出时感到惊讶),在线尝试的小样本:http://coliru.stacked -...
我的解析器几乎可以工作了:)(仍然对Spirit功能集(和编译时)以及非常欢迎的社区(在堆栈溢出时感到惊讶),在线尝试的小样本:http://coliru.stacked -...
如何使用Boost Spirit解析CSV之类的转义字符串?
对于我的快速解析器项目,我想使用CSV转义,例如:“”转义“示例:” \“ hello \”“,” \“ hello \”“,” \“ hello \” \“ stranger \” \“ \”“,在线编译和尝试:https:...
boost :: spirit :: qi :: parse()和boost :: spirit :: qi :: phrase_parse()有何不同?
我是戚的新手。我的目标是使用spirit :: qi创建CLI解析器。 “ CLI解析器”不是指处理命令行选项的类型(例如app --help),而是指处理......>