Boost Spirit Lex中不同类型的语义动作

时间:2014-04-06 09:18:19

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

能否提升精神Lex对于一个令牌定义有多种语义动作?

考虑一下这个Lexer结构:

namespace bp = boost::phoenix;
this->self = lex::token_def<>("[ \v\f\t\r]+")
    | lex::token_def<>("\n")[++bp::ref(line_no)]
    | lex::token_def<>("\\/\\/")[set_lexer_state("single_line_comment")]
    | lex::token_def<>(".")
    ;

this->self("single_line_comment")
    = lex::token_def<>("\n")
    [++bp::ref(line_no), set_lexer_state("INITIAL")]
    | lex::token_def<>(".")
    ;

但是只有状态开关通过,但是以状态single_line_comment结尾的行不会被计算。

如果我切换订单,例如:

[set_lexer_state("INITIAL"), ++bp::ref(line_no)]

行结束计数,状态开关不通过。是否有可能用逗号分隔多个语义动作,或者我是否必须编写一个仿函数来进行状态切换以及我想要的任何其他动作?

0 个答案:

没有答案