boost :: spirit语义动作:发出结果

时间:2013-08-15 12:52:34

标签: c++ parsing boost-spirit boost-spirit-qi boost-phoenix

我正在尝试学习boost :: spirit来解析语法,但我很难理解如何使用该库。

基本上,如果解析器在输入流中点击“Test”,我想发出5作为返回值。 (后来,我实际上想要发出一对,字符串成员“Test”和值成员5。

这是我到目前为止所做的:

template <typename Iterator>
struct testgrammar
    : public grammar<Iterator, unsigned int()>
{
public:

    testgrammar() : testgrammar::base_type(start)
    {
        start = std::wstring(L"Test") [ _val = 5 ] ;
    }

    virtual ~testgrammar(){};

    rule<Iterator, unsigned int()> start;

};

在main()中:

std::wstring strIn = L"Test";
std::wstring::const_iterator itBegin = strIn.begin();
std::wstring::const_iterator itEnd = strIn.end();
unsigned int nData = 0;
bool bRes = parse(itBegin, itEnd, avxgrammar<std::wstring::const_iterator>(), nData);

但是,我做错了,因为编译器发出以下错误:

error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const boost::spirit::_val_type' (or there is no acceptable conversion)

我的问题是为什么我不能分配给_val? 我应该如何从语义动作中发出这样的结构?

修改 也许我应该澄清最终目标。我想将文本文件解析为成对的Token / Literal值。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

要分配给qi::_val,您可能只需要

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

或最低限度phoenix_operator.hpp


关于练习的目标,我想你会想看看