相关疑难解决方法(0)

我如何使用船长ascii :: space没有跳过eol?

我必须使用boost :: spirit进行解析,我想使用phrase_parse函数:

qi::phrase_parse(str.begin(), str.end(), grammar, ascii::space - qi::eol); 
Run Code Online (Sandbox Code Playgroud)

但是我的编译器不允许第四个术语(ascii :: space - qi :: eol).我如何使用船长ascii :: space没有跳过eol?

c++ parsing boost boost-spirit boost-spirit-qi

9
推荐指数
1
解决办法
3974
查看次数

使用boost :: spirit,我如何要求部分记录在自己的行上?

我有一个记录解析器,它会抛出几个异常中的一个来指示哪个规则失败了.

前面的事:

#include <iostream>
#include <sstream>
#include <stdexcept>
#include <string>

#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix.hpp>
#include <boost/spirit/include/classic_position_iterator.hpp>

using namespace boost::spirit;
using namespace boost::spirit::ascii;
using namespace boost::spirit::qi;
using namespace boost::spirit::qi::labels;

using boost::phoenix::function;
using boost::phoenix::ref;
using boost::spirit::qi::eol;
using boost::spirit::qi::fail;
using boost::spirit::qi::lit;
using boost::spirit::qi::on_error;

using BOOST_SPIRIT_CLASSIC_NS::file_position;
using BOOST_SPIRIT_CLASSIC_NS::position_iterator;
Run Code Online (Sandbox Code Playgroud)

我们使用position_iterator来自Spirit.Classic,因此以下流插入运算符非常方便.

std::ostream&
operator<<(std::ostream& o, const file_position &fp)
{
  o << fp.file << ": " << fp.line << ',' << fp.column;
  return o;
}
Run Code Online (Sandbox Code Playgroud)

模板会err_t因为抛出与不同形式的解析失败相关的异常而触发样板.

template <typename Exception>
struct err_t { …
Run Code Online (Sandbox Code Playgroud)

c++ parsing eol boost-spirit boost-spirit-qi

6
推荐指数
1
解决办法
2284
查看次数

标签 统计

boost-spirit ×2

boost-spirit-qi ×2

c++ ×2

parsing ×2

boost ×1

eol ×1