Как я могу создать дерево antlr данной формы? - PullRequest
1 голос
/ 07 января 2011

У меня есть грамматика 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

1 Ответ

1 голос
/ 07 января 2011

Я быстро пришел в себя после того, как задал вопрос.

Чтобы получить форму дерева, мне нужно использовать синтаксис переписывания следующим образом:

rule:
ID (COMMA ID)*  -> ^(ITEM ID)+
;
...