如何在antlr lexer中处理嵌套注释

R71*_*R71 5 antlr4

如何处理antlr4 lexer中的嵌套注释?即我需要计算此令牌内的"/*"数,并在收到相同数量的"*/"后才关闭.例如,D语言的嵌套注释为"/ + ... + /"

例如,以下行应被视为一个注释块:

/* comment 1
   comment 2
   /* comment 3
      comment 4
   */
   // comment 5
   comment 6
*/
Run Code Online (Sandbox Code Playgroud)

我当前的代码如下,它不适用于上面的嵌套注释:

COMMENT : '/*' .*? '*/' -> channel(HIDDEN)
        ;
LINE_COMMENT : '//' ~('\n'|'\r')* '\r'? '\n'  -> channel(HIDDEN)
        ;
Run Code Online (Sandbox Code Playgroud)

mik*_*dge 11

Terence Parr在他的Swift Antlr4语法中有两条lexer行,用于删除嵌套注释:

COMMENT : '/*' (COMMENT|.)*? '*/' -> channel(HIDDEN) ;
LINE_COMMENT  : '//' .*? '\n' -> channel(HIDDEN) ;
Run Code Online (Sandbox Code Playgroud)