Разработка проблемно- ориентированного языка программирования Никита Дубровин группа С-104 1
Постановка задачи Цель проекта: Разработать систему учета оборудования для предприятия 2
Постановка задачи Цель работы: Повысить эффективность разработки информационной системы учета оборудования на предприятии. 3
Постановка задачи Задачи: Разработать проблемно-ориентированный язык программирования Определить требования к языку на основе анализа предметной области Выбрать основной язык программирования Реализовать проблемно-ориентированный язык на основе выбранного основного 4
Введение Современное ПО характеризуется: Сложностью разработки Высокой стоимостью поддержки Сложностью полноценного тестирования Для преодоления этих недостатков предполагается разработать специализированные для конкретной задачи языка программирования 5
Обоснование разработки ПОЯ Введение абстракций высокого уровня путем разработки заточенного под решаемую задачу языка Синтаксическая абстракция Сокрытие деталей предметной области либо задачи в семантике языка Снижение затрат на поддержку кода Предоставление стандартизированного средства расширения и настройки системы для пользователей 6
Применение ПОЯ в проекте 7
Пример модуля на ПОЯ device cpu label "DEVICE_CPU" { required string vendor_name label "LBL_VENDOR"; required string model_name label "LBL_MODEL"; required int core_number label "LBL_CORENUM"; required float frequency label "LBL_FREQ" units "UNIT_GHZ"; optional text description label "LBL_DESCRIPTION" } 8
Современное состояние ЯОП Среды разработки: JetBrains Meta Programming System openArchitectureWare Microsoft Software Factories Методики разработки ПОЯ: Model-driven development Generative programming Metalinguistic abstraction Примеры ПОЯ: LaTeX SQL BNF 9
Обоснование выбора основного ЯП В качестве основного языка был выбран язык Common Lisp Развитые возможности метапрограммирования: Прямой доступ к AST Доступ к интерпретатору в время исполнения Возможность изменять интерпретатор во время исполнения Мощная система макросов: Управление вычислением в макросе Доступ ко всем возможностям языка 10
Описание предметной области 11
Грамматика языка field-delimiter > ; list-delimiter >, block-start > { block-end > } list-start > ( list-end > ) string-literal > ¾([A-Za-z0-9˜#$%ˆ&*()_+/ ]*)¿ id > [A-Za-z][A-Za-z_]* integer-number > 0|([+]|[-])?[1-9][0-9]* float-number > ([+]|[-])?[0-9]+[.][0-9]+([Ee][0-9]+)? definition-types > definition-type field-delimiter definition-types > definition-type definition-type > device-definition > status-definition device-definition > device-description block-start field-definitions block-end 12
Грамматика языка device-definition > device-description block-start field-definitions block-end status-definition > status-description block-start field-definitions block-end device-description > device id label string-literal standalone > device id label string-literal status-description > status id label string-literal field-definitions > field-definition field-delimiter field-definitions > field-definition field-definition > requirement-specifier type-specifier id label string-literal units string-literal > requirement-specifier type-specifier id label string-literal 13
Грамматика языка requiremet-specifier > required > optional type-specifier > simple-type > complex-type complex-type > set list-start list-elements list-end >enum list-start list-elements list- end list-elements > list-element list-delimiter list-elements > list-element 14
Грамматика языка list-element > string-literal > integer-number > float-number simple-type > bool > integer > float > double > date > time > datetime > string > text 15
Ограниченность языка Возможно вынести генераторы кода в отдельный модуль Генератор SQL-кода привязан к реализации MySQL, что ограничивает переносимость. Отображение таблиц в объекты Python также рассчитан на типы данных MySQL Возможна адаптация языка для решения различных задач в рамках предметной области Для встраивания разработанного ПОЯ в программу необходимо переписать его на Scheme 16
Выводы Выбраны инструментальные средства разработки (язык Common LISP) В результате анализа предметной области были сформулированы требования к ПОЯ Разработан проблемно-ориентированный язык в соответствии со сформулированными требованиями Разработан транслятор языка 17
Разработка проблемно- ориентированного языка программирования Никита Дубровин группа С Вопросы…