我正在使用Flex和Bison作为解析器生成器,但是我的扫描器中的启动状态有问题.
我正在使用独占规则来处理评论,但这个语法似乎与引用的标记不匹配:
%x COMMENT // { BEGIN(COMMENT); } <COMMENT>[^\n] ; <COMMENT>\n { BEGIN(INITIAL); } "==" { return EQUALEQUAL; } . ;
在这个简单的例子中:
// a == b
除非我包含此规则,否则不完全匹配评论:
<COMMENT>"==" ;
解决方法
匹配Lex / Flex中的C风格注释或者有详细记录的内容:
in the documentation,以及互联网周围的各种变化.
以下是Flex文档中的变体:
<INITIAL>{ "//" BEGIN(IN_COMMENT); } <IN_COMMENT>{ \n BEGIN(INITIAL); [^\n]+ // eat comment "/" // eat the lone / }