我使用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);
(注意:获取评论文本也很重要。它可能包含一些元信息。)
有没有人建议让这个词法分析器使用空注释?
提前致谢!
答案 0 :(得分:0)
试试这个:
mode COMMENT_MODE;
COMMENT_TEXT: (~('\n' | EOF))*;
END: '\n' | EOF -> mode(DEFAULT_MODE);
如果在最后一行之后没有尾随换行符,则EOF添加可确保解析也成功。