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.
将(内部和外部)重命名为 FoxySheepParser
和 FoxySheepLexer
并标记语法类型:
parser grammar FoxySheepParser ;
lexer grammar FoxySheepLexer ;
FWIW,ANTLR 在内部将词法分析器与组合语法分开,然后像使用普通拆分一样继续处理 lexer/parser。由于当前词法分析器及其合并方式的复杂性,这种分离失败了,如果生成了任何代码,则结果不能确定是可靠的。
最后,语法代码生成默认为Java。但是,词法分析器中存在一些似乎特定于 Python 的本机代码语句。将 Python 指定为代码生成目标,或将本机语句替换为 Java 等效项(检查 java target/src
子目录)。
我正在尝试使用 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.
将(内部和外部)重命名为 FoxySheepParser
和 FoxySheepLexer
并标记语法类型:
parser grammar FoxySheepParser ;
lexer grammar FoxySheepLexer ;
FWIW,ANTLR 在内部将词法分析器与组合语法分开,然后像使用普通拆分一样继续处理 lexer/parser。由于当前词法分析器及其合并方式的复杂性,这种分离失败了,如果生成了任何代码,则结果不能确定是可靠的。
最后,语法代码生成默认为Java。但是,词法分析器中存在一些似乎特定于 Python 的本机代码语句。将 Python 指定为代码生成目标,或将本机语句替换为 Java 等效项(检查 java target/src
子目录)。