2013-03-27 12 views
0

Вопрос о том, как получить доступ к текущему узлу дерева внутри {"action"} блок в грамматике.Как получить доступ к текущему узлу дерева внутри грамматики?

Я говорю о Java цели, поэтому внутри сгенерированное правило, метод, который я хотел бы получить доступ к объекту root_1 (см ниже, стандартный сгенерированный код, SUBJECT здесь лексема внутри моей грамматики, это не имеет значения):

{ 
    Object root_1 = (Object)adaptor.nil(); 
    root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(SUBJECT, "SUBJECT"), root_1); 
    adaptor.addChild(root_1, stream_noun.nextTree()); 
    adaptor.addChild(root_0, root_1); 
    } 

Внутри грамматики Я хотел бы иметь возможность сделать что-то вроде:

subject : noun -> ^(SUBJECT noun) { ... place code here to work with `root_1` object ... } ; 

Может кто-нибудь предложить какие-либо идеи? Благодарю.

ответ

0

Ну, я нашел уродливый метод. Я могу получить доступ к упомянутым root_1 объекта, используя @after конструкцию, и получить доступ к root_0 объекта:

subject 
@after{ 
    // ...((CommonTree)root_0).getChild(0)... - this is `root_1` object. 
} 
    : noun -> ^(SUBJECT noun); 

Но если кто-то предложит более подходящий метод - это будет приветствоваться.

UPD:, как дорогой 280z28 упоминалось, это одна ((CommonTree)root_0) может быть заменен $tree с множеством options{ASTLabelType=CommonTree;}.

1

Я считаю, что вы ищете недвижимость $tree.

+0

Хорошо, спасибо за ваш ответ. Но, как я вижу, '$ tree' - это просто ссылка на переменную' root_0'. Он также может быть помещен только в конструкцию '@ after' (до этого он содержит только значение« null »). Итак, мой вопрос все еще открыт, потому что я ищу красивый способ получить ссылку на переменную 'root_1'. – Andremoniy

+0

Кроме того, поскольку '$ tree' на самом деле' retval.tree = root_0', его также нужно отличить от типа CommonTree. – Andremoniy

+0

@Andremoniy вам нужно установить опцию 'options {ASTLabelType = CommonTree;}' для '$ tree' для этого типа. –

Смежные вопросы