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

Содержание

Слайд 2

Содержание

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

2

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

Слайд 3

Задачи проекта

Реализовать базовую версию компилятора для платформы Microsoft .NET: - подмножество входного языка; - генерация

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

Ноябрь 2002

Середина 2003

?

3

Слайд 4

Компилятор Zonnon

Реализован для платформы .NET
Генерирует стандартную сборку (Assembly)
Реализован с использованием пакета CCI
Интегрирован

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

4

Слайд 5

Компиляторы для .NET: возможные подходы

Непосредственная («ручная») компиляция в MSIL/Metadata (нет примеров) или в язык ассемблера

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

6

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

Слайд 7

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

IR (AST)

Zonnon
AST

CCI’s
AST

Scanner & Parser

Visitors

Проекции

Реализуется семантическая специфика Zonnon;
Выполняется сериализация «интерфейсной» части AST для последующей

Модель компиляции Zonnon (2) IR (AST) Zonnon AST CCI’s AST Scanner &
статической комплексации в собственных терминах языка

Проекции (mappings): отображение специфических свойств Zonnon на семантически эквивалентные структуры .NET

7

Слайд 8

Проекции Zonnon -> .NET

◆ DEFINITION абстрактный интерфейс; interface
◆ IMPLEMENTATION реализация интерфейса по

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

8

Слайд 9

DEFINITION D;
TYPE e = (a, b); VAR x: T;
PROCEDURE f

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

Слайд 10

C#

Проекции Zonnon->.NET: Objects

Zonnon

OBJECT X IMPLEMENTS D;
IMPORT D;
VAR y : T;

C# Проекции Zonnon->.NET: Objects Zonnon OBJECT X IMPLEMENTS D; IMPORT D; VAR
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

Слайд 11

C#

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

Zonnon

11

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

Слайд 12

CCI: Основа Zonnon-компилятора

CCI = Common Compiler Infrastructure.
CCI – набор ресурсов (классов), предоставля-ющих

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

12

Слайд 13

CCI: сценарии использования

Интеграция в VS.NET существующих (“не-CCI”) компиляторов.
Интеграция в VS.NET компиляторов, полностью реализованных

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

13

Слайд 14

CCI: Три проблемы

(Общая) Разработка компилятора – непростая задача; интеграция компилятора в среду программирования

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

14

Слайд 15

Общие принципы использования CCI

◆ Все сервисы CCI представлены в виде классов. Чтобы

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

15

Слайд 16

Компоненты CCI

Intermediate Representation (IR) –
Развитая иерархия C#-классов, представляющих наиболее общие и типичные

Компоненты CCI Intermediate Representation (IR) – Развитая иерархия C#-классов, представляющих наиболее общие
понятия современных ЯП

Поддержка интеграции –
Совокупность классов и методов, обеспечивающих интеграцию в среду Visual Studio (дополнительная функцио-нальность для редактирования, отладки, фоновой компиляции etc.)

Преобразователи (“Visitors”) –
Набор классов, реализующих последовательные преобразования IR ⇒ MSIL

System.Compiler.dll

System.Compiler.Framework.dll

16

Слайд 17

IR: промежуточное представление (1)

Node Node
Expression Member
UnaryExpression TypeNode
BinaryExpression Class
NaryExpression DelegateNode

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

IR: промежуточное представление (2)

Характеристики IR:

◆ Весьма прямолинейный подход.
◆ IR почти полностью повторяет

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

18

Слайд 19

IR: промежуточное представление (3)

public class C
{
public int m1;
public void f

IR: промежуточное представление (3) public class C { public int m1; public
( ) { 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

Слайд 20

Система трансформаций IR в CCI

…готовя дерево к сериализации (генерации IL+MD).

…разрешая случаи совместного

Система трансформаций IR в CCI …готовя дерево к сериализации (генерации IL+MD). …разрешая
использования (overloading) and вычисляя типы выражений;

…выполняя семантические проверки;

…заменяя узлы Identifier ссылками на сущности, которые обозначает идентификатор;

Каждый Visitor обходит дерево IR…

Можно модифицировать стандартные Visitor’ы и/или
Написать собственные

20

Слайд 21

Организация синтаксического анализа

using System.Compiler;
namespace ZLanguageCompiler
{
public sealed class ZParser : System.Compiler.Parser
{

Организация синтаксического анализа using System.Compiler; namespace ZLanguageCompiler { public sealed class ZParser
public … ParseCompilationUnit(...)
public … ParseExpression(...)
public … ParseStatements(...)
. . .
private … ParseZModule(...)
private … ParseZStatements(...)
. . .
}
}

Прототип анализатора: абстрактный класс CCI

“Унифицированный интерфейс” парсера: реализует интерфейс между компилятором и окружением

Собственная логика Z-парсера

Вызовы

21

Слайд 22

Работа с IR: расширение Visitor’ов

using System.Compiler;
namespace ZLanguageCompiler
{
public sealed class ZLooker :

Работа с IR: расширение Visitor’ов using System.Compiler; namespace ZLanguageCompiler { public sealed
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

Слайд 23

Обработка IR: Активация Visitor’ов

public class ZCompiler : System.Compiler.Compiler, ...
{
. . .

Обработка 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

Слайд 24

Архитектура компилятора: традиционный подход

Compiler Start Up

Compiler End Up

Компилятор

Лексич. анализ

Синт. & семантич. анализ

Генера-ция кода

Посл-ть лексем

Дерево прогр.

Исход. текст

Объект- ный код

Имя

Архитектура компилятора: традиционный подход Compiler Start Up Compiler End Up Компилятор Лексич.
исход. файла

Пар-ры компиляции

Диагностические сообщения

Файл с объектным кодом

Окружение

Компилятор как “черный ящик”

24

Слайд 25

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

Компоненты среды Visual Studio

Менеджер проектов Текстовый редактор
Семантическая поддержка (“Intellisense”)
Отладчик

Синтаксическая подсветка

Что подразумевается под интеграцией? Компоненты среды Visual Studio Менеджер проектов Текстовый редактор
Автоматическое форматирование; структурн. проход по тексту {?}
Синтаксические проверки на фоне ввода текста
«Плавающая» диагностика

Вывод «содержимого» составного типа для переменной этого типа
Вывод списка совместно-исполь- зуемых методов
Вывод списка параметров

Поведение, которое должен поддерживать компилятор

Вычисление выражений
Условные точки останова

Запуск компиляции и сборка проектов

25

Слайд 26

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

Пример “Intellisense”

26

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

Слайд 27

Архитектура CCI-компилятора (1)

Лексич. анализ

Синт. & семантич. анализ

Генера-ция кода

Компилятор

Окружение

Document

Исходный текст

Контекст

Token

Token

Лексема

Атрибуты

Контекст

Компилятор как коллекция ресурсов

27

Архитектура CCI-компилятора (1) Лексич. анализ Синт. & семантич. анализ Генера-ция кода Компилятор

Слайд 28

Архитектура CCI-компилятора (2)

Лексич. анализ

Синт. & семантич. анализ

Генера-ция кода

Окружение

Document

Исходный текст

Контекст

Token

Token

Лексема

Атрибуты

Контекст

Объектный код (Assembly)

Редактор

Отладчик

Менеджер проектов

“Intellisense”

Компилятор как набор объектов

28

Архитектура CCI-компилятора (2) Лексич. анализ Синт. & семантич. анализ Генера-ция кода Окружение

Слайд 29

Архитектура CCI-компилятора (3)

Лексический анализ

Синтаксический & семантический анализ

Получить лексему

Получить лексему с доп. атрибутами

Компилировать программный модуль

Компилировать выражение

Компилировать посл-ть

Архитектура CCI-компилятора (3) Лексический анализ Синтаксический & семантический анализ Получить лексему Получить
операторов

. . .

Фаза компляции

Прогр. модули

29

Слайд 30

CCI: текущее состояние и статус

Реализован почти полностью (неполная поддержка процесса отладки); не отлажен; не

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

30

Слайд 31

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

(Вместо демонстрации ☺)

31

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

Слайд 32

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

(Вместо демонстрации ☺)

32

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

Слайд 33

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

(Вместо демонстрации ☺)

33

Интеграция Zonnon-компилятора в VS (3) (Вместо демонстрации ☺) 33
Имя файла: Компилятор-языка-Zonnon:архитектура,-интеграция,-технология.pptx
Количество просмотров: 154
Количество скачиваний: 1