Я пытаюсь написать грамматику ANTLR, которая выводит метод java. т.е. я написал грамматику для следующей формулы:
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;
}
}