2

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

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

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

此代码工作正常,除非注释是文件的最后一个字符,在这种情况下,它会引发 NoViableAlt 异常。我怎样才能解决这个问题?

4

2 回答 2

2

为什么不:

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

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

于 2010-02-14T11:43:29.290 回答
0

我会去:

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

NEWLINE 
  :  ( '\r'? '\n' | '\r' ) {Skip();}
  ;
于 2010-02-14T11:52:44.840 回答