java - 如何编写 ANTLR 语法翻译器以返回带有方法的 java 类?
问题描述
我正在尝试编写一个输出 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>)
.
推荐阅读
- android - 溢出-x:滚动!重要不能在三星互联网上使用翻译的 SVG
- kubernetes - Openshift:oc登录失败
- python - 有没有办法在 Blender 中使用 python 脚本复制/粘贴动作关键帧?
- c# - 用户角色限制访问某些用户以显示某些页面
- git - 在构建结束时提交/推送更改到 Azure DevOps 存储库
- reactjs - React 子组件(Typescript)在第三次渲染之前不会保留状态
- python-3.x - 在列表理解中使用错误处理将字符串转换为浮点数
- angular-cli-v7 - 如何使用 Angular 8 构建 bundle.js?
- java - Map(带操作)Stream java 8、nestedList
- javascript - 在 wordpress 中运行笑话测试时如何修复 import {} 意外令牌