1 / 34

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

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

kamali
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

  4. Visual Studio SourceCode Assembly Zonnon Compiler CCI Framework .NET Platform Компилятор Zonnon • Реализован для платформы.NET • Генерирует стандартную сборку (Assembly) • Реализован с использованием пакетаCCI • Интегрирован в средуMSVisual Studio .NET • Создан вETH Zürich, Switzerland 4

  5. Компиляторы для .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

  6. Zonnon-часть:Cпецифична для языка CCI-часть:Общая для всех языков IL/MD Writer IR(AST) Source MSIL+MD Output Assembly IL/MD Reader Visitors Scanner&Parser Imported Assemblies Модель компиляции Zonnon (1) 6

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

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

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

  10. Проекции 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; C# public sealed class X: D_I { D_c d; T y; public override T g() { y = d.x; return d.y; } } Проекция с отдельным helper-классом public sealed class X: D_i, D_c d; { T y; public override T g() { y = x_b; return y_b }} Проекцияс базовым классом 10

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

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

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

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

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

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

  17. IR: промежуточное представление (1) Node Node Expression Member UnaryExpression TypeNode BinaryExpressionClass 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

  18. Пример: publicclassIf : Statement { Expression condition; Block falseBlock; Block trueBlock; . . . } publicclassBlock : Statement { bool hasLocals; StatementList statements; . . . } IR: промежуточное представление (2) Характеристики IR: Весьма прямолинейный подход. IR почти полностью повторяет иерархию понятий языка C#. Включает поддержку некоторых языковых черт, отсутствующих в C#. Поддерживает некоторые будущие свойства C# (напр., generics). Вывод: архитектура IR достаточна для представления широкого спектра языков с традиционной парадигмой. 18

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

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

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

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

  23. Обработка IR: Активация Visitor’ов Прототипкомпилятора:абстрактный класс CCI Общая схема работы с IR publicclassZCompiler : System.Compiler.Compiler, ... { . . . protectedoverridevoid Compile ( CompilationUnit cu, Class globalScope, ErrorNodeList errors ) { // Разрешение имен (newZLooker(globalScope)).VisitCompilationUnit(cu); // Разрешение совм.использования и вычисление типов (newZResolver()).VisitCompilationUnit(cu); // Семантические проверки; «исправление» дерева (newZChecker(errors)).VisitCompilationUnit(cu); // Редукция дерева до узлов с предопред.отображением в MD+IL (newNormalizer().VisitCompilationUnit(cu); } . . . } Типы узлов IR Запуск Visitor’ов 23

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

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

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

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

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

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

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

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

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

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

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

More Related