abstract-syntax-tree - Rascal:创建 AST 中的 bool collectBindings 是做什么的?

标签 abstract-syntax-tree rascal

我有一个关于在 rascal 中创建 AST 的问题。 我通常会执行以下操作:

model = createM3FromEclipseProject(|project://testproject|);
decls = createAstsFromEclipseProject(model.id, false);

起初我会将 collectBindings 设置为 true。但是对于某些项目,我收到堆栈溢出错误。这可能是因为我使用 Luna eclipse,但这让我想知道集合绑定(bind)的作用是什么?

我试图查找它,但我找不到任何文档(也许我的谷歌技能不好)。我还尝试在同一个项目上使用不同的集合绑定(bind)设置运行它并进行比较,但我真的看不到任何东西。

有人可以向我解释一下集合绑定(bind)的作用,以及您为什么(不)使用它吗?

谢谢!!!

最佳答案

CollectBindings 在解析 Java 代码之后还做了另一个步骤,即解析代码中可能出现的所有名称和类型。然后从 Java 编译器收集此信息并直接存储到 Rascal AST 中。

因此,如果您需要精确的限定名称或表达式和变量的类型,则应将 collectBindings 设置为 true。例如在这段代码中:

int a = 0;
int b = a + a;

如果没有 resolveBindings,AST 中 a 的两次使用将不会通过 @decl 注释指向声明 |java+variable:///something/a| 并且他们不会通过 @typ 注释知道它们是 int()。甚至 int a 声明本身也不知道它的限定名或类型。

您看到的 StackOverFlowError 已由 github 上的 josvr 报告:https://github.com/cwi-swat/rascal/issues/735 .它是由 JDT Java 编译器中的语义变化引起的(可能是错误,也可能是其他原因)。

如果您现在遇到困难,我建议您返回 Keppler。

关于abstract-syntax-tree - Rascal:创建 AST 中的 bool collectBindings 是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27397593/

相关文章:

java - Eclipse JDT IJavaProject 获取根文件

rascal - Rascal可以在方法中返回操作系统吗?

java - Rascal 从 java 应用程序访问 REPL

parsing - 如何让 ANTLR 输出分层 AST?

java - 从 AST 获取方法调用信息

javascript - 如何以编程方式更改 CSS 以限制其范围?

java - 即使使用K_COMPILATION_UNIT和BindingRecovery,Eclipse AST方法resolveTypeBinding也始终为空

rascal - 获取字符串形式的类和方法的名称

rascal - Java 1.5 语法无法构建

rascal - 解析、匹配和关键字