在Lex/Flex中启动状态

Dan*_*Dan 6 parsing lex bison lexical-analysis flex-lexer

我正在使用Flex和Bison作为解析器生成器,但是我的扫描器中的启动状态有问题.

我正在使用独占规则来处理评论,但这个语法似乎与引用的标记不匹配:

%x COMMENT

//                    { BEGIN(COMMENT); }
<COMMENT>[^\n]        ;
<COMMENT>\n           { BEGIN(INITIAL); }

"=="                  { return EQUALEQUAL; }

.                     ;
Run Code Online (Sandbox Code Playgroud)

在这个简单的例子中:

// a == b
Run Code Online (Sandbox Code Playgroud)

除非我包含此规则,否则不完全匹配评论:

<COMMENT>"=="             ;
Run Code Online (Sandbox Code Playgroud)

如何在不必将所有这些令牌添加到我的独家规则中的情况下解决这个问题?

Aid*_*ell 9

匹配Lex/Flex中的C风格注释或者有详细记录的内容:

在文档中,以及互联网周围的各种变化.

以下是Flex文档中的变体:

   <INITIAL>{
     "//"              BEGIN(IN_COMMENT);
     }
     <IN_COMMENT>{
     \n      BEGIN(INITIAL);
     [^\n]+    // eat comment
     "/"       // eat the lone /
     }
Run Code Online (Sandbox Code Playgroud)