Как добавить собственный узел в AST в Pharo SmaCC?
Я создаю CST с универсальными настраиваемыми узлами для языка Java в SmaCC с Pharo. Я нашел грамматику (парсер и сканер) и протестировал ее на нескольких примерах, создание абстрактного синтаксического дерева отлично работает.
Но мне нужно создать конкретное синтаксическое дерево с настраиваемыми универсальными узлами, например, на каждом этапе, для узлов, мне нужно добавить родительский узел LOOP_STATEMENT. Не могу найти, как это сделать? Является ли это возможным?
Я прочитал все о SmaCC и Pharo, но не могу найти здесь примера или решения http://books.pharo.org/booklet-Smacc/html/Chapters/Smacc/SmaccAST.html
Я попытался, например, добавить пользовательские узлы CST в образец кода калькулятора.
Это грамматика AST
<whitespace> : \s+;
%left "+" "-";
%left "*" "/";
%right "^";
%annotate_tokens;
%root Expression;
%prefix AST;
%suffix Node;
Expression
: Expression 'left' "+" 'operator' Expression 'right' {{Binary}}
| Expression 'left' "-" 'operator' Expression 'right' {{Binary}}
| Expression 'left' "*" 'operator' Expression 'right' {{Binary}}
| Expression 'left' "/" 'operator' Expression 'right' {{Binary}}
| Expression 'left' "^" 'operator' Expression 'right' {{Binary}}
| "(" Expression ")" {{}}
| Number
;
Number
: <number> {{Number}}
;
Например, мне нужно добавить узел SEPARATOR как родительский для каждой скобки. Зная, как это сделать, я решил бы мою проблему с грамматикой Java и добавлением LOOP_STATEMENT в качестве родительского элемента для узла while.