ANTLR语法中的等号(不是令牌)。这是什么意思?

时间:2010-02-09 16:40:16

标签: parsing antlr grammar token equals

以下规则中的构造basename =是什么?

tabname:
   (ID'.')? basename = ID
;

语法中出现basename这一次。

由于

2 个答案:

答案 0 :(得分:2)

在该语法中使用equals会创建一个名为basename的变量,然后可以在操作中引用该变量:

tabname:
    (ID '.')? basename=ID {
        if ($basename.equals("CAT"))
            System.out.println("CAT found");
    };

答案 1 :(得分:1)

用于命名变量。

如果你想在解析器中运行一些代码,这可能非常有用。

考虑java计算器示例:

expr returns [float r]
{
float a,b;
r=0;
}
:   #(PLUS a=expr b=expr)   {r = a+b;}
|   #(STAR a=expr b=expr)   {r = a*b;}
|   i:INT           {r = (float)Integer.parseInt(i.getText());}
;

这里我们说当我们匹配一个具有PLUS或STAR标记后跟2个表达式的树时,我们将匹配表达式并分别命名为ab

在我们使用那些我们在java语句中匹配的变量之后。此语句包含在{}括号内。这里我们使用java语句来实际进行计算。