创建AST会在流氓中创建堆栈溢出错误

时间:2015-11-09 19:19:45

标签: 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("StackOverflowError","")

我也尝试用createAstFromEclipseProject('project://project-location')来做,但这导致了同样的错误。

我该如何防止这种情况?

修改 对不起,但您的建议似乎都没有帮助。它仍然会引发Stackoverflow错误。

|plugin://rascal/src/org/rascalmpl/library/lang/java/m3/AST.rsc|(7496,375,<201,0>,<208,99>): Java("StackOverflowError","") 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>))

我也将筹码增加到128米而没有任何结果。

1 个答案:

答案 0 :(得分:2)

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

有关collectBindings的详细信息(来自Jurgen)here