0

在以下跳过注释的代码中, 的含义是BEGIN(INITIAL)什么?

    %x C_COMMENT

    "/*" { 开始(C_COMMENT); }
    “*/” { 开始(初始);}
    . { }

4

1 回答 1

4

INITIAL 是在所有 lex 程序中隐式声明的状态。(C_COMMENT 也是一个状态,但它不是内置在 lex 中的,所以它是显式声明的。)

BEGIN(statename) 只是意味着输入状态 statename。所以这个 lex 片段的作用如下:如果读取“/*”,则进入状态 C_COMMENT,当它看到“*/”时,它会返回默认状态。

您现在可以添加在 C_COMMENT 状态时忽略所有输入(当然“*/”除外)的规则,而在您不在时(或当您处于 INITIAL 状态时)对输入执行其他操作。

于 2012-06-18T19:46:15.120 回答