以下规则中的
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语句来实际进行计算。