在以下跳过评论的代码中,BEGIN(INITIAL)
的含义是什么?
%x C_COMMENT "/*" { BEGIN(C_COMMENT); } "*/" { BEGIN(INITIAL); } . { }
答案 0 :(得分:3)
INITIAL是一个在所有lex程序中隐式声明的状态。 (C_COMMENT也是一个状态,但它不是内置于lex中,所以它是明确声明的。)
BEGIN(statename)只表示输入状态statename。所以这个lex片段的作用如下:如果读取“/ *”,它进入状态C_COMMENT,当它看到“* /”时,它会回到默认状态。
现在,您可以添加在C_COMMENT状态下忽略所有输入(当然除了“* /”)的规则,当您不在时(或当您处于INITIAL状态时)使用输入执行其他操作。< / p>