如何编写ANTLR语法翻译器以使用方法返回Java类?

问题描述 投票:0回答:1

我正在尝试编写一个输出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;
     }
}
java antlr antlr4 grammar antlr3
1个回答
0
投票

听起来您想使用某种表达语法(在线上有很多示例),并生成:

1)类声明的开始:

public class FormulaExecutor{

    public Double formula1234(FormulaAPI apiReference) {
        return 

2)翻译的表达式

3)类声明的末尾:

;
    }
}

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

© www.soinside.com 2019 - 2024. All rights reserved.