ANTLR评论问题

时间:2010-02-14 11:35:12

标签: comments pattern-matching antlr3

我正在尝试在ANTLR中编写评论匹配规则,目前如下:

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

NEWLINE : '\r'|'\n'|'\r\n' {Skip();};

此代码工作正常,除非注释是文件的最后一个字符,在这种情况下,它会抛出NoViableAlt异常。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

为什么不:

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

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

答案 1 :(得分:0)

我会去:

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

NEWLINE 
  :  ( '\r'? '\n' | '\r' ) {Skip();}
  ;