我已经成功构建了一个为我的语言创建AST的解析器/词法分析器。是啊!我现在正处于“翻译”阶段。我在引号中说解释器,因为语言是声明性的,因为它不像程序语言那样真正被执行。它被翻译成Java对象,稍后在我的应用程序运行中使用。
当我走AST时,我需要将树节点转换为Java对象。这些Java对象在我的程序中使用。我理解如何创建动作以创建Java对象,但是如何将操作的结果返回到我的主程序中?
我是否使用@members {}标签并在那里编写我的getter方法?
答案 0 :(得分:1)
我是否使用@members {}标签并在那里编写我的getter方法?
是的,这是一个选择。但是,(树)语法规则可以返回自定义对象,以便在调用树步行器(或解析器)的入口点时,返回此自定义对象:
tree grammar YourTreeWalker;
...
walk returns [CustomObject obj]
: ...
{
$obj = ...
}
;
...
...
YourTreeWalker walker = new YourTreeWalker(...);
CustomObject obj = walker.walk();