basename =
以下规则中的构造是什么?
tabname:
(ID'.')? basename = ID
;
语法中只有一次出现basename
。
谢谢
在该语法中使用 equals 会创建一个名为的变量basename
,然后可以在操作中引用该变量:
tabname:
(ID '.')? basename=ID {
if ($basename.equals("CAT"))
System.out.println("CAT found");
};
它用于命名变量。
如果您想在解析器期间运行一些代码,这将非常有用。
考虑 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 语句来实际进行计算。