大家好,我是新来提升和提高精神,所以我很抱歉noob问题。Boost :: Spirit结果的短语_parse
当我使用qi::phrase_parse
函数时,该函数仅返回bool变量,该变量指示解析是否成功,但我不知道在哪里可以找到解析的结果......某种语法树等。
如果我使用宏#define BOOST_SPIRIT_DEBUG
树的XML表示打印在标准输出上,但这些节点必须存储在某处。你能帮我吗?
大家好,我是新来提升和提高精神,所以我很抱歉noob问题。Boost :: Spirit结果的短语_parse
当我使用qi::phrase_parse
函数时,该函数仅返回bool变量,该变量指示解析是否成功,但我不知道在哪里可以找到解析的结果......某种语法树等。
如果我使用宏#define BOOST_SPIRIT_DEBUG
树的XML表示打印在标准输出上,但这些节点必须存储在某处。你能帮我吗?
您可以'绑定'属性引用。 qi::parse
,qi::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
添加了带有适当AST的示例解析器的链接。 **编辑**也包括了一个例子 – sehe 2012-07-19 12:17:44
如果没有代码示例这是相当难回答你的问题 – sehe 2012-07-19 11:43:19
我不认为任何精神问题一个noob问题。 – Spacemoose 2015-06-28 15:24:44