很抱歉,如果有任何术语关闭,最近才开始使用antlr。
这是忽略多行注释的antlr语法:
COMMENT : '/*' .* '*/';
SPACE : (' ' | '\t' | '\r' | '\n' | COMMENT)+ {$channel = HIDDEN;} ;
这是从我想要编译的文件的第一个字符开始的注释:
/*
This is a comment
*/
这是我得到的错误:
[filename] line 252:0 no viable alternative at character '<EOF>'
[filename] line 1:1 no viable alternative at input '*'
但是,如果我在评论前放置一个空格,就像这样:
/*
This is a comment
*/
编译好。有什么想法吗?
答案 0 :(得分:0)
忽略多行注释:
ML_COMMENT
: '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;}
编辑:
也许这不是因为你的LEXER而是因为你的Parser。从lexer,$ channel = HIDDEN,你告诉所有这些元素不要传递给Parser。这就是解析器首先找到EOF的原因。你什么都没发送!
如果你写一个空格作为第一个字符,解析器会收到一些东西,并且能够处理输入......
这应该是你的问题!!
我希望这会对你有帮助!