После проблемы с правилом перезаписи AST с методом разделения групп на Правило перезаписи AST с * + в antlr.
У меня опять проблема с генерацией AST в ANTLR :) Вот мой код antlr:
start : noun1+=n (prep noun2+=n (COMMA noun3+=n)*)*
-> ^(NOUN $noun1) (^(PREP prep) ^(NOUN $noun2) ^(NOUN $noun3)*)*
;
n : 'noun1'|'noun2'|'noun3'|'noun4'|'noun5';
prep : 'and'|'in';
COMMA : ',';
Теперь, с вводом: «существительное1 и существительное2, существительное3 в существительном4, существительное5», я получил следующий неожиданный AST:
Сравните с «деревом синтаксического анализа» в ANLRwork:
Я думаю, что переменная $ noun3 содержит список всех "n" в "COMMA noun3 + = n". Следовательно, синтаксический анализатор AST ^ (NOUN $ noun3) * будет рисовать все «n» без указания того, какое «n» на самом деле принадлежит «Prep».
Есть ли способ сделать разделение в "(^ (PREP Prep) ^ (NOUN $ noun2) ^ (NOUN $ noun3)) " сильный>. Все, что я хочу сделать, это то, что AST должен рисовать точно, без лексемы COMMA, с «деревом разбора» в ANTLRwork.
Спасибо за помощь !