我正在尝试编写一个输出Java方法的ANTLR语法。即我为以下公式编写了语法:
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")
,输出应类似于具有上述可执行方法的类。
如何在翻译过程中实现这一目标?我见过翻译器返回双精度值或字符串值,但没有像翻译器返回带有可执行方法的类本身的任何东西。
想法是,转换器返回的此类将被编译为字节代码,供使用它的程序使用。
附加信息:上面的代码中引用的类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>)
。