ANTLRv4:解析注释直到行尾

时间:2017-05-04 07:42:09

标签: antlr grammar lexer

我使用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);

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

有没有人建议让这个词法分析器使用空注释?

提前致谢!

1 个答案:

答案 0 :(得分:0)

试试这个:

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

如果在最后一行之后没有尾随换行符,则EOF添加可确保解析也成功。