首页 > 解决方案 > 如何编写 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;
     }
}

标签: javaantlrantlr4grammarantlr3

解决方案


听起来你想使用某种表达式语法(网上有很多例子),并生成:

1)类声明的开始:

public class FormulaExecutor{

    public Double formula1234(FormulaAPI apiReference) {
        return 

2) 翻译后的表达式

3)类声明的结束:

;
    }
}

翻译后的表达式与输入表达式相同,除了expr(<subexpression>)将被翻译为apiReference.evaluateResult(<subexpression>).


推荐阅读