我正在尝试编写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规则可以正常工作(例如,可以),但是两个注释规则似乎没有任何效果。(即,评论不会被忽略)。
我想念什么?
这是我在ANTLR v4中编写的简化Java语法。
WS : [ \t\r\n]+ -> channel(HIDDEN) ; COMMENT : '/*' .*? '*/' -> skip ; LINE_COMMENT : '//' ~[\r\n]* -> skip ;
也许这可以帮助您。
另外,请尝试重新排列代码。首先编写解析器规则,最后编写Lexer规则。遵循自顶向下方法。我发现它对调试更有帮助。当您从ANTLR 4 Eclipse插件创建语法的HTML导出时,它也会看起来不错。
祝好运!