如何在 Boost Spirit X3 中进行 "stream" 解析?
How to do "stream" parsing in Boost Spirit X3?
我正在尝试找出使用 x3 从 istream
解析的正确方法。旧文档提到 multi_pass
东西,我还能用这个吗?或者是否有其他方法可以为 X3 缓冲流以便它可以回溯?
您仍然可以使用它。只需包括
#include <boost/spirit/include/support_istream_iterator.hpp>
#include <boost/spirit/home/x3.hpp>
#include <boost/spirit/include/support_istream_iterator.hpp>
#include <iostream>
#include <sstream>
int main() {
std::istringstream iss("{ 123, 234, 345, 456, 567, 678, 789, 900, 1011 }");
boost::spirit::istream_iterator f(iss), l;
std::vector<int> values;
namespace x3 = boost::spirit::x3;
if (x3::phrase_parse(f, l, '{' >> (x3::int_ % ',') >> '}', x3::space, values)) {
std::cout << "Parse results:\n";
for (auto v : values) std::cout << v << " ";
} else
std::cout << "Parse failed\n";
}
版画
Parse results:
123 234 345 456 567 678 789 900 1011
我正在尝试找出使用 x3 从 istream
解析的正确方法。旧文档提到 multi_pass
东西,我还能用这个吗?或者是否有其他方法可以为 X3 缓冲流以便它可以回溯?
您仍然可以使用它。只需包括
#include <boost/spirit/include/support_istream_iterator.hpp>
#include <boost/spirit/home/x3.hpp>
#include <boost/spirit/include/support_istream_iterator.hpp>
#include <iostream>
#include <sstream>
int main() {
std::istringstream iss("{ 123, 234, 345, 456, 567, 678, 789, 900, 1011 }");
boost::spirit::istream_iterator f(iss), l;
std::vector<int> values;
namespace x3 = boost::spirit::x3;
if (x3::phrase_parse(f, l, '{' >> (x3::int_ % ',') >> '}', x3::space, values)) {
std::cout << "Parse results:\n";
for (auto v : values) std::cout << v << " ";
} else
std::cout << "Parse failed\n";
}
版画
Parse results:
123 234 345 456 567 678 789 900 1011