是否可以打印访问中遍历的所有节点ID/值?取以下代码示例:
top-down visit(asts) {
case x: println(typeOf(x));
}
我现在得到了访问过的所有类型的节点。相反,我想知道遇到的所有x的ids/值(不打印整个树)。换句话说,我很好奇Rascal是如何穿越包含lang::java::m3::AST
s的list[Declaration] asts
的。
作为一个栏,是否可以打印一份宣言的直系亲属/后代,无论其类型如何?或者打印ast的子代总数?
在文档中(https://www.rascal-mpl.org/docs/rascal/expressions/visit/)没有提到这一点。
- 原则上Rascal值不具有";id";。它的结构是它的";id";它的id就是它的结构。如果需要,可以使用
md5sum
打印哈希,例如通过IO函数:case value x : println(md5sum(x));
- Rascal从左到右遍历列表。在
top-down
模式中,它首先访问整个列表,在bottom-up
模式中,首先访问子列表 - 打印树中的节点总数:
(0 | it + 1 | /_ <- t)
- 打印节点的所有子级:
import Node;
、case node n: println(getChildren(n));
- 上升点是不可访问的,除非你匹配得更深,并在一个模式中包括两个级别的节点