我试图从我的大项目(大约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米而没有任何结果。
答案 0 :(得分:2)
遇到同样的问题(在我的情况下,通过增加堆栈大小没有解决),我发现将collectBindings参数设置为false
可以防止堆栈溢出,但代价是结果中的某些信息AST。
有关collectBindings的详细信息(来自Jurgen)here