我如何获得 boost::spirit 停止解析关键字
How do I get boost::spirit to stop parsing at keyword?
我想解析像"start abc end"这样的输入来提取"abc"。
这是我的测试代码:
#include <boost/spirit/include/qi.hpp>
#include <ostream>
namespace qi = boost::spirit::qi;
int main(int argc, char* argv[])
{
typedef std::string::const_iterator iterator;
qi::rule<iterator, std::string(), qi::space_type> rule =
"start" >>
qi::lexeme[+qi::char_] >>
"end";
std::string input("start abc end");
auto iter = input.begin();
std::string result;
qi::phrase_parse(iter, input.end(), rule, qi::space, result);
std::cout << "Result: " << result << std::endl;
}
输出为"结果:abc 结束"。
问题是
,您希望解析器在空格或关键字"end"处停止。但是您的解析器基本上接受"start"关键字之后的任何字符。
+char_
上面的解析器意味着:任何长度大于 1 的字符序列(包括空格)。
不知何故,你必须告诉你的解析器停止在空格或"结束"关键字。例如,下面的解析器将接受字符直到"结束"关键字
+(char_ - lit("end"))
我建议你看看精神文档中的解析器列表。 http://www.boost.org/doc/libs/1_55_0/libs/spirit/doc/html/spirit/qi/quick_reference/qi_parsers.html
相关文章:
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- C++中的"inline"关键字
- 如何确保C++函数在定义之前声明(如override关键字)
- Boost Spirit,获取迭代器内部语义动作
- 谷歌模拟和覆盖关键字
- boost::spirit::karma 替代生成器,带有 boost::variant 由字符串和字符串别名组成
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 当我从下面的代码中删除关键字 virtual 时,它可以正常工作,否则会出现错误。在这里"virtual"字的意义是什么?
- 为什么"delete"关键字不删除节点?
- boost::spirit::x3 中的通用解析器生成器
- 在 c++ 中正确定义"this"关键字?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- C++ - 为什么这里需要'template'关键字?
- Boost.Spirit将表达转换为AST
- C++函数的关键字?
- 使用 'typename' 关键字将非类型视为依赖上下文中的类型
- 我如何获得 boost::spirit 停止解析关键字
- boost::spirit::lex不区分大小写的关键字