2014-02-28 2 views
1

유형을 http://tutor.rascal-mpl.org/Rascal/Libraries/analysis/m3/Core/modifiers/modifiers.html#/Rascal/Libraries/lang/java/m3/AST/Declaration/Declaration.html에있는 \ int()로 초기화하려고 시도하면 rascal에서 "예상 유형이지만 TypeSymbol을 가져 왔습니다"라는 오류가 발생합니다.int() 유형을 초기화하는 방법?

Type inttype = \int(); 

) (INT를 \하는 유형의 변수를 초기화하는 적절한 방법은 무엇입니까 :

이 내가 사용하는 코드는?

Type myIntType = Type::\int();

자세한 설명은 다음과 같습니다

답변

2

당신이 쓸 수있는 문제를 해결하기 위해 찾고있는 생각하는 TypeSymbol입니다. \int() 생성자는 다른 장소에서 두 번 이상 정의 :

  • Declarations에 사용되는 자바 타입의 추상 구문 트리의 정의에서. 소스 코드에서 int이라는 표현입니다.
  • java :: lang :: m3 :: Core의 TypeSymbol 정의에 있습니다. 여기 \int()은 상징적 인 유형을 나타냅니다.

그들은 동일한 개념이지만 다른 표현을 나타 내기 때문에 이름이 같습니다. 첫 번째는 소스 코드의 직접적인 표현을 위해 사용되고, 두 번째는 추상적 인 기호 해석을 위해 사용됩니다.

두 표현을 구별하려면 AST 노드를 정의하는 모듈을 가져 오거나 TypeSymbols를 정의하는 모듈을 가져와야합니다. 당신은 모두가 가져온 일이 있다면, 당신은 명시 적으로 표현을 선택해야합니다 :

Type myIntType = Type::\int(); TypeSymbol mySymbol = TypeSymbol::\int();

그래서 결국 오류 메시지를 설명하기 위해, 시스템은 \의 INT의 두 번째 종류의()`TypeSymbol에 값을 구축하기를 선택했다 , 그리고 그것을 첫 번째 변수의 변수에 할당하려고했습니다.

2

\int() 난 당신이

Type inttype = int(); 
+0

오류가 발생하지 않고 그 행만 실패합니다. – Kebabbi

+0

'int'가 이스케이프되어야하는 예약 키워드이기 때문에 라인이 실패합니다 :'\ int()' – jurgenv