无法使ANTLR4语法跳过注释

 狡兔死走狗喷Henry 发布于 2023-01-18 08:37

我正在尝试编写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+?;

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

我想念什么?

1 个回答
  • 这是我在ANTLR v4中编写的简化Java语法。

    WS
        : [ \t\r\n]+ -> channel(HIDDEN)
    ;
    
    COMMENT
        : '/*' .*? '*/' -> skip
    ;
    
    LINE_COMMENT
        : '//' ~[\r\n]* -> skip
    ;
    

    也许这可以帮助您。

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

    祝好运!

    2023-01-18 08:42 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有