다음을 통해 공유


.NET 컴파일러 플랫폼 SDK 모델 이해

컴파일러는 사용자가 코드를 읽고 이해하는 방식과 다른 구조화된 규칙에 따라 작성하는 코드를 처리합니다. Roslyn 기반 도구를 빌드할 때 사용하는 API를 이해하려면 컴파일러에서 사용하는 모델을 기본적으로 이해해야 합니다.

컴파일러 파이프라인 기능 영역

.NET 컴파일러 플랫폼 SDK는 기존 컴파일러 파이프라인을 미러링하는 API 계층을 제공하여 C# 및 Visual Basic 컴파일러의 코드 분석을 소비자로 노출합니다.

개체 코드에 대한 소스 코드를 처리하는 컴파일러 파이프라인의 단계

이 파이프라인의 각 단계는 별도의 구성 요소입니다. 먼저 구문 분석 단계에서는 원본 텍스트를 언어 문법을 따르는 구문으로 토큰화하고 구문 분석합니다. 둘째, 선언 단계에서는 원본 및 가져온 메타데이터를 분석하여 명명된 기호를 형성합니다. 다음으로, 바인딩 단계는 코드의 식별자를 기호와 일치합니다. 마지막으로 내보내기 단계에서는 컴파일러에서 빌드한 모든 정보가 포함된 어셈블리를 내보낸다.

컴파일러 파이프라인 API는 컴파일러 파이프라인의 일부인 각 단계에 대한 액세스를 제공합니다.

이러한 각 단계에 해당하는 .NET 컴파일러 플랫폼 SDK는 해당 단계에서 정보에 액세스할 수 있는 개체 모델을 노출합니다. 구문 분석 단계는 구문 트리를 노출하고, 선언 단계는 계층 기호 테이블을 노출하고, 바인딩 단계는 컴파일러의 의미 체계 분석 결과를 노출하며, 내보내기 단계는 IL 바이트 코드를 생성하는 API입니다.

컴파일러 파이프라인의 각 단계에서 컴파일러 API에서 사용할 수 있는 언어 서비스

각 컴파일러는 이러한 구성 요소를 단일 엔드투엔드 전체로 결합합니다.

이러한 API는 Visual Studio에서 사용하는 것과 동일합니다. 예를 들어 코드 개요 및 서식 지정 기능은 구문 트리를 사용하고, 개체 브라우저 및 탐색 기능은 기호 테이블을 사용하고, 리팩터링하고, 정의로 이동 은 의미 체계 모델을 사용하고, 편집 및 계속 은 내보내기 API를 비롯한 이러한 모든 것을 사용합니다.

API 계층

.NET 컴파일러 SDK는 컴파일러 API, 진단 API, 스크립팅 API 및 작업 영역 API와 같은 여러 API 계층으로 구성됩니다.

컴파일러 API

컴파일러 계층에는 구문 및 의미 체계 모두 컴파일러 파이프라인의 각 단계에서 노출되는 정보에 해당하는 개체 모델이 포함되어 있습니다. 컴파일러 계층에는 어셈블리 참조, 컴파일러 옵션 및 소스 코드 파일을 포함하여 컴파일러의 단일 호출에 대한 변경할 수 없는 스냅샷도 포함됩니다. C# 언어와 Visual Basic 언어를 나타내는 두 개의 고유 API가 있습니다. 두 API는 모양이 비슷하지만 각 개별 언어에 대한 높은 충실도에 맞게 조정됩니다. 이 계층에는 Visual Studio 구성 요소에 대한 종속성이 없습니다.

진단 API

분석의 일환으로 컴파일러는 구문, 의미 체계 및 명확한 할당 오류부터 다양한 경고 및 정보 진단에 이르기까지 모든 것을 다루는 진단 집합을 생성할 수 있습니다. 컴파일러 API 계층은 사용자 정의 분석기를 컴파일 프로세스에 연결할 수 있는 확장 가능한 API를 통해 진단을 노출합니다. StyleCop과 같은 도구에서 생성된 진단과 같은 사용자 정의 진단을 컴파일러 정의 진단과 함께 생성할 수 있습니다. 이러한 방식으로 진단을 생성하면 정책에 따라 빌드를 중지하고 편집기에서 라이브 물결선 표시 및 코드 수정 제안과 같은 환경에 대한 진단에 의존하는 MSBuild 및 Visual Studio와 같은 도구와 자연스럽게 통합할 수 있습니다.

스크립팅 API

호스팅 및 스크립팅 API는 컴파일러 계층 위에 빌드됩니다. 스크립팅 API를 사용하여 코드 조각을 실행하고 런타임 실행 컨텍스트를 누적할 수 있습니다. C# 대화형 REPL(읽기Evaluate-Print 루프)은 이러한 API를 사용합니다. REPL을 사용하면 C#을 스크립팅 언어로 사용하여 코드를 작성할 때 대화형으로 실행할 수 있습니다.

작업 영역 API

작업 영역 계층에는 코드 분석을 수행하고 전체 솔루션에 대해 리팩터링하기 위한 시작점인 작업 영역 API가 포함되어 있습니다. 솔루션의 프로젝트에 대한 모든 정보를 단일 개체 모델로 구성하여 파일을 구문 분석하거나, 옵션을 구성하거나, 프로젝트-프로젝트 종속성을 관리할 필요 없이 컴파일러 계층 개체 모델에 직접 액세스할 수 있습니다.

또한 작업 영역 계층은 코드 분석을 구현하고 Visual Studio IDE와 같은 호스트 환경 내에서 작동하는 도구를 리팩터링할 때 사용되는 API 집합을 표시합니다. 예를 들어 모든 참조 찾기, 서식 지정 및 코드 생성 API가 있습니다.

이 계층에는 Visual Studio 구성 요소에 대한 종속성이 없습니다.