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