我正在尝试使用this grammar来解析Mathematica代码。我使用gradle插件生成java代码。其中两个生成的文件包含不正确的Java代码,如下所示:
private void LBARBRACKET_action(RuleContext _localctx, int actionIndex) {
switch (actionIndex) {
case 12:
self.incrementBracketLevel(1);
break;
}
}
也许我可以删除所有“自我”。出现但我不想这样做。有没有人遇到同样的问题?
答案 0 :(得分:2)
引用的语法构造不良。它使用import
语句来包含词法分析器批发。相反,只需依靠ANTLR处理适当的分裂词法分析器/解析器。
将内部和外部重命名为FoxySheepParser
和FoxySheepLexer
并标记语法类型:
parser grammar FoxySheepParser ;
lexer grammar FoxySheepLexer ;
FWIW,ANTLR在内部将词法分析器与组合语法分开,然后就像使用普通的分裂词法分析器/解析器一样。由于当前词法分析器的复杂性及其如何被合并,这种分离失败,并且如果产生任何代码,则结果不能确定是可靠的。
最后,语法代码生成默认为Java。但是,词法分析器中存在的本机代码语句似乎特定于Python。将Python指定为代码生成目标,或者将本机语句替换为其Java等效项(请查看java target/src
子目录)。