У меня есть грамматика antlr, у которой есть такое правило:
rule:
ID (COMMA ID)*
;
где ID - это правило лексера для сопоставления типичного имени переменной, а запятая - это правило лексера, которое соответствует запятой. Таким образом, правило соответствует одной или нескольким переменным, разделенным запятыми
Я бы хотел создать дерево, которое выглядит так:
ITEM
ID
ITEM
ID
....
где ITEM - воображаемый узел, который я вставляю перед каждым найденным идентификатором.
Как бы я поступил так с синтаксисом переписывания дерева?
Обычно, если бы я хотел собрать все идентификаторы, я бы просто использовал
rule:
ID (COMMA ID)* -> ^(ITEM ID+)
;
но это дает дерево:
ITEM
ID
ID
....
Я использую C #, если это имеет значение как язык реализации и ANTLR 3.1.3