Antlr4 语法中注释的奇怪行为
Strange behaviour for comments in Antlr4 grammar
在 ID
下添加注释行是可以的,但是在 WS
下添加注释行会引发错误。下面列出了整个文件 Hello.g4
。
/**
* Define a grammar called Hello
*/
grammar Hello;
r : 'hello' ID ; // match keyword hello followed by an identifier
ID : [a-z]+ ; // match lower-case identifiers
/**********************************************************************************************/
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines
/**********************************************************************************************/
我在控制台中得到的输出如下:
ANTLR Tool v4.4 (/tmp/antlr-4.4-complete.jar)
Hello.g4 -o /home/me/workspace/TestComment/target/generated-sources/antlr4 -listener -no-visitor -encoding UTF-8
error(50): Hello.g4:13:0: syntax error: '<EOF>' came as a complete surprise to me
1 error(s)
BUILD FAIL
Total time: 168 millisecond(s)
运行 Eclipse 版本:Neon.3 Release (4.6.3),默认 ANTLR4 项目。
为什么 ANTLR4 应该关心尾随的注释行?
ANTLR 4 语法将 JavaDoc 注释定义为可选地允许作为 header 并且在每个规则上。最后一个 'comment line' 后没有规则,因此它被解释为规则的无效开头。
将您的注释行更改为 /*----*/
以避免错误。
在 ID
下添加注释行是可以的,但是在 WS
下添加注释行会引发错误。下面列出了整个文件 Hello.g4
。
/**
* Define a grammar called Hello
*/
grammar Hello;
r : 'hello' ID ; // match keyword hello followed by an identifier
ID : [a-z]+ ; // match lower-case identifiers
/**********************************************************************************************/
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines
/**********************************************************************************************/
我在控制台中得到的输出如下:
ANTLR Tool v4.4 (/tmp/antlr-4.4-complete.jar)
Hello.g4 -o /home/me/workspace/TestComment/target/generated-sources/antlr4 -listener -no-visitor -encoding UTF-8
error(50): Hello.g4:13:0: syntax error: '<EOF>' came as a complete surprise to me
1 error(s)
BUILD FAIL
Total time: 168 millisecond(s)
运行 Eclipse 版本:Neon.3 Release (4.6.3),默认 ANTLR4 项目。
为什么 ANTLR4 应该关心尾随的注释行?
ANTLR 4 语法将 JavaDoc 注释定义为可选地允许作为 header 并且在每个规则上。最后一个 'comment line' 后没有规则,因此它被解释为规则的无效开头。
将您的注释行更改为 /*----*/
以避免错误。