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

c8a0de30cb8c772c5f97f81a9abff930.ppt

  • Количество слайдов: 28

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

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

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

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

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

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

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

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

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

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

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

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

Semanti. C++: Пример класса СП (сокращено) class COMPOUND_STATEMENT : STATEMENT, i. SCOPE { // Semanti. C++: Пример класса СП (сокращено) class COMPOUND_STATEMENT : STATEMENT, i. SCOPE { // Structure public LIST statements; public LIST declarations; // Creation protected COMPOUND_STATEMENT(). . . public static COMPOUND_STATEMENT create(). . . // Opening public static COMPOUND_STATEMENT open ( i. Source source, i. SCOPE 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 is. Valid, is. Checked, is. Generated; } 11

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

Semanti. C++: Пример AAST (фрагмент) class C { … }; float f(const char* s) Semanti. C++: Пример AAST (фрагмент) class C { … }; float f(const char* s) { C c(s); return c. m; } CLASS_DECL “C” CLASS_BODY FUNC_DECL … FUNC_BODY “f” VAR_DECL FLOAT “c” CLASS RET_STMT PARAMS ID MEMB_SELEC ID ID • Структурные связи PARM_DECL “s” PTR • Информация о типах CONST CHAR • Атрибуты 13

Semanti. C++: Пример AAST (фрагмент) class C { … }; float f(const char* s) Semanti. C++: Пример AAST (фрагмент) class C { … }; float f(const char* s) { C c(s); return c. m; } CLASS_DECL “C” CLASS_BODY FUNC_DECL … FUNC_BODY “f” VAR_DECL FLOAT “c” CLASS RET_STMT PARAMS ID MEMB_SELEC ID ID • Семантические связи PARM_DECL “s” PTR • Области действия CONST CHAR 14

Semanti. C++: Пример AAST (фрагмент) class C { … }; float f(const char* s) Semanti. C++: Пример AAST (фрагмент) class C { … }; float f(const char* s) { C c(s); return c. m; } CLASS_DECL “C” CLASS_BODY FUNC_DECL … FUNC_BODY “f” VAR_DECL FLOAT “c” CLASS ID RET_STMT PARAMS MEMB_SELEC ID DTOR_CALL ID • Скрытая семантика PARM_DECL “s” PTR CONST ID CHAR 15

Semanti. C++: Пример использования using Semantic; . . . class Example { static void Semanti. C++: Пример использования using Semantic; . . . class Example { static void Main() { NAMESPACE_DECL ns = NAMESPACE_DECL. create(IDENT. create("N")); FUNCTION_DECL fun = FUNCTION_DECL. open(new File. Source("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 Text. Source(source), ns); if (ns. validate()) ns. execute(); // } } 16

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

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

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

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

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

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

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

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

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

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