Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Компиляторы обрабатывают код, который вы пишете по структурированным правилам, которые часто отличаются от того, как люди осмысливают и читают код. Базовое понимание модели, используемой компиляторами, важно для понимания API, используемых при создании средств на основе Roslyn.
Функциональные области конвейера компилятора
Пакет SDK платформы компилятора .NET предоставляет вам доступ к анализу кода компиляторов C# и Visual Basic путем предоставления слоя API, который имитирует традиционный поток компилятора.
Каждый этап этого конвейера является отдельным компонентом. Во-первых, на этапе анализа исходный текст разбивается на токены и синтаксис, который соответствует грамматике языка. Во-вторых, этап объявления анализирует исходные и импортированные метаданные для формирования именованных символов. Затем этап привязки сопоставляет идентификаторы в коде с символами. Наконец, этап выдачи выдает сборку со всеми сведениями, созданными компилятором.
В соответствии с каждым из этих этапов пакет SDK платформы компилятора .NET предоставляет объектную модель, которая позволяет получить доступ к данным на этом этапе. Этап синтаксического анализа предоставляет дерево синтаксиса, этап объявления предоставляет иерархическую таблицу символов, этап привязки предоставляет результат семантического анализа компилятора, а этап выдачи — ЭТО API, который создает коды байтов IL.
Каждый компилятор объединяет эти компоненты как единое комплексное целое.
Эти API являются теми же, которые используются Visual Studio. Например, функции структурирования кода и форматирования используют синтаксические деревья, браузер объектов и функции навигации, использующие таблицу символов, рефакторинг и переход к определению , используют семантику модели, а также "Изменить и продолжить " используют все эти элементы, включая API отправки.
Уровни API
Пакет SDK компилятора .NET состоит из нескольких уровней API: API компилятора, диагностические API, API скриптов и API рабочих областей.
API компилятора
Слой компилятора содержит объектные модели, соответствующие сведениям, предоставляемым на каждом этапе конвейера компилятора, как синтаксическим, так и семантичным. Слой компилятора также содержит неизменяемый моментальный снимок одного вызова компилятора, включая ссылки на сборки, параметры компилятора и файлы исходного кода. Существует два разных API, представляющих язык C# и язык Visual Basic. Два API похожи в форме, но адаптированы для высокой точности для каждого отдельного языка. Этот слой не имеет зависимостей от компонентов Visual Studio.
API диагностики
В рамках анализа компилятор может создать набор диагностики, охватывающий все от синтаксиса, семантики и определенных ошибок назначения до различных предупреждений и информационной диагностики. Уровень API компилятора предоставляет диагностику через расширяемый API, который позволяет пользовательским анализаторам подключаться к процессу компиляции. Он позволяет создавать пользовательские диагностические данные, создаваемые такими инструментами, как StyleCop, наряду с диагностикой, определяемой компилятором. Создание диагностики таким образом имеет преимущество естественной интеграции с такими инструментами, как MSBuild и Visual Studio, которые зависят от диагностики для возможностей, таких как остановка сборки на основе политики, отображение живых ошибок в редакторе и предложение исправлений кода.
API-интерфейсы сценариев
API хостинга и скриптинга создаются на базе слоя компилятора. Сценарные API можно использовать для выполнения фрагментов кода и накопления контекста выполнения. Интерактивный rePL C# (цикл чтенияEvaluate-Print) использует эти API. REPL позволяет использовать C# в качестве языка сценариев, выполняя код в интерактивном режиме при написании.
API рабочих областей
Уровень рабочих областей содержит API рабочей области, который является отправной точкой для анализа кода и рефакторинга во всех решениях. Он помогает упорядочить все сведения о проектах в решении в одной объектной модели, предоставляя прямой доступ к объектным моделям уровня компилятора, не требуя анализа файлов, настройки параметров или управления зависимостями проекта в проект.
Кроме того, слой рабочих областей предоставляет набор API, используемых при реализации инструментов анализа и рефакторинга кода, которые функционируют в хост-окружении, например, в интегрированной среде разработки (IDE) Visual Studio. Примерами являются API поиска всех ссылок, форматирования и создания кода.
Этот слой не имеет зависимостей от компонентов Visual Studio.