lex 中 INITIAL 的含义

use*_*948 0 lex

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

    %x C_COMMENT

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

tim*_*mos 5

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

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

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