无法使ANTLR4语法跳过注释

spi*_*epf 3 comments lexer antlr4

我正在尝试编写ANTLR4语法来解析actionscript3。我决定从一些粗略的东西开始:

grammar actionscriptGrammar;

OBRACE:'{';
CBRACE:'}';
STRING_DELIM:'"';

BLOCK_COMMENT : '/*' .*? '*/' -> skip;
EOL_COMMENT : '//' .*? '/n' -> skip;
WS: [ \n\t\r]+ -> skip;

TEXT: ~[{} \n\t\r"]+;

thing
    : TEXT
    | string_literal
    | OBRACE thing+? CBRACE;

string_literal : STRING_DELIM .+? STRING_DELIM;

start_rule
    : thing+?;
Run Code Online (Sandbox Code Playgroud)

基本上,我想要一棵按其词法范围分组的事物树。我希望忽略注释,字符串文字是它们自己的东西,这样它们可能包含的任何大括号都不会影响词​​法范围。string_literal规则可以正常工作(例如,可以),但是两个注释规则似乎没有任何效果。(即,评论不会被忽略)。

我想念什么?

小智 6

这是我在ANTLR v4中编写的简化Java语法。

WS
    : [ \t\r\n]+ -> channel(HIDDEN)
;

COMMENT
    : '/*' .*? '*/' -> skip
;

LINE_COMMENT
    : '//' ~[\r\n]* -> skip
;
Run Code Online (Sandbox Code Playgroud)

也许这可以帮助您。

另外,请尝试重新排列代码。首先编写解析器规则,最后编写Lexer规则。遵循自顶向下方法。我发现它对调试更有帮助。当您从ANTLR 4 Eclipse插件创建语法的HTML导出时,它也会看起来不错。

祝好运!