ANTLR3不会忽略从文件的第一个字符开始的注释

时间:2014-10-20 22:34:14

标签: comments antlr3

很抱歉,如果有任何术语关闭,最近才开始使用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
*/

编译好。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

忽略多行注释:

ML_COMMENT
    :   '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;}

编辑:

也许这不是因为你的LEXER而是因为你的Parser。从lexer,$ channel = HIDDEN,你告诉所有这些元素不要传递给Parser。这就是解析器首先找到EOF的原因。你什么都没发送!

如果你写一个空格作为第一个字符,解析器会收到一些东西,并且能够处理输入......

这应该是你的问题!!

我希望这会对你有帮助!