Равный (не токен) в грамматике ANTLR. Что это значит? - PullRequest
1 голос
/ 09 февраля 2010

Что означает конструкция basename = в следующем правиле?

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

В грамматике есть единственное вхождение basename.

Спасибо

Ответы [ 2 ]

2 голосов
/ 09 февраля 2010

Использование равенства в этом синтаксисе создает переменную с именем basename, на которую можно ссылаться в действиях:

tabname:
    (ID '.')? basename=ID {
        if ($basename.equals("CAT"))
            System.out.println("CAT found");
    };
1 голос
/ 09 февраля 2010

Используется для именования переменных.

Это может быть очень полезно, если вы хотите запустить некоторый код во время синтаксического анализа.

Рассмотрим пример калькулятора 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 для фактического вычисления.

...