创建 AST 会在 rascal 中创建一个 stackoverflow 错误

Creating AST's creates a stackoverflow error within rascal

我试图从我的大项目(大约 300k LOC)中创建一个 AST。我是通过以下方式做到的:

for( file <- files(project)){

        map[Statement,map[str, list[int]]] duplicate = codeDuplicateMap(createAstFromFile(file, true)); 
        for(dup <- duplicate) {

            if(dup in dups) {
                dups[dup] = dups[dup] + duplicate[dup];
            } else {
                dups[dup] = duplicate[dup];
            }

        }

    }

其中 project 是 M3 项目模型,但我不断得到 |plugin://rascal/src/org/rascalmpl/library/lang/java/m3/AST.rsc|(7496,375,<201,0>,<208,99>): Java("WhosebugError","")

我也尝试用 createAstFromEclipseProject('project://project-location') 做到这一点,但结果是同样的错误。

我怎样才能避免这种情况?

编辑: 抱歉,您的两个建议似乎都没有帮助。它仍然会抛出 Whosebug 错误。

|plugin://rascal/src/org/rascalmpl/library/lang/java/m3/AST.rsc|(7496,375,<201,0>,<208,99>): Java("WhosebugError","") at java.util.HashMap.hash(|unknown:///HashMap.java|(0,0,<338,0>,<338,0>)) at java.util.HashMap.get(|unknown:///HashMap.java|(0,0,<556,0>,<556,0>)) at org.rascalmpl.value.type.TypeStore.lookupConstructor(|unknown:///TypeStore.java|(0,0,<485,0>,<485,0>)) at org.rascalmpl.value.type.TypeStore.lookupConstructor(|unknown:///TypeStore.java|(0,0,<547,0>,<547,0>))

我也把筹码增加到128m,也没有任何结果。

在 运行 遇到同样的问题(在我的例子中没有通过增加堆栈大小来解决)后,我发现将 collectBindings 参数设置为 false 可以防止堆栈溢出,但代价是结果 AST 中的一些信息。

可以找到有关 collectBindings 功能的详细信息(来自 Jurgen)here