2016-08-20 119 views
2

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

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

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

回答

2

引用的语法构造不佳。它使用import声明来包含词法分析器批发。相反,只要依靠ANTLR来处理合适的拆分词法分析器/解析器。

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

parser grammar FoxySheepParser ; 
    lexer grammar FoxySheepLexer ; 

FWIW,ANTLR内部分开的组合语法词法分析器,然后前进好象用普通分词法分析器工作/解析器。由于当前词法分析器的复杂性以及它如何被合并,这种分离失败,并且如果产生任何代码,结果不一定是可靠的。

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