代码之家  ›  专栏  ›  技术社区  ›  RCIX

antlr注释问题

  •  2
  • RCIX  · 技术社区  · 15 年前

    我试图在antlr中编写一个注释匹配规则,该规则当前如下:

    LINE_COMMENT
        : '--' (options{greedy=false;}: .)* NEWLINE {Skip();}
        ;
    
    NEWLINE : '\r'|'\n'|'\r\n' {Skip();};
    

    此代码可以正常工作,除非注释是文件的最后一个字符,在这种情况下,它会引发NoviableAlt异常。我该怎么解决?

    2 回复  |  直到 15 年前
        1
  •  2
  •   cletus    15 年前

    为什么不:

    LINE_COMMENT     : '--' (~ NEWLINE)* ;
    fragment NEWLINE : '\r' '\n'? | '\n' ;
    

    如果您还没有遇到这个问题,那么词汇规则(全部大写)只能由常量和标记组成,而不能由其他词汇组成。你需要一个解析器规则。

        2
  •  0
  •   Bart Kiers    15 年前

    我想去:

    LINE_COMMENT
      :  '--' ~( '\r' | '\n' )* {Skip();}
      ;
    
    NEWLINE 
      :  ( '\r'? '\n' | '\r' ) {Skip();}
      ;