如何从ANTLR动作中返回一个值?

时间:2018-02-01 01:08:03

标签: java antlr4

我想知道如何:

  1. 从规则操作返回运行时值
  2. 从父规则的操作中访问该值。
  3. 使用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
    

1 个答案:

答案 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...");
};
相关问题