Семантический интерфейс для языка Си++:Идея, архитектура, реализация презентация

Содержание

План Идея Аналогичные проекты Семантическое представление XML-представление Семантический поиск Реализация и текущее состояние 2

Слайд 1Семантический интерфейс для языка Си++: Идея, архитектура, реализация
Евгений Зуев, Интерстрон
Конференция «Разработка ПО-2010» CEE

SECR 2010 11-15 октября, Москва

Слайд 2План
Идея
Аналогичные проекты
Семантическое представление
XML-представление
Семантический поиск
Реализация и текущее состояние
2


Слайд 3Идея семантического API C++
Основная идея – предоставить разработ- чикам и программистам

мощную, гибкую и расширяемую платформу для создания широкого класса языко- ориентированных инструментов и приложений (Исследовательский аспект) Эксперимент с полным (?) разделением синтаксиса и семантики C++ (Исследовательский аспект) Эксперимент с использованием XML для представле- ния семантики C++

3


Слайд 4Аналогичные проекты
ASIS Ada Semantic Interface Specification (для Ada95): стандарт ISO SAGE - SAGE

II - ROSE (для C/C++, HPF…) Открытая инфраструктура для преобразований source-to-source Pivot (для C++) Stroustrup & Dos Reis; “Инфраструктура общего назначения для преобразования и статического анализа программ на C++” CCI (для .NET) Программная инфраструктура разработки компиля- торов для .NET (семантические преобразования)

4


Слайд 5Преимущества SemantiC++
Расширяемость Как входной язык, так и его семантическое представление являются расширяемыми

Средства семантического поиска Мощный многоцелевой механизм исследования программ (включая сравнение программ)
Независимость Включает собственную функциональность парсинга и семантического контроля; тем самым, снимается необходимость в независимом компиляторе переднего плана

5


Слайд 6Эволюция архитектуры компиляции
Компилятор
Таблицы компиляции
Исходная программа
Генератор кода
Объектный код
Традиционный монолитный компилятор
6


Слайд 7Эволюция архитектуры компиляции
Компилятор
Таблицы компиляции
Исходная программа
Генератор кода
Объектный код
Традиционный монолитный компилятор
Компилятор переднего плана
Промежу-точное представ-ление программы
Исходная программа
Генераторы кода
Визуализатор
Статический анализатор
Виртуальная машина
Многоцелевой/ многоплатформный компилятор
6


Слайд 8Эволюция архитектуры компиляции
Компилятор
Таблицы компиляции
Исходная программа
Генератор кода
Объектный код
Традиционный монолитный компилятор
Компилятор переднего плана
Промежу-точное представ-ление программы
Исходная программа
Генераторы кода
Визуализатор
Статический анализатор
Виртуальная машина
Многоцелевой/ многоплатформный компилятор
Семантическое представление
Генератор СП
Исходная программа
Фрагмент программы
UML- диаграмма
Генераторы кода
Визуализатор
Статический анализатор
Виртуальная машина
СП как

основа языко-ориентированных инструментов

6


Слайд 9SemantiC++: Общая схема
Program
Semantic
Representation
Исходная программа
Семантическое
представление
программы
Другое СП
СП в виде XML
UML- диаграммы
Интер-фейс iSource
Генераторы кода
Статические анализаторы
Инструменты инжиниринга (UML)
Визуализаторы
Верификаторы
Интерпретаторы (виртуальные машины

C++)

Оптимизаторы

Фрагмент
Исходного кода

Преобразователи

. . .

7


Слайд 10SemantiC++: Основные принципы 1
СП – это множество классов, каждый из которых

представляет некоторое понятие C++ (класс, оператор, операция, операнд)
Отношения между классами (наследование, агрегация, делегирование) отражают семантические отношения между соот- ветствующими понятиями языка
Экземпляры классов СП образуют Абстракт- ное Синтаксическое Дерево программы

8


Слайд 11SemantiC++: Основные принципы 2
Каждый класс СП – это не просто

структура (CCI): он обладает собственной функциональностью для выполнения типичных операций над AST (примеры далее)
Классы СП отражают не только синтаксич. структуру программы: в них имеются атрибуты, представ- ляющие семантические свойства соответ- ствующего понятия (“аннотированное AST”)
AST не просто соответствует исходному тексту «один к одному»: в нем явно представлена скрытая семантика С++ (вызовы деструкторов, вызовы функций-операций и другое)

9


Слайд 12SemantiC++: Диаграмма наследования классов (фрагмент)
ENTITY
EXPRESSION PRIMARY

POSTFIX_EXPRESSION ...
UNARY_EXPRESSION
... STATEMENT EXPRESSION_STATEMENT COMPOUND_STATEMENT TRY_BLOCK SELECTION_STATEMENT TYPE FUNDAMENTAL ... MODIFIER POINTER ... FUNCTION CLASS ...

(Отступы обозначают наследование)

10


Слайд 13SemantiC++: Пример класса СП (сокращено)
class COMPOUND_STATEMENT : STATEMENT, iSCOPE {

// Structure
public LIST statements; public LIST declarations; // Creation protected COMPOUND_STATEMENT() ... public static COMPOUND_STATEMENT create() ... // Opening public static COMPOUND_STATEMENT open ( iSource source, iSCOPE context )... // Validation public override bool check() ... public override bool validate() ... // Semantic search public static COMPOUND_STATEMENT pattern = COMPOUND_STATEMENT.create(); public override bool match ( ENTITY pattern ) ... // Attributes public ENTITY owner; public bool isValid, isChecked, isGenerated; }

11


Слайд 14Пример класса СП: комментарии
create(): создание узла/поддерева «с нуля» open(): общий алгоритм чтения

узла/поддерева; источники могут быть различные – в частности, исходный текст check(), validate(): проверка структурной и семантической корректности узла или поддерева match(): проверка совпадения узла с другим узлом/поддеревом pattern: общий шаблон для данного узла, который совпадает с любым составным оператором

12


Слайд 15SemantiC++: Пример AAST (фрагмент)
class C { … }; float f(const char* s) {

C c(s); return c.m; }

CLASS_DECL

“C”

CLASS_BODY

FUNC_DECL

“f”

FLOAT

FUNC_BODY

PARAMS

PARM_DECL

“s”

PTR

CONST

CHAR

VAR_DECL

RET_STMT

“c”

CLASS

ID

MEMB_SELEC


ID

ID

Структурные связи
Информация о типах
Атрибуты

13


Слайд 16SemantiC++: Пример AAST (фрагмент)
CLASS_DECL
“C”
CLASS_BODY
FUNC_DECL
“f”
FLOAT
FUNC_BODY
PARAMS
PARM_DECL
“s”
PTR
CONST
CHAR
VAR_DECL
RET_STMT
“c”
CLASS
ID
MEMB_SELEC

ID
ID



class C { … }; float f(const char* s) {

C c(s); return c.m; }


Семантические связи
Области действия





14


Слайд 17SemantiC++: Пример AAST (фрагмент)
class C { … }; float f(const char* s) {

C c(s); return c.m; }

CLASS_DECL

“C”

CLASS_BODY

FUNC_DECL

“f”

FLOAT

FUNC_BODY

PARAMS

PARM_DECL

“s”

PTR

CONST

CHAR

VAR_DECL

RET_STMT

“c”

CLASS

ID

MEMB_SELEC


ID

ID

DTOR_CALL

ID


Скрытая семантика

15


Слайд 18SemantiC++: Пример использования
using Semantic;
...
class Example {
static void Main() {

NAMESPACE_DECL ns = NAMESPACE_DECL.create(IDENT.create("N")); FUNCTION_DECL fun = FUNCTION_DECL.open(new FileSource("file-name"),ns);
if ( fun == null || !fun.validate() )
{ /* errors in function declaration */ } string source = "int main() { " + “ f(); " + " cout << \"Hello world!\";" + " return 0; } "; FUNCTION_DECL main = FUNCTION_DECL.open( new TextSource(source),ns);
if (ns.validate()) ns.execute(); // ☺ }
}

16


Слайд 19Двоичный и XML-форматы: две стороны семантического преставления
Семантическое представление программы


Двоичный

XML- формат формат

Оба формата полностью равноправны
Оба формата взаимо- заменяемы
Эти свойства реализуются встроенными конвер- торами Binary->XML и XML->Binary

17


Слайд 20Почему XML?
Открытый формат
Расширяемость (XML - метаязык)
В основе лежит предельно

простая модель представления
Стандарт де-факто
Большое число доступных техноло- гий (XQuery, XSLT и т.д.) и инструментов для операций над XML-форматом

18


Слайд 21Почему XML?
(Исследовательский аспект) Эксперимент с технологией XSLT: проверить ее

полезность, примени- мость (и, что еще интереснее, узнать границы ее применимости) к задачам, связанным с манипули- рованием с семантикой C++, представленной в формате XML
(Исследовательский аспект) Создать «нормативное» описание C++ в формате XML Schema

19


Слайд 22Результат преобразования: XML, HTML, C++, UML, DOC, …
Определение преобразований СП: Шаблоны XSLT
Семантика C++ и

XML-технологии (отступление)

Семантическое представление программы: XML

Определение формата СП: XML Schema

Валидация

«Каноническое» определение С++

Определение преобразований СП: Шаблоны XSLT

Оптимизация Рефакторинг Конвертация ...

Результат преобразования: XML, HTML, C++, UML, DOC, …

HTML-броузер

Компилятор С++

UML Tool


20


Слайд 23Пример СП в XML-формате (упрощено)


...



x
...


P

...




while ... { x = ...;
P(...);
}

21


Слайд 24Стандартный доступ: DOM/SAX, XSLT, XQuery
Семантическое
представление программы
в формате XML
Специа-лизиро-ванные APIs
Прикладные (клиентские) инструменты
Архитектура доступа к СП на основе XML
22


Слайд 25Семантический поиск
В основе поиска – рекурсивный алгоритм обхода дерева AST и процедуры

сопоставления с образцом. Образцы конструируются с помощью шаблонов
Для каждого узла СП предопределен собственный шаблон: например, «любой составной оператор», «любая функция», «любой класс». Шаблон может быть атрибутирован, например, «любая публичная статичес- кая функция», «любой класс из пространства имен N»
Поиск реализуется виртуальной функцией match(), определен- ной для каждого узла СП. Шаблон передается функции как параметр
Дополнительно в функцию match() можно передать «динами- ческие» условия поиска, которые нельзя заранее задать в шаблоне. Например, «найти все использующие вхождения виртуальной функции f, которые не пере- определены в производных классах».

23


Слайд 26Подход к реализации
Реализация проводится в среде .NET; основной язык - C#:

быстрое програм- мирование, простое сопровождение, надежный («managed») код
Интероперабельность: СП доступно из программ на любом языке .NET: C#, Managed C++, VB, F#, Python, Zonnon
Все компоненты СП API представлены в виде DLL-библиотек и могут быть присоединены к клиентским програм- мам стандартным способом: using xxx.dll

24


Слайд 27Текущее состояние проекта
Классы семантического представления, семантический поиск - полностью реализованы (без тестирования)

Алгоритмы парсинга, Определение XML Schema для СП - в разработке
Прикладные процессоры: (Ре)инжиниринг для UML – в разработке
Бета-тестирование – в планах…

25


Слайд 28Контакты & информация
Почта: eugene.zueff@gmail.com
Блог: www.zouev.blogspot.com
Веб-сайт: www.eugene.zouev.name
Фирма: www.interstron.ru
26


Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика