gpt4 book ai didi

c++ - Boost::phrase_parse 的精神结果

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:12:03 25 4
gpt4 key购买 nike

大家好,我是 boost 和 boost::spirit 的新手,很抱歉提出新手问题。

当我使用qi::phrase_parse函数时,该函数只返回bool变量,表示解析是否成功,但我不知道在哪里可以找到解析结果。 ..某种语法树等。

如果我使用宏 #define BOOST_SPIRIT_DEBUG 树的 XML 表示打印在标准输出上,但这些节点必须存储在某个地方。你能帮我吗?

最佳答案

您可以“绑定(bind)”属性引用。 qi::parseqi::phrase_parse(及相关)接受可变参数,这些参数将用于接收公开的属性。

一个简单的例子是:(EDIT 也包括一个 utree 例子)

#include <boost/fusion/adapted.hpp>
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/support_utree.hpp>

namespace qi = boost::spirit::qi;

int main()
{
using namespace qi;

std::string input("1 2 3 4 5");
std::string::const_iterator F(input.begin()), f(F), l(input.end());

std::vector<int> ints;
if (qi::phrase_parse(f = F, l, *qi::int_, qi::space, ints))
std::cout << ints.size() << " ints parsed\n";

int i;
std::string s;
// it is variadic:
if (qi::parse(f = F, l, "1 2 " >> qi::int_ >> +qi::char_, i, s))
std::cout << "i: " << i << ", s: " << s << '\n';

std::pair<int, std::string> data;
// any compatible sequence can be used:
if (qi::parse(f = F, l, "1 2 " >> qi::int_ >> +qi::char_, data))
std::cout << "first: " << data.first << ", second: " << data.second << '\n';

// using utree:
boost::spirit::utree tree;
if (qi::parse(f = F, l, "1 2 " >> qi::int_ >> qi::as_string [ +qi::char_ ], tree))
std::cout << "tree: " << tree << '\n';

}

输出:

5 ints parsed
i: 3, s: 4 5
first: 3, second: 4 5
tree: ( 3 " 4 5" )

一些具有“AST”之类数据结构的解析器示例:

如果你想要一个非常通用的 AST 结构,请查看 utree:http://www.boost.org/doc/libs/1_50_0/libs/spirit/doc/html/spirit/support/utree.html

关于c++ - Boost::phrase_parse 的精神结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11555518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com