Я читал this question при попытке сделать что-то подобное. Ответ, данный там, не решает мою проблему.Доступ к _all_ нисходящим аннотациям узла в Rascal
Я хочу использовать заявление посещения, чтобы определить «массу» каждого поддерева, поэтому для каждого узла я хочу суммировать массы всех потомков. Например, шаг посещения который встречает это выражение узла со списком в нем:
\anode([\bnode()[@mass=1], \bnode()[@mass=2]], \cnode()[@mass=5])
должен дать это:
\anode([\bnode()[@mass=1], \bnode()[@mass=2]], \cnode()[@mass=5])[@mass=8]
Так что я не хочу, чтобы отфильтровать не-узлы, но фактически пересекают их. Включение случая для списков в моем заявлении посещения не работает (по крайней мере, не очевидно), потому что списки не могут содержать аннотации.
Есть ли естественный способ распространения всей аннотации информации по дереву?
Я думаю, вы думаете, что грамматики атрибутов? – jurgenv
Да. Сначала я этого не понимал, но об этом я и думаю. Я прочитал [здесь] (http://www.homepages.cwi.nl/~paulk/publications/rascal-lncs.pdf), что Rascal обобщает функциональность инструментов грамматики атрибутов. Включает ли это вышеупомянутое? – Anson
(или что-то подобное) – Anson