我正在尝试编写一个输出 java 方法的 ANTLR 语法。 IE。 我为以下公式编写了语法:
expr("L") + expr("R")
我希望我的语法翻译器在翻译后返回一个具有以下方法的 java 类,如下所示:
public class FormulaExecutor(){
public Double formula1234(FormulaAPI apiReference) {
return apiReference.evaluateResult("L") + apiReference.evaluateResult("R") ;
}
}
即expr("L")
的翻译应该生成行 apiReference.evaluateResult("L")
和 expr("R")
应该生成apiReference.evaluateResult("R")
并且输出应该类似于具有上述可执行方法的类。
如何在翻译过程中实现这一点?我见过翻译器返回 double 值或字符串值,但没有看到像翻译器使用可执行方法返回类本身那样的东西。
这个想法是,翻译器返回的此类将被编译为字节代码,以供使用它的程序使用。
额外信息:上面代码中引用的类FormulaAPI是这样的。这个类已经在语法之外定义了。
public class FormulaAPI(){
public Double evaluateResult(String input){
Double d = <value obtained from DB based on input string>;
return d;
}
}
最佳答案
听起来你想使用某种表达式语法(网上有很多例子),并生成:
1)类声明的开头:
public class FormulaExecutor{
public Double formula1234(FormulaAPI apiReference) {
return
2) 翻译后的表达式
3)类声明结束:
;
}
}
翻译后的表达式与输入表达式相同,但 expr(<subexpression>)
除外。这将被翻译为 apiReference.evaluateResult(<subexpression>)
.
关于java - 如何编写 ANTLR 语法翻译器以返回带有方法的 java 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60650168/