Как добавить собственный узел в 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.

0 ответов

Другие вопросы по тегам