Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “什么是”呢;解析器规则';频道';lexer中不允许使用“;此ANTLR 4 Lexer文件中有错误吗?_Java_Mysql_Antlr4 - Fatal编程技术网

Java “什么是”呢;解析器规则';频道';lexer中不允许使用“;此ANTLR 4 Lexer文件中有错误吗?

Java “什么是”呢;解析器规则';频道';lexer中不允许使用“;此ANTLR 4 Lexer文件中有错误吗?,java,mysql,antlr4,Java,Mysql,Antlr4,我正在尝试从MySQL.g4文件中构建解析器和Lexer。我得到错误“语法分析器规则‘通道’在lexer中不允许”,如所附图像所示 仅Lexer语法只能包含Lexer规则。我认为这里发生的事情是,您正在使用的工具是将“rule”通道解释为解析器规则,因为它不是以大写字母开头的,因此在这个只有lexer的语法中不合适 然而,迈克的评论是正确的。此channels构造(当前)是lexer文件的有效ANTLR语法。它应该放在lexer语法文件中,因此我只能猜测您所得到的错误是您使用的工具(IDE)不理

我正在尝试从MySQL.g4文件中构建解析器和Lexer。我得到错误“语法分析器规则‘通道’在lexer中不允许”,如所附图像所示


仅Lexer语法只能包含Lexer规则。我认为这里发生的事情是,您正在使用的工具是将“rule”
通道
解释为解析器规则,因为它不是以大写字母开头的,因此在这个只有lexer的语法中不合适

然而,迈克的评论是正确的。此
channels
构造(当前)是lexer文件的有效ANTLR语法。它应该放在lexer语法文件中,因此我只能猜测您所得到的错误是您使用的工具(IDE)不理解
通道
自定义规范语法


请注意,并非github列表中的所有语法都是完美的,也不是ANTLR的一部分,而是由不同的作者提供的,有时是与您在任何给定时刻使用的ANTLR版本不同的版本。

频道
不是规则,但是语法支持且仅在lexer语法中有效的通道列表。它是否在解析器文件中?否,
channels
命令仅在lexer语法中允许。这毫无意义。这是IDE中的错误,而不是语法错误。那是哪个IDE。尝试使用我的ANTLR4扩展名编写Visual Studio代码,它将为您提供正确的详细信息。可能此IDE使用的是过时的ANTLR版本。这样的语法出现在4.5版本中:@MikeLischke IDE是Eclipse的ANTLR4插件。我通过注释出频道行并在必要时硬编码频道编号来“修复”它。