首页 > 解决方案 > ANTLR 不匹配空注释

问题描述

我正在使用 ANTLR 解析一种语言,该语言使用冒号作为注释指示符和“变得等于”分配的一部分。所以例如在这条线上

Index := 2    :Set Index

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

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

除了冒号紧跟新行之外,这似乎工作正常。例如在线

Index := 2    :

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

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

标签: antlr

解决方案


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

改为定义这样的注释:

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

推荐阅读