ANTLR4生成不正确的java代码

时间:2016-08-20 08:50:14

标签: java parsing antlr grammar antlr4

我正在尝试使用this grammar来解析Mathematica代码。我使用gradle插件生成java代码。其中两个生成的文件包含不正确的Java代码,如下所示:

private void LBARBRACKET_action(RuleContext _localctx, int actionIndex) {
    switch (actionIndex) {
    case 12:
        self.incrementBracketLevel(1);
        break;
    }
}

也许我可以删除所有“自我”。出现但我不想这样做。有没有人遇到同样的问题?

1 个答案:

答案 0 :(得分:2)

引用的语法构造不良。它使用import语句来包含词法分析器批发。相反,只需依靠ANTLR处理适当的分裂词法分析器/解析器。

将内部和外部重命名为FoxySheepParserFoxySheepLexer 并标记语法类型:

  parser grammar FoxySheepParser ;
  lexer  grammar FoxySheepLexer  ; 

FWIW,ANTLR在内部将词法分析器与组合语法分开,然后就像使用普通的分裂词法分析器/解析器一样。由于当前词法分析器的复杂性及其如何被合并,这种分离失败,并且如果产生任何代码,则结果不能确定是可靠的。

最后,语法代码生成默认为Java。但是,词法分析器中存在的本机代码语句似乎特定于Python。将Python指定为代码生成目标,或者将本机语句替换为其Java等效项(请查看java target/src子目录)。