구문 트리 는 소스 코드의 어휘 및 구문 구조를 나타냅니다. 이 정보만으로는 원본의 모든 선언 및 논리를 설명하기에 충분하지만 참조되는 내용을 식별하기에는 정보가 충분하지 않습니다. 이름은 다음을 나타낼 수 있습니다.
- 형식
- 필드
- a 메서드
- 지역 변수
이러한 각 항목은 고유하게 다르지만 식별자가 실제로 참조하는 식별자를 결정하려면 언어 규칙을 깊이 이해해야 하는 경우가 많습니다.
소스 코드에 표시되는 프로그램 요소가 있으며, 프로그램은 어셈블리 파일에 패키지된 이전에 컴파일된 라이브러리를 참조할 수도 있습니다. 어셈블리에는 소스 코드가 없고 구문 노드나 트리를 사용할 수 없지만 프로그램에서는 여전히 내부 요소를 참조할 수 있습니다.
이러한 작업의 경우 의미 체계 모델이 필요합니다.
소스 코드의 구문 모델 외에도 의미 체계 모델은 언어 규칙을 캡슐화하여 식별자를 참조되는 올바른 프로그램 요소와 쉽게 일치시킬 수 있습니다.
편집본
컴파일은 모든 어셈블리 참조, 컴파일러 옵션 및 소스 파일을 포함하는 C# 또는 Visual Basic 프로그램을 컴파일하는 데 필요한 모든 항목을 나타냅니다.
이 모든 정보는 한 곳에 있으므로 소스 코드에 포함된 요소를 더 자세히 설명할 수 있습니다. 컴파일은 선언된 각 형식, 멤버 또는 변수를 기호로 나타냅니다. 컴파일에는 소스 코드에서 선언되었거나 어셈블리에서 메타데이터로 가져온 기호를 찾아 관련시키는 데 도움이 되는 다양한 메서드가 포함되어 있습니다.
구문 트리와 마찬가지로 컴파일은 변경할 수 없습니다. 컴파일을 만든 후에는 사용자 또는 공유하려는 다른 사용자가 변경할 수 없습니다. 그러나 기존 컴파일에서 새 컴파일을 생성할 때 변경 사항을 지정할 수 있습니다. 예를 들어 추가 소스 파일 또는 어셈블리 참조를 포함할 수 있다는 점을 제외하고 기존 컴파일과 모든 면에서 동일한 컴파일을 만들 수 있습니다.
기호
기호는 소스 코드에서 선언하거나 어셈블리에서 메타데이터로 가져온 고유 요소를 나타냅니다. 모든 네임스페이스, 형식, 메서드, 속성, 필드, 이벤트, 매개 변수 또는 지역 변수는 기호로 표시됩니다.
Compilation 형식에 있는 다양한 메서드와 속성은 기호를 찾는 데 도움이 됩니다. 예를 들어 일반적인 메타데이터 이름으로 선언된 형식에 대한 기호를 찾을 수 있습니다. 전체 심볼 테이블에 전역 네임스페이스로부터 시작하는 심볼 트리로도 액세스할 수 있습니다.
기호에는 컴파일러가 원본 또는 메타데이터(예: 참조된 다른 기호)에서 결정하는 추가 정보도 포함됩니다. 각 종류의 기호는 각각 컴파일러가 ISymbol수집한 정보를 자세히 설명하는 고유한 메서드와 속성을 사용하여 파생된 별도의 인터페이스로 표시됩니다. 이러한 속성의 대부분은 다른 기호를 직접 참조합니다. 예를 들어 이 속성은 IMethodSymbol.ReturnType 메서드가 반환하는 실제 형식 기호를 알려줍니다.
기호는 소스 코드와 메타데이터 간에 네임스페이스, 형식 및 멤버의 일반적인 표현을 제공합니다. 예를 들어 소스 코드에서 선언된 메서드와 메타데이터에서 가져온 메서드는 모두 동일한 속성을 가진 메서드 IMethodSymbol 로 표시됩니다.
기호는 API에서 나타내는 System.Reflection CLR 형식 시스템과 개념이 유사하지만 형식보다 모델링이 더 풍부합니다. 네임스페이스, 지역 변수 및 레이블은 모두 기호입니다. 또한 기호는 CLR 개념이 아닌 언어 개념의 표현입니다. 겹치는 것이 많지만 의미 있는 차이점도 많습니다. 예를 들어 C# 또는 Visual Basic의 반복기 메서드는 단일 기호입니다. 그러나 반복기 메서드가 CLR 메타데이터로 변환될 때, 이는 하나의 형식과 여러 메서드로 구성됩니다.
의미 체계 모델
의미 체계 모델은 단일 소스 파일에 대한 모든 의미 체계 정보를 나타냅니다. 이를 사용하여 다음을 검색할 수 있습니다.
- 원본의 특정 위치에서 참조되는 기호입니다.
- 식의 결과 형식입니다.
- 모든 진단에는 오류와 경고가 포함됩니다.
- 변수가 원본 지역 내/외부로 흐르는 방식입니다.
- 더 추측적인 질문에 대한 답변.
.NET