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 可确保在最后一行之后没有尾随换行符的情况下也能成功解析。
我正在使用 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 可确保在最后一行之后没有尾随换行符的情况下也能成功解析。