Набор инструментов для реинжиниринга программного обеспечения DMS
Разработчик(и) | Семантические конструкции |
---|---|
Лицензия | собственный |
Веб-сайт | www |
DMS Software Reengineering Toolkit — это запатентованный набор инструментов преобразования программ , доступных для автоматизации анализа, модификации, перевода или создания программных систем для произвольных смесей исходных языков для крупномасштабных программных систем. [1] Первоначально DMS была основана на теории поддержки проектов программного обеспечения под названием « Системы сопровождения дизайна». [2] DMS и Design Maintenance System являются зарегистрированными торговыми марками Semantic Designs.
Использование
[ редактировать ]DMS использовалась для реализации языков, специфичных для предметной области (например, для генерации кода для заводского управления), тестового покрытия. [3] и инструменты профилирования, обнаружение клонов , [4] инструменты миграции языка, реинжиниринг компонентов C++., [5] а также для исследования сложных тем, таких как надежный рефакторинг C++. [6]
Функции
[ редактировать ]Инструментарий предоставляет средства для определения языковых грамматик и создаёт анализаторы , которые автоматически создают абстрактные синтаксические деревья (AST), а также симпатичные принтеры для преобразования исходных или модифицированных AST обратно в компилируемый исходный текст. Деревья синтаксического анализа захватывают, а Prettyprinters восстанавливают полную информацию об исходной исходной программе, включая исходную позицию, комментарии, систему счисления и формат чисел и т. д., чтобы гарантировать, что восстановленный исходный текст будет так же узнаваем для программиста, как и исходный текст по модулю. любые прикладные преобразования.
DMS использует технологию синтаксического анализа GLR с семантическими предикатами. Это позволяет ему обрабатывать все контекстно-свободные грамматики, а также большинство синтаксисов неконтекстно-свободных языков, таких как Fortran , который требует сопоставления нескольких циклов DO с общими операторами CONTINUE по метке для создания AST для правильно вложенных циклов при анализе. DMS имеет множество предопределенных языковых интерфейсов, охватывающих большинство реальных диалектов C и C++, включая C++0x , C# , Java , Python , PHP , EGL , Fortran , COBOL , Visual Basic , Verilog , VHDL и около 20 или более других. языки. DMS может обрабатывать ASCII , ISO-8859 , UTF-8 , UTF-16 , EBCDIC , Shift-JIS и различные кодировки символов Microsoft.
DMS предоставляет средства оценки грамматики атрибутов для выполнения пользовательского анализа по AST, например метрик, и включает поддержку построения таблиц символов . Другие факты о программе могут быть извлечены с помощью встроенных анализа управления и потоков механизмов данных, анализа локальных и глобальных указателей всей программы , извлечения графа вызовов и анализа символьного диапазона посредством абстрактной интерпретации .
DMS реализован на языке параллельного программирования PARLANSE, который позволяет использовать симметричную многопроцессорную обработку для ускорения больших анализов и преобразований. [7]
Переписывание
[ редактировать ]Изменения в AST могут быть выполнены как процедурными методами, закодированными на PARLANSE, так и преобразованиями дерева между источниками, закодированными как правила перезаписи с использованием поверхностного синтаксиса, обусловленного любыми извлеченными фактами программы, с использованием языка спецификации правил (RSL) DMS. Механизм правил перезаписи, поддерживающий RSL, обрабатывает ассоциативные и коммутативные правила. Правило перезаписи для C для замены сложного условия на ?:
оператор запишется как:
rule simplify_conditional_assignment(v:left_hand_side,e1:expression,e2:expression,e3:expression)
:statement->statement
= " if (\e1) \v=\e2; else \v=e3; "
-> " \v=\e1?\e2:\e3; "
if no_side_effects(v);
перезаписи Правила имеют имена, например, simple_conditional_assignment . Каждое правило имеет пару шаблонов «соответствовать этому» и «заменить этим», разделенные -> , в нашем примере на отдельных строках для удобства чтения. Шаблоны должны соответствовать категориям синтаксиса языка; в этом случае оба шаблона должны относиться к оператору синтаксической категории , также разделенному в соответствии с шаблонами с помощью -> . Поверхностный синтаксис целевого языка (например, C) кодируется внутри метакавычек " , чтобы отделить синтаксис правил перезаписи от синтаксиса целевого языка. Обратная косая черта внутри метакавычек представляет собой экранирование домена, чтобы указать метапеременные шаблона (например, \v , \e1 , \e2 ), которые соответствуют любой языковой конструкции, соответствующей объявлению метапеременной в строке подписи, например, e1 должна относиться к синтаксической категории: (любое) выражение . Если метапеременная упоминается несколько раз в шаблоне соответствия , она должна соответствовать. одинаковым поддеревьям; один и тот же v идентичной формы должен встречаться в обоих присвоениях в шаблоне сопоставления в этом примере. шаблон замены заменяется соответствующими совпадениями с левой стороны. Условное предложение if обеспечивает дополнительное условие, которое должно быть выполнено для применения правила, например, что сопоставленная метапеременная v , будучи произвольной левой частью, не должна иметь побочного эффекта (например, не может иметь форму [i++] ; предикат no_side_effects определяется анализатором, созданным с использованием других механизмов DMS).
Достижение сложного преобразования кода достигается путем предоставления ряда правил, которые взаимодействуют для достижения желаемого эффекта. Набор правил ориентирован на части программы с помощью метапрограмм, написанных на PARLANSE.
Полный пример определения языка и правил преобразования «источник-источник», определенных и применяемых, показан с использованием школьной алгебры и небольшого количества математических вычислений в качестве предметно-ориентированного языка.
Ссылки
[ редактировать ]- ^ DMS: Преобразования программ для практической эволюции масштабируемого программного обеспечения . Материалы Международной конференции по программной инженерии 2004 г. Перепечатка
- ^ Системы технического обслуживания проектирования . ACM 1992 г. Перепечатка
- ^ Покрытие ветвей для произвольных языков стало проще
- ^ « Обнаружение клонов с использованием абстрактных синтаксических деревьев . Материалы Международной конференции по обслуживанию программного обеспечения, 1998 г.» . дои : 10.1109/ICSM.1998.738528 . S2CID 12834606 . Архивировано из оригинала 10 октября 2012 г. Проверено 6 ноября 2010 г.
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь ) - ^ Акерс, Роберт Л.; Бакстер, Ира Д.; Мехлих, Майкл; Эллис, Брайан Дж.; Люке, Кенн Р. (2007). «Пример: Реинжиниринг моделей компонентов C++ посредством автоматического преобразования программ». Информационные и программные технологии . 49 (3): 275–291. дои : 10.1016/j.infsof.2006.10.012 . S2CID 13219993 .
- ^ Исследования инноваций в малом бизнесе (DoE): Refactor++
- ^ «Семантическое проектирование: язык параллельного программирования PARLANSE для Windows Pentium/80x86» . www.semanticdesigns.com .