Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
在以下跳过注释的代码中, 的含义是BEGIN(INITIAL)什么?
BEGIN(INITIAL)
%x C_COMMENT "/*" { 开始(C_COMMENT); } “*/” { 开始(初始);} . { }
INITIAL 是在所有 lex 程序中隐式声明的状态。(C_COMMENT 也是一个状态,但它不是内置在 lex 中的,所以它是显式声明的。)
BEGIN(statename) 只是意味着输入状态 statename。所以这个 lex 片段的作用如下:如果读取“/*”,则进入状态 C_COMMENT,当它看到“*/”时,它会返回默认状态。
您现在可以添加在 C_COMMENT 状态时忽略所有输入(当然“*/”除外)的规则,而在您不在时(或当您处于 INITIAL 状态时)对输入执行其他操作。