1

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

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

语法中只有一次出现basename

谢谢

4

2 回答 2

2

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

tabname:
    (ID '.')? basename=ID {
        if ($basename.equals("CAT"))
            System.out.println("CAT found");
    };
于 2010-02-09T16:45:27.803 回答
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 个表达式的树时,我们将匹配表达式并分别命名a它们b

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

于 2010-02-09T18:06:11.107 回答