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

Презентация:



Advertisements
Похожие презентации
Перегрузка операторов x = a + b результат 1-й операнд2-й операнд оператор По количеству операндов операторы делятся на: унарные (один операнд) бинарные.
Advertisements

Обработка исключительных ситуаций Исключительная ситуация (исключение) – это ошибка, возникающая во время выполнения программы. Например, ошибка работы.
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук.
1 Диаграммы реализации (implementation diagrams).
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
WEB- ТЕХНОЛОГИИ Лекция 4. Задача преобразования XML- данных 1 Задача преобразования Для передачи данных между разными приложениями необходимо преобразовать.
Полиморфизм Полиморфизм (polymorphism) - последний из трех "китов", на которых держится объектно-ориентированное программирование Слово это можно перевести.
Кафедра ОСУ, Java 2004 Слайд 1 Наследование Наследование позволяет использовать существующий класс для определения новых классов, т.е. способствует.
ДЕЛЕГАТЫ Лекция 7 1. Зачем нужны делегаты 2 И данные, и код располагаются в памяти компьютера по определенным адресам. Передача адресов данных в C# происходит.
Лекция 3. Введение в C++ Примеры взяты из книги Брюса Эккеля Думаем на С++
Алгоритмизация и программирование. Языки программирования высокого уровня. Технологии программирования Алгоритмизация и программирование. Языки программирования.
Объектно-ориентированное программирование С++. Лекция 6 Карпов В.Э.
Объектно-ориентированный анализ и дизайн Copyright © Мухортов В. В., Няньчук-Татарский Н. А., Copyright © ООО «Интекс»,
1 ©Павловская Т.А. Язык С# Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Прикладное программирование кафедра прикладной и компьютерной оптики Полиморфизм.
САОД кафедра ОСУ 1 Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач ВУ.
Методология объектно- ориентированного программирования.
Транксрипт:

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

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

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

Аналогичные проекты 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

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

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

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

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

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

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

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

SemantiC++: Диаграмма наследования классов (фрагмент) ENTITY EXPRESSION PRIMARY POSTFIX_EXPRESSION... UNARY_EXPRESSION... STATEMENT EXPRESSION_STATEMENT COMPOUND_STATEMENT TRY_BLOCK SELECTION_STATEMENT TYPE FUNDAMENTAL... MODIFIER POINTER... FUNCTION CLASS... (Отступы обозначают наследование) 10

SemantiC++: Пример класса СП (сокращено) 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

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

SemantiC++: Пример 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 Структурные связи Информация о типах Атрибуты 13

SemantiC++: Пример 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 class C { … }; float f(const char* s) { C c(s); return c.m; } Семантические связи Области действия 14

SemantiC++: Пример 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 DTOR_CALL ID Скрытая семантика 15

SemantiC++: Пример использования 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

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

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

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

Результат преобразования: XML, HTML, C++, UML, DOC, … Определение преобразований СП: Шаблоны XSLT Семантика C++ и XML-технологии (отступление) Семантическое представление программы: XML Определение формата СП: XML Schema Валидация «Каноническое» определение С++ Определение преобразований СП: Шаблоны XSLT Оптимизация Рефакторинг Конвертация... Результат преобразования: XML, HTML, C++, UML, DOC, … HTML-броузер Компилятор С++ UML Tool … 20

Пример СП в XML-формате (упрощено)... x... P... while... { x =...; P(...); } 21

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

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

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

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

Контакты & информация Блог: Веб-сайт: Фирма: 26