这个 ANTLR 4 Lexer 文件中的 "parser rule 'channels' not allowed in lexer" 错误是什么?

What is "parser rule 'channels' not allowed in lexer" error in this ANTLR 4 Lexer file?

我正在尝试从 https://github.com/antlr/grammars-v4/tree/master/mysql 的 MySQL.g4 文件构建解析器和词法分析器。如附图所示,我收到错误 "parser rule 'channels' not allowed in lexer"

仅词法分析器语法只能包含词法分析器规则。我认为这里发生的是你正在使用的工具正在将 "rule" channels 解释为解析器规则,因为它不是以大写字母开头,因此在这个仅限词法分析器的语法中不合适.

不过,Mike 的评论是正确的。这个 channels 构造是(当前)词法分析器文件的有效 ANTLR 语法。 See this page.。它应该放在词法分析器语法文件中,所以我唯一可以推测你得到的错误是你使用的工具 (IDE) 不理解 channels 自定义规范语法。

请注意,并非 github 列表中的每个语法都是完美的,并且不是 ANTLR 本身的一部分,而是由不同的作者贡献的,有时 ANTLR 的版本与您正在使用的版本不同任何给定的时刻。