'

Компилятор языка Zonnon: архитектура, интеграция, технология

Понравилась презентация – покажи это...





Слайд 0

Компилятор языка Zonnon: архитектура, интеграция, технология Научно-практическая конференция по программированию Москва, 15-17 июня 2003 Евгений Зуев, Institute for Computer Systems, ETH Zurich zueff@inf.ethz.ch www.inf.ethz.ch/~zueff/


Слайд 1

Содержание Задачи проекта. Компилятор Zonnon для .NET. Технология: пакет CCI. Интеграция в VS. Скриншоты и/или демонстрация. 2


Слайд 2

Задачи проекта Реализовать базовую версию компилятора для платформы Microsoft .NET: - подмножество входного языка; - генерация MSIL-кода в полном формате; - режим командной строки. Обеспечить полную интеграцию компилятора со средой разработки MS Visual Studio .NET: - текстовый редактор; - фоновая компиляция; - управление проектами; - отладчик etc. Выполнить “раскрутку” (bootstrapping) полного компилятора на языке Zonnon. Ноябрь 2002 Середина 2003 ? 3


Слайд 3

Компилятор Zonnon Реализован для платформы .NET Генерирует стандартную сборку (Assembly) Реализован с использованием пакета CCI Интегрирован в среду MS Visual Studio .NET Создан в ETH Zurich, Switzerland 4


Слайд 4

Компиляторы для .NET: возможные подходы Непосредственная («ручная») компиляция в MSIL/Metadata (нет примеров) или в язык ассемблера MSIL («toy compilers»). Использование «родного» для .NET языка (напр. C#) в качестве промежуточного (Eiffel) Генерация MSIL-кода средствами низкого уровня из пространств имен System.Reflection и System.Reflection.Emit (Component Pascal, авт. John Gough; Oberon.NET) Высокоуровневая поддержка - CCI: построение дерева программы с (полу)автоматической генерацией IL+MD (ASML, Zonnon for .NET). 5


Слайд 5

Модель компиляции Zonnon (1) 6


Слайд 6

Модель компиляции Zonnon (2) IR (AST) Zonnon AST CCI’s AST Scanner & Parser Visitors Проекции Реализуется семантическая специфика Zonnon; Выполняется сериализация «интерфейсной» части AST для последующей статической комплексации в собственных терминах языка Проекции (mappings): отображение специфических свойств Zonnon на семантически эквивалентные структуры .NET 7


Слайд 7

Проекции Zonnon -> .NET ? DEFINITION абстрактный интерфейс; interface ? IMPLEMENTATION реализация интерфейса по умолчанию; единица агрегации; class ? OBJECT шаблон (класс), реализующий интерфейс; возможно, «активный» объект; sealed class ? MODULE контейнер ресурсов; класс, управляемый системой; class with static members 8


Слайд 8

DEFINITION D; TYPE e = (a, b); VAR x: T; PROCEDURE f (t:T); PROCEDURE g ():T; END D; interface D_i { T x { get; set; } void f(T t); T g (); }; C# IMPLEMENTATION D; VAR y: T; PROCEDURE f (t: T); BEGIN x := t; y := t END f; END D; public class D_c: D_b { T y;   void f(T t) { x_b = t; y = t; } }; internal class D_b { private T x_b; public enum e = (a, b); public T x { get { return x_b }; set { x_b = ... }}}; Проекции Zonnon->.NET: Definitions & Implementations Zonnon 9


Слайд 9

C# Проекции Zonnon->.NET: Objects Zonnon OBJECT X IMPLEMENTS D; IMPORT D; VAR y : T; PROCEDURE g (): T IMPLEMENTS D.g; BEGIN y := D.x; RETURN D.y END g; END X; public sealed class X: D_I { D_c d; T y; public override T g() { y = d.x; return d.y; } } public sealed class X: D_i, D_c d; { T y; public override T g() { y = x_b; return y_b }} Проекция с отдельным helper-классом Проекция с базовым классом 10


Слайд 10

C# Проекции Zonnon->.NET: Active Objects Zonnon 11


Слайд 11

CCI: Основа Zonnon-компилятора CCI = Common Compiler Infrastructure. CCI – набор ресурсов (классов), предоставля-ющих поддержку реализации компиляторов и других языковых инструментов для .NET ? Реализация компиляторов; ? Интеграция компиляторов. Концептуально, CCI является частью .NET Framework SDK. Спроектирован и реализован в Microsoft; автор - Herman Venter. 12


Слайд 12

CCI: сценарии использования Интеграция в VS.NET существующих (“не-CCI”) компиляторов. Интеграция в VS.NET компиляторов, полностью реализованных на основе CCI Расширение существующих .NET-языков и компиляторов (C#, VB etc.). Создание процессоров для посткомпиляционной обработки. Учебные компиляторы! 13


Слайд 13

CCI: Три проблемы (Общая) Разработка компилятора – непростая задача; интеграция компилятора в среду программирования – целый спектр дополнительных проблем. (CCI) CCI реализует существенно отличный от традиционного подход к процессу компиляции. (Техническая) CCI имеет объемный и нетривиальный интерфейс, набор правил и «контрактов». 14


Слайд 14

Общие принципы использования CCI ? Все сервисы CCI представлены в виде классов. Чтобы воспользоваться этими сервисами, необходимо определить собственные классы, производные от классов CCI. ? В производных классах необходимо обеспечить реализацию некоторых абстрактных методов классов-прототипов (они образуют «унифици-рованный интерфейс» с окружением). ? Производные классы содержат функциональ-ность, реализующую собственную семантику компилятора. 15


Слайд 15

Компоненты CCI Intermediate Representation (IR) – Развитая иерархия C#-классов, представляющих наиболее общие и типичные понятия современных ЯП Поддержка интеграции – Совокупность классов и методов, обеспечивающих интеграцию в среду Visual Studio (дополнительная функцио-нальность для редактирования, отладки, фоновой компиляции etc.) Преобразователи (“Visitors”) – Набор классов, реализующих последовательные преобразования IR ? MSIL System.Compiler.dll System.Compiler.Framework.dll 16


Слайд 16

IR: промежуточное представление (1) Node Node Expression Member UnaryExpression TypeNode BinaryExpression Class NaryExpression DelegateNode MethodCall EnumNode Indexer Interface AssignmentExpression . . . Literal TypeParameter Parameter Pointer This Reference Statement Event AssignmentStatement Method If InstanceInitializer For StaticInitializer ForEach Field Continue Property ExpressionStatement Namespace VariableDeclaration CompilationUnit Часть дерева наследования IR 17


Слайд 17

IR: промежуточное представление (2) Характеристики IR: ? Весьма прямолинейный подход. ? IR почти полностью повторяет иерархию понятий языка C#. ? Включает поддержку некоторых языковых черт, отсутствующих в C#. ? Поддерживает некоторые будущие свойства C# (напр., generics). ? Вывод: архитектура IR достаточна для представления широкого спектра языков с традиционной парадигмой. 18


Слайд 18

IR: промежуточное представление (3) public class C { public int m1; public void f ( ) { m1 = 0; } } Class Members Field Method Name Name ... Flags Type Identifier Identifier Int32 Name Flags Type Body Identifier Void Block ... Statements Assignment- Statement … … ... ... Пример: класс C# 19


Слайд 19

Система трансформаций IR в CCI …готовя дерево к сериализации (генерации IL+MD). …разрешая случаи совместного использования (overloading) and вычисляя типы выражений; …выполняя семантические проверки; …заменяя узлы Identifier ссылками на сущности, которые обозначает идентификатор; Каждый Visitor обходит дерево IR… Можно модифицировать стандартные Visitor’ы и/или Написать собственные 20


Слайд 20

Организация синтаксического анализа using System.Compiler; namespace ZLanguageCompiler { public sealed class ZParser : System.Compiler.Parser { public … ParseCompilationUnit(...) public … ParseExpression(...) public … ParseStatements(...) . . . private … ParseZModule(...) private … ParseZStatements(...) . . . } } Прототип анализатора: абстрактный класс CCI “Унифицированный интерфейс” парсера: реализует интерфейс между компилятором и окружением Собственная логика Z-парсера Вызовы 21


Слайд 21

Работа с IR: расширение Visitor’ов using System.Compiler; namespace ZLanguageCompiler { public sealed class ZLooker : System.Compiler.Looker { public override Node Visit ( Node node ) { switch ( node.NodeType ) { case ZNodeType.NewStmt: return this.VisitNewStmt((NewStmt)node); default: return base.Visit(node); } } public Node VisitNewStmt ( NewStmt node ) { /* Преобразование NewStmt в некоторый CCI-узел */ } } } Пример расширения Looker’а Visitor-прототип: абстрактный класс CCI Метод-“диспетчер” Семантическая обработка узла 22


Слайд 22

Обработка IR: Активация Visitor’ов public class ZCompiler : System.Compiler.Compiler, ... { . . . protected override void Compile ( CompilationUnit cu, Class globalScope, ErrorNodeList errors ) { // Разрешение имен (new ZLooker(globalScope)).VisitCompilationUnit(cu); // Разрешение совм.использования и вычисление типов (new ZResolver()).VisitCompilationUnit(cu); // Семантические проверки; «исправление» дерева (new ZChecker(errors)).VisitCompilationUnit(cu); // Редукция дерева до узлов с предопред.отображением в MD+IL (new Normalizer().VisitCompilationUnit(cu); } . . . } Общая схема работы с IR Прототип компилятора: абстрактный класс CCI Типы узлов IR Запуск Visitor’ов 23


Слайд 23

Архитектура компилятора: традиционный подход Compiler Start Up Compiler End Up Компилятор Лексич. анализ Синт. & семантич. анализ Генера-ция кода Посл-ть лексем Дерево прогр. Исход. текст Объект- ный код Имя исход. файла Пар-ры компиляции Диагностические сообщения Файл с объектным кодом Окружение Компилятор как “черный ящик” 24


Слайд 24

Что подразумевается под интеграцией? Компоненты среды Visual Studio Менеджер проектов Текстовый редактор Семантическая поддержка (“Intellisense”) Отладчик Синтаксическая подсветка Автоматическое форматирование; структурн. проход по тексту {?} Синтаксические проверки на фоне ввода текста «Плавающая» диагностика Вывод «содержимого» составного типа для переменной этого типа Вывод списка совместно-исполь- зуемых методов Вывод списка параметров Поведение, которое должен поддерживать компилятор Вычисление выражений Условные точки останова Запуск компиляции и сборка проектов 25


Слайд 25

Что подразумевается под интеграцией? Пример “Intellisense” 26


Слайд 26

Архитектура CCI-компилятора (1) Лексич. анализ Синт. & семантич. анализ Генера-ция кода Компилятор Окружение Document Исходный текст Контекст Token Token Лексема Атрибуты Контекст Компилятор как коллекция ресурсов 27


Слайд 27

Архитектура CCI-компилятора (2) Лексич. анализ Синт. & семантич. анализ Генера-ция кода Окружение Document Исходный текст Контекст Token Token Лексема Атрибуты Контекст Объектный код (Assembly) Редактор Отладчик Менеджер проектов “Intellisense” Компилятор как набор объектов 28


Слайд 28

Архитектура CCI-компилятора (3) Лексический анализ Синтаксический & семантический анализ Получить лексему Получить лексему с доп. атрибутами Компилировать программный модуль Компилировать выражение Компилировать посл-ть операторов . . . Фаза компляции Прогр. модули 29


Слайд 29

CCI: текущее состояние и статус Реализован почти полностью (неполная поддержка процесса отладки); не отлажен; не документирован. 12 июня 2003 CCI Toolkit был включен в MSDN Academic Alliance (инициатива для образовательных учреждений компьютерного профиля): www.msdnaa.net/cci Компилятор Zonnon – первый опыт использования CCI за пределами Microsoft. 30


Слайд 30

Интеграция Zonnon-компилятора в VS (1) (Вместо демонстрации ?) 31


Слайд 31

Интеграция Zonnon-компилятора в VS (2) (Вместо демонстрации ?) 32


Слайд 32

Интеграция Zonnon-компилятора в VS (3) (Вместо демонстрации ?) 33


Слайд 33

Интеграция Zonnon-компилятора в VS (4) (Вместо демонстрации ?) 34


×

HTML:





Ссылка: