1 / 43

Компилятор ETH Zonnon для .NET

Компилятор ETH Zonnon для .NET. Compiler Project. По материалам презентации Е.А. Зуева. Москва, 2003. Язык Zonnon. Авторы Jürg Gutknecht, ETH Zürich Евгений Зуев, ETH Zürich

dannon
Download Presentation

Компилятор ETH Zonnon для .NET

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. Компилятор ETH Zonnonдля .NET Compiler Project По материалам презентации Е.А. Зуева. Москва, 2003

  2. Язык Zonnon • Авторы • Jürg Gutknecht, ETH Zürich • Евгений Зуев, ETH Zürich • Первый компилятор с языка Zonnon для платформы .NET реализован в Швейцарском федеральном технологическом институте Евгением Зуевым

  3. План • Проблемы исследовательских языков и компиляторов • Компилятор ETH Zonnon • Технология CCI • Интеграция в VS

  4. Исследовательские языкина платформе .NET По материалам презентации Nick Benton, Microsoft Research, Cambridge UK

  5. Языки программирования • C, C++, Visual Basic, Java, JScript, Perl, Cobol,... подходят для большинства коммерческих и индустриальных проектов • Но содержат в себе только часть существующих разработок в области языков программирования

  6. Проблема • Для разработчиков языков программирования • Большой объем работы, которую нужно выполнить для реализации компилятора для нового язык. Большая часть которой не является специфичной для него как: • Сборка мусора • Многопоточность • Линковка • Среда разработки • Машинно-зависимые оптимизации • И если вы хотите что-либо делать на новом языке, то вам нужно реализовать богатую стандартную библиотеку

  7. Проблема • Для разработчиков • Библиотеки и межъязыковое взаимодействие в исследовательских компиляторах никогда не бывают достаточно хороши.Склеивание нового кода со старым приводит • Созданию автоконвертаторов • Общее низкоуровневое представление • … • В итоге считается что лучше всё писать на C++ • Среда разработки также редко бывает сильно продвинутой.

  8. Решение • .NET Common Language Runtime предоставляет богатый набор сервисов для разработчиков компиляторов • Таким образом становится гораздо проще создать работающую систему с хорошей производительностью • Предоставляет естественную систему типов,менеджер памяти, загрузчик, и т.д. упрощая межъязыковое взаимодействие • Вы можете обращаться к широко используемым библиотекам и компонентам приложений написанным на других языках напрямую

  9. Исследовательские языки и платформа .NET • Microsoft работает с ведущими исследователями в области языков программирования по всему миру • Перенцацеливание их любимых языков на платформу .NET • Демонстрация межъязыкового взаимодействия

  10. Haskell Oz Caml Mercury Standard ML Component Pascal Lightning Oberon Lightning Oberon Scheme Eiffel

  11. Компилятор Zonnon для .NET По материалам презентации Е.А. Зуева. Москва, 2003

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

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

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

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

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

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

  18. Проекции 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: D_i { 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; } };

  19. Проекции 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 }} Проекцияс базовым классом

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

  21. Технология: пакет CCI. По материалам презентации Е.А. Зуева. Москва, 2003

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

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

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

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

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

  27. IR: промежуточное представление Часть дерева наследования IR 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

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

  29. IR: промежуточное представление Пример: класс 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 ...

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

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

  32. Работа с 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-узел */ } } } Метод-“диспетчер” Семантическая обработка узла

  33. Обработка 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’ов

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

  35. Интеграция в VS. По материалам презентации Е.А. Зуева. Москва, 2003

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

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

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

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

  40. Резюме По материалам NET Crash Course, MSR Cambridge UK, March 2002

  41. CCI Lex&YACC • Handling compilerparameters & options supports -- • Source Code Reading supports -- • Lexical Analysis --supports • Syntax Analysis --supports • Symbol Table partially supports -- • Name Look-Up -- -- • Program Tree supports -- • Semantic Analysis-- -- • Code Optimization -- (not necessary) -- • Code Generation supports -- • Error Handling supports -- • Integration into an supports for VS --Environment

  42. CCI: текущее состояние и статус • Реализован почти полностью;не отлажен; не документирован. • 12 июня 2003 CCI Toolkit былвключенв MSDN Academic Alliance. • Компилятор Zonnon – первый опыт использования CCI за пределами Microsoft.

  43. Анонс • Лабораторная работа«программирование встраиваемых систем» Compiler Project

More Related