Используется для именования переменных.
Это может быть очень полезно, если вы хотите запустить некоторый код во время синтаксического анализа.
Рассмотрим пример калькулятора 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 для фактического вычисления.