ANTLRv4:解析注释直到行尾

ANTLRv4: Parsing comments until end-of-line

我正在使用 ANTLRv4 解析像这样的简单结构化文件:

; Comment (works)
    ; This comment is also ok.
;
; The previous line is not tokenized :(
end ; Comment on some instruction (works)

将此源文件与生成的解析器一起使用时,第 3 行总是出现错误:

line 3:1 token recognition error at: '\n'

我可以追踪生成的词法分析器中的错误。

我正在使用这个词法分析器语法:

lexer grammar SimpleLexer;

WS              : [ \t] -> skip;
EOL             : [\r\n];
END             : [eE][nN][dD] ;
SEMICOLON       : ';' -> mode(COMMENT_MODE);
IDENTIFIER      : LETTER (LETTER | DIGIT | '_')* ;

fragment LETTER : [a-zA-Z] ;
fragment DIGIT  : [0-9] ;

mode COMMENT_MODE;
COMMENT_TEXT    : (~'\n')* -> mode(DEFAULT_MODE);

(注意:获取评论文本也很重要,它可能包含一些元信息。)

有人建议让这个词法分析器处理空注释吗?

提前致谢!

试试这个:

mode COMMENT_MODE;
COMMENT_TEXT: (~('\n' | EOF))*;
END: '\n' | EOF -> mode(DEFAULT_MODE);

添加 EOF 可确保在最后一行之后没有尾随换行符的情况下也能成功解析。