如何将 import 语句添加到 anltr4 生成的 java 解析器以在语义谓词中使用 class
How does one add an import statement to a anltr4 generated java parser for use of a class in a semantic predicate
我有一个 antlr4 语法,我想调用一个函数,其中另一个 Java class 在语义谓词中。我如何告诉 antlr4 将适当的导入语句添加到 class,以便它可以找到我想要使用的 class?
这是一段 antlr4 代码,显示了一个像我想要的那样使用 class 的谓词。注意语义谓词中对 OtherClass 的调用。
somerule : { OtherClass.test(_input.LT(1).getText()) }? Token
如何告诉 antlr4 将以下导入语句添加到生成的解析器的顶部?
import my.otherpackage.OtherClass;
我想我可以在 antlr4 写入生成的解析器的目录中添加一个像这样的“转发”class,但这似乎是 hack
package GeneratedParser;
import my.otherpackage.OtherClass;
class OtherClassForParser {
public Boolean test(String text) {
return OtherClass.test(text);
}
}
然后在antlr4中改写使用
somerule : { OtherClassForParser.test(_input.LT(1).getText()) }? Token
这可能会起作用,因为转发 class 将在同一个包裹中。
尝试:
@parser::header{
import my.otherpackage.OtherClass;
}
(通常在语法的顶部)
我有一个 antlr4 语法,我想调用一个函数,其中另一个 Java class 在语义谓词中。我如何告诉 antlr4 将适当的导入语句添加到 class,以便它可以找到我想要使用的 class?
这是一段 antlr4 代码,显示了一个像我想要的那样使用 class 的谓词。注意语义谓词中对 OtherClass 的调用。
somerule : { OtherClass.test(_input.LT(1).getText()) }? Token
如何告诉 antlr4 将以下导入语句添加到生成的解析器的顶部?
import my.otherpackage.OtherClass;
我想我可以在 antlr4 写入生成的解析器的目录中添加一个像这样的“转发”class,但这似乎是 hack
package GeneratedParser;
import my.otherpackage.OtherClass;
class OtherClassForParser {
public Boolean test(String text) {
return OtherClass.test(text);
}
}
然后在antlr4中改写使用
somerule : { OtherClassForParser.test(_input.LT(1).getText()) }? Token
这可能会起作用,因为转发 class 将在同一个包裹中。
尝试:
@parser::header{
import my.otherpackage.OtherClass;
}
(通常在语法的顶部)