我正在尝试在ANTLR中编写评论匹配规则,目前如下:
LINE_COMMENT
: '--' (options{greedy=false;}: .)* NEWLINE {Skip();}
;
NEWLINE : '\r'|'\n'|'\r\n' {Skip();};
此代码工作正常,除非注释是文件的最后一个字符,在这种情况下,它会抛出NoViableAlt异常。我该如何解决这个问题?
答案 0 :(得分:2)
为什么不:
LINE_COMMENT : '--' (~ NEWLINE)* ;
fragment NEWLINE : '\r' '\n'? | '\n' ;
如果你还没有遇到过这个问题,那么词法规则(全部大写)只能由常量和标记组成,而不是其他词汇。你需要一个解析器规则。
答案 1 :(得分:0)
我会去:
LINE_COMMENT
: '--' ~( '\r' | '\n' )* {Skip();}
;
NEWLINE
: ( '\r'? '\n' | '\r' ) {Skip();}
;