Flex无法识别的规则

时间:2014-04-02 13:50:20

标签: c parsing flex-lexer

我正在编写一个简单语言的解析器,我在使用flex时遇到了一些奇怪的问题。当我尝试在这里编译源代码(http://pastebin.com/qu7N0H3q)时,我得到第50-52行的“无法识别的规则”错误,但奇怪的是它们是注释(应该简单地被跳过)。在添加COMMENT条件之前,一切都运行良好,所以我很确定是什么打破了一切(第48行和第86-96行)。我已经查找了这个问题,找不到适合我特定情况的任何内容,但我发现当出现语法问题时,通常会出现无法识别的规则错误(可能就是这种情况,因为我对条件有多么不满意编辑适用于flex)。

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

这几个月没有得到答复,所以我认为需要关闭。

我已经从pastebin下载了你的代码并为你检查了一下。你的问题实际上有答案!当您添加COMMENT时出现问题...

Flex没有注释表示法,因此您不能拥有任何注释,因此它们是“无法识别的规则”。

解决方案是:

  • 删除评论
  • 将注释嵌入将由编译器处理的操作部分,而不是flex。

我看到您在 C 的语法中使用了注释,但是您在一行的第一列中启动了它们。只有正则表达式模式可以从第一列开始。页面中缩进的任何内容都被视为操作的一部分,并且不会更改。因此,如果您只是将注释缩进几个空格,那么错误就会消失。

不要误以为flex允许你在 C 中编写动作,你可以在任何你想要的地方使用 C 语言的文物!

这是flex(或lex)新手用户常犯的错误,值得在详细解答中解释。

相关问题