ANTLR4 生成不正确的 java 代码

ANTLR4 generating improper java code

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

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

也许我可以删除所有出现的 "self.",但我不想这样做。有人遇到同样的问题吗?

引用的语法构造不当。它使用 import 语句来包含词法分析器。相反,只需依靠 ANTLR 处理适当的拆分 lexer/parser.

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

  parser grammar FoxySheepParser ;
  lexer  grammar FoxySheepLexer  ; 

FWIW,ANTLR 在内部将词法分析器与组合语法分开,然后像使用普通拆分一样继续处理 lexer/parser。由于当前词法分析器及其合并方式的复杂性,这种分离失败了,如果生成了任何代码,则结果不能确定是可靠的。

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