如何使用方法将 ANTLR 语法翻译器写入 return a java class?
How to write ANTLR grammar translator to return a java class with methods?
我正在尝试编写输出 java 方法的 ANTLR 语法。 IE。
我为以下公式编写了语法:
expr("L") + expr("R")
我希望我的语法翻译器在翻译后使用以下方法 return a java class:
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")
并且输出应该像 class 和上面的可执行方法。
如何在翻译过程中实现这一点?我见过翻译器 returning 双精度值或字符串值,但没有看到翻译器 returning a class 本身和可执行方法。
想法是这个 class 翻译器 return 将被编译为字节码,供使用它的程序使用。
额外信息:上面代码中引用的classFormulaAPI是这样的。 class 已经在语法之外定义了。
public class FormulaAPI(){
public Double evaluateResult(String input){
Double d = <value obtained from DB based on input string>;
return d;
}
}
好像是想用某种表达式语法(网上有很多例子),生成:
1) class声明的开头:
public class FormulaExecutor{
public Double formula1234(FormulaAPI apiReference) {
return
2) 翻译后的表达式
3) class声明结束:
;
}
}
翻译后的表达式与输入表达式相同,除了 expr(<subexpression>)
将被翻译为 apiReference.evaluateResult(<subexpression>)
。
我正在尝试编写输出 java 方法的 ANTLR 语法。 IE。 我为以下公式编写了语法:
expr("L") + expr("R")
我希望我的语法翻译器在翻译后使用以下方法 return a java class:
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")
并且输出应该像 class 和上面的可执行方法。
如何在翻译过程中实现这一点?我见过翻译器 returning 双精度值或字符串值,但没有看到翻译器 returning a class 本身和可执行方法。
想法是这个 class 翻译器 return 将被编译为字节码,供使用它的程序使用。
额外信息:上面代码中引用的classFormulaAPI是这样的。 class 已经在语法之外定义了。
public class FormulaAPI(){
public Double evaluateResult(String input){
Double d = <value obtained from DB based on input string>;
return d;
}
}
好像是想用某种表达式语法(网上有很多例子),生成:
1) class声明的开头:
public class FormulaExecutor{
public Double formula1234(FormulaAPI apiReference) {
return
2) 翻译后的表达式
3) class声明结束:
;
}
}
翻译后的表达式与输入表达式相同,除了 expr(<subexpression>)
将被翻译为 apiReference.evaluateResult(<subexpression>)
。