Antlr4 解析单行注释

Antlr4 解析单行注释,antlr4,Antlr4,我试图写一个语法来解析单行注释。以“---”开头的注释可以出现在文件中的任何位置 我的基本语法如下所示 语法(aa.g4): 测试等级: 输入: 输出: --comment1a --ifcommentif(x)首先,您应该定义您真正想要的行注释规则。非贪婪运算符没有按您所希望的方式执行 LineComment : '--' ~[\r\n]* -> channel(HIDDEN) ; 其次,如果希望令牌流包含有关空格和换行符的信息,则应将它们移动到隐藏通道,而不是使用skip命令。

我试图写一个语法来解析单行注释。以“---”开头的注释可以出现在文件中的任何位置

我的基本语法如下所示

语法(aa.g4): 测试等级: 输入: 输出:
--comment1a

--ifcommentif(x)首先,您应该定义您真正想要的行注释规则。非贪婪运算符没有按您所希望的方式执行

LineComment
  : '--' ~[\r\n]* -> channel(HIDDEN)
  ;
其次,如果希望令牌流包含有关空格和换行符的信息,则应将它们移动到隐藏通道,而不是使用
skip
命令。
skip
命令会完全删除标记,使其看起来好像文本根本就不在输入中一样

NEWLINE
  : '\r'? '\n' -> channel(HIDDEN)
  ;

WS
  : [ \t\f]+ -> channel(HIDDEN)
  ;
注释不会出现在解析树中,您也不会在任何解析规则中使用
LineComment
。要在解析树中的另一个令牌之前或之后获取有关这些令牌的信息,您可以直接(使用)或使用诸如或之类的实用方法来检查特定索引周围的令牌。

非常感谢:)甚至在Antlr4明确指南中的“在不同频道上广播令牌”下找到了一个示例程序。
--comment1
-- if comment
if (x) --mid if comment
  --end comment
return result;
--comment1a
--ifcommentif(x)     <<< error output
--midifcomment
--endcomment
LineComment
  : '--' ~[\r\n]* -> channel(HIDDEN)
  ;
NEWLINE
  : '\r'? '\n' -> channel(HIDDEN)
  ;

WS
  : [ \t\f]+ -> channel(HIDDEN)
  ;