我想知道如何:
使用ANTLR我想使用动作构建自定义树(而不是过于复杂的侦听器/访问者)。我希望有一个解析器实现,其中每个动作都知道它的子节点而不是它的父节点。
可以访问父操作的$变量,但我想访问从子项返回的运行时值(我不知道如何)。
例如使用Ruby treetop
我可以构建如下的自定义树。这种方法也适用于ANTLR吗?
// sample input: "hello joe"
grammar Test
rule greeting
'hello' name {
// here `name.value` returns an instance of Name (below)
return new Greeting(name.value)
}
end
rule name
ID {
return new Name(ID.text)
}
end
答案 0 :(得分:0)
可以通过分配一个可以从外部访问的特殊字段(伪)从操作返回自定义值:
greeting returns [MyGreeting value] : 'hello' name
{
$value = new MyGreeting();
System.out.println("statement with name " + $name.value); // accessing
};
name returns [MyName value] : ID
{
$value = new MyName(); // assigning
System.out.println("name...");
};