boost-spirit-qi 相关问题

一个实用的,可扩展的C ++解析库

使用 boostspirit 识别带双括号的令牌字符串时遇到问题

解析字符串时: 1815 ((sd-pam)) S 1778 1778 1778 ... 我试图省略“((sd-pam))”标记 我使用了以下内容: omit_string %= lexeme['(' >> +(char_ - ')') >> '...

回答 1 投票 0

使用 boostspirit 将结构体解析为结构体

我正在尝试从 .net 文件解析此网表: V1 N001 N002 10 R1 N001 N002 24.9 我有以下结构: struct ElementStatement { boost::可选元素标签; ...

回答 1 投票 0

滥用 boost::phoenix::static_cast_ 来获取占位符后面的对象

这是我的问题。我尝试使用 boost::spirit::qi 并尝试使用“_1”和“_a”等占位符。我想访问 boo“后面”的底层对象...

回答 1 投票 0

Boost Spiri Qi 递归表达式解析器

struct NestedStr; typedef boost::variant> 表达式; 结构嵌套Str { 矢量 儿童; // v...

回答 1 投票 0

Boost X3:什么相当于 Qi 关键字解析器指令?

我正在考虑将spirit::qi 中的解析器重写为x3。 我找不到 X3 中与 / 运算符结合使用的 kwd 指令等效的内容。

回答 1 投票 0

为什么这个 nabialek 技巧在我的 boost::spirit::qi 简单语法中不起作用

我想用 boost::spirit 解析命令行参数。与以 或 组合列出所有可能的命令相比,使用符号表似乎更优雅。 现在我开始非常简单(让

回答 1 投票 0

编译 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)来匹配预期的迭代类型。

回答 1 投票 0

如何使用 boost::spirit 解析 csv

我有这个 csv 行 std::string s = R"(1997,Ford,E350,"ac, abs, moon","一些"生锈的"零件",3000.00)"; 我可以使用 boost::tokenizer 解析它: typedef 提升::

回答 2 投票 0

为什么这个提神元气规则作为复合规则的一部分解析失败,单独使用却解析成功?

我正在尝试将多个 boost::spirit 解析规则组合成更大的复合规则,并具有以下代码: #define BOOST_SPIRIT_DEBUG #包括 #include...

回答 1 投票 0

为什么这个Boost Spirit语法双输出部分匹配

我正在我们的软件中调试现有的 Boost QI 语法以解析“端点”(主机:端口,其中主机可以是主机名、IPv4 地址或 IPv6 地址)。我特别有一个问题......

回答 1 投票 0

Boost spirit qi在使用长序列语法时解析编译错误

无效解析(字符串常量和输入) { string::const_iterator begin = input.begin(), end = input.end(); 自动 pin_parser = qi::copy(+(qi::char_("a-z"))); 自动 val_parser ...

回答 0 投票 0

升压::精神::气力留白

我是用这段代码把 "k1=v1;k2=v2;k3=v3;kn=vn "字符串解析成图,qi::phrase_parse( begin,end,*(*~qi::char_('=')>>'=' >>*~qi::char_(';')>>-qi:::lit(';')...。

回答 1 投票 1

Spirit QI解析器结束eom

我的数据定义为:std::string data("START34*23*43**"); 我的语法:"START" >> boost::spirit::hex % '*' 问题。如何解析有两颗星的信息结尾? https:/wandbox.org...

回答 1 投票 1

如何获得Boost.Spirit语义动作的函数结果

[我正在尝试编写一个有可能掷骰子的计算器,例如在DnD,Munchkin等中。所以我需要计算2 *(2d5 + 3d7)之类的表达式,其中2d5代表掷骰2的结果...

回答 1 投票 1

我如何使用boost :: karma / qi解析日期时间?

我正在解析以下格式的日志文件: ,, , , 时间格式为dd-MM-yy HH:mm:ss.fff。我需要提取...

回答 1 投票 1

如何结合跳过和不跳过(lexeme)规则?

我的解析器几乎可以工作了:)(仍然对Spirit功能集(和编译时)以及非常欢迎的社区(在堆栈溢出时感到惊讶),在线尝试的小样本:http://coliru.stacked -...

回答 1 投票 0

如何结合跳过和不跳过(词法)规则?

我的解析器几乎可以工作了:)(仍然对Spirit功能集(和编译时)以及非常欢迎的社区(在堆栈溢出时感到惊讶),在线尝试的小样本:http://coliru.stacked -...

回答 1 投票 0


如何使用Boost Spirit解析CSV之类的转义字符串?

对于我的快速解析器项目,我想使用CSV转义,例如:“”转义“示例:” \“ hello \”“,” \“ hello \”“,” \“ hello \” \“ stranger \” \“ \”“,在线编译和尝试:https:...

回答 1 投票 0

boost :: spirit :: qi :: parse()和boost :: spirit :: qi :: phrase_parse()有何不同?

我是戚的新手。我的目标是使用spirit :: qi创建CLI解析器。 “ CLI解析器”不是指处理命令行选项的类型(例如app --help),而是指处理......>

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.