在lex中INITIAL的含义

时间:2012-06-16 06:09:33

标签: lex

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

    %x C_COMMENT

    "/*" { BEGIN(C_COMMENT); }
    "*/" { BEGIN(INITIAL); }
    .  { }

1 个答案:

答案 0 :(得分:3)

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

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

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