ANTLR 不匹配空注释

ANTLR not matching empty comments

我正在使用 ANTLR 解析一种语言,该语言使用冒号作为注释指示符和 'becomes equal to' 赋值的一部分。所以例如在行

Index := 2    :Set Index

我需要将第一部分识别为赋值语句,将第二个冒号后的文本识别为注释。目前我使用以下规则执行此操作:

COMMENT                 : ':'+ ~[:='\r\n']*;

除了冒号 立即 后跟一个新行之外,这似乎工作正常。例如在行

Index := 2    :

换行符紧跟在第二个冒号之后。在这种情况下,注释无法识别,其余代码也无法在正确的上下文中进行解析。如果在第二个冒号后有一个 space,则该行被正确解析。

我希望 '\r'\n' 能够解决这个问题,但它似乎只有在注释符号后至少有一个字符时才有效 - 我是否遗漏了命令中的某些内容?

大括号表示没有任何引号的字符集合。因此,您的 '\r\n' 文字在那里不起作用(您应该收到警告,指出撇号在 char 范围内包含不止一次。

改为像这样定义注释:

COMMENT: ':'+ ~[:=\n\r]*;