2014-12-10 5 views
3

불량배에 AST를 작성하는 것에 대한 질문이 있습니다. 나는 일반적으로 다음을 수행하십시오불량배 : AST 작성시 bool collectBindings는 무엇을합니까?

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

을 처음에는 true로 collectBindings을 설정합니다에서. 하지만 일부 프로젝트에 대해 스택 오버플로 오류가 발생합니다. 루나 이클립스를 사용하기 때문에 이것이 가능할 수 있지만 콜렉션 바인딩이하는 일이 무엇인지 궁금합니다.

나는 그것을 보려고했지만 어떤 문서 (어쩌면 내 Google 기술이 좋지 않음)를 찾을 수 없었습니다. 나는 또한 컬렉션 바인딩 및 비교를위한 다른 설정으로 같은 프로젝트에서 실행하려고했지만 정말 아무것도 볼 수 없습니다.

누군가가 콜렉션 바인딩이하는 일을 설명 할 수 있습니까? 왜 사용하지 않을까요?

감사합니다 !!!

답변

1

CollectBindings는 코드에서 가능한 모든 이름과 유형을 분석하는 Java 코드를 구문 분석 한 후 다른 단계를 수행합니다. 이 정보는 Java 컴파일러에서 수집되어 Rascal AST에 직접 저장됩니다.

정확한 정규화 된 이름이나 표현식 및 변수 유형이 필요한 경우 collectBindingstrue으로 설정해야합니다. 이 코드의 예를 들면 다음과 같습니다

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

는 resolveBindings없이 AST의 a의 두 가지 용도 |java+variable:///something/a|을 말하는 @decl 주석을 통해 선언 가리 키지 것입니다 그리고 그들은 그들이 @typ 주석을 통해 int() 알고하지 않을 것입니다. 심지어 int a 선언 자체도 규정 된 이름이나 유형을 알 수 없습니다.

StackOverFlowError이 githubos에서 josvr : https://github.com/cwi-swat/rascal/issues/735으로보고되었습니다. 이것은 JDT Java 컴파일러의 의미 변경으로 발생합니다 (버그 일 수도 있고 다른 것일 수도 있음).

지금 당황한 사람은 케플러로 돌아가는 것이 좋습니다.