java - 如何编写 ANTLR 语法翻译器以返回带有方法的 java 类?

标签 java antlr antlr4 grammar antlr3

我正在尝试编写一个输出 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/

相关文章:

java - 调试运行次数过多的java for循环

java - 如何创建具有相关子对象的多个游戏对象

java - Java 正则表达式语法的 ANTLR 语法

java - 从版本 4.7.2 开始,ANTLR 无法生成 java 代码

python - ANTLR4 PLSQL 语法 Python 3 缺失函数

java - 没有方法program()来构建解析树对象

antlr - "!"、 "^"和 "$"在 Antlr3 中是否有特殊含义?

java - Hibernate 对 Oracle 数组列表连接的支持

java - 并发:同步与锁

java - setBuildParseTree = false 是否有任何好的引用示例?