我有一个关于在 rascal 中创建 AST 的问题。
我通常会执行以下操作:
model = createM3FromEclipseProject(|project://testproject|);
decls = createAstsFromEclipseProject(model.id, false);
首先我将collectBindings 设置为true。但对于某些项目,我遇到堆栈溢出错误。这可能是因为我使用 Luna eclipse 但它让我想知道集合绑定的作用是什么?
我试图查找它,但我找不到任何文档(也许我的谷歌技能很糟糕)。我还尝试在同一个项目上运行它,并使用不同的集合绑定设置进行比较,但我看不到任何东西。
有人可以向我解释一下集合绑定的作用以及为什么你会(不)使用它吗?
谢谢!!!
CollectBindings 在解析 Java 代码之后执行另一个步骤,即解析代码中可能的所有名称和类型。然后从 Java 编译器收集此信息并直接存储到 Rascal AST 中。
因此,如果您需要精确的限定名称或表达式和变量的类型,那么collectBindings
应设置为true
。例如在这段代码中:
int a = 0;
int b = a + a;
没有resolveBindings 的两种用途a
AST 中不会通过以下方式指向声明@decl
注释说|java+variable:///something/a|
他们不会知道自己是int()
通过@typ
注解。即便是int a
声明本身不知道其限定名称或其类型。
The StackOverFlowError
你看 josvr 在 github 上已经报道过:https://github.com/cwi-swat/rascal/issues/735 https://github.com/cwi-swat/rascal/issues/735。它是由 JDT Java 编译器中的语义更改引起的(可能是错误,也可能是其他原因)。
如果你现在陷入困境,我建议你回到开普勒。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)