将Boost actor_lexer转换为static:错误好像" actor _"不曾用过

时间:2018-01-10 19:08:17

标签: c++ boost boost-spirit-lex

我将Boost Spirit Lex计划转换为documentation。词法分析器具有语义动作,因此动态词法分析器的类型为actor_lexer

#ifndef USE_STATIC_SI_LEXER
    typedef lex::lexertl::actor_lexer<token_type> lexer_type;
#else
    typedef lex::lexertl::static_lexer<
        token_type,
        lex::lexertl::static_::lexer_si
    > lexer_type;
#endif

现在用静态词法分析器编译时,我得到了错误

boost/spirit/home/lex/lexer/lexertl/static_lexer.hpp(230): 
error C2039: 'add_action' : is not a member of 'boost::spirit::unused_type'

这正是人们使用语义操作但忘记将lexer更改为actor_lexer时的预期结果。我确实在生成器程序中使用了actor_lexer类型,这似乎可以解释。

我还缺少其他什么吗?或者目前不可能在静态词法分析器中使用语义动作?

1 个答案:

答案 0 :(得分:0)

在这种情况下可以使用static_actor_lexer模板,如this example中所示。

lex::lexertl::static_actor_lexer<
    token_type, lex::lexertl::static_::lexer_wcl
>