stringtranslate.com

Набор инструментов для реинжиниринга программного обеспечения DMS

DMS Software Reengineering Toolkit — это фирменный набор инструментов для преобразования программ , предназначенный для автоматизации анализа исходных программ, модификации, трансляции или генерации программных систем для произвольных смесей исходных языков для крупномасштабных программных систем. [1] DMS изначально была основана на теории поддержки проектов программного обеспечения, называемой Design Maintenance Systems. [2] DMS и «Design Maintenance System» являются зарегистрированными товарными знаками Semantic Designs.

Использование

DMS использовался для реализации доменно-специфичных языков (например, генерации кода для управления фабрикой), тестового покрытия [3] и инструментов профилирования, обнаружения клонов [4] , инструментов миграции языка, реинжиниринга компонентов C++ [5] и для исследований сложных тем, таких как надежный рефакторинг C++ [6] .

Функции

Набор инструментов предоставляет средства для определения грамматик языка и будет производить парсеры , которые автоматически строят абстрактные синтаксические деревья (AST), и prettyprinters для преобразования исходных или измененных 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, так и преобразованиями исходного дерева в исходное, закодированными как правила перезаписи с использованием поверхностного синтаксиса, обусловленного любыми извлеченными фактами программы, с использованием языка спецификации правил DMS (RSL). Механизм правил перезаписи, поддерживающий RSL, обрабатывает ассоциативные и коммутативные правила. Правило перезаписи для C для замены сложного условия оператором ?:может быть записано как:

 правило упрощения_условного_присваивания(v:left_hand_side,e1:expression,e2:expression,e3:expression) :заявление->заявление = " если (\e1) \v=\e2; иначе \v=e3; " -> " \v=\e1?\e2:\e3; " если нет_побочных_эффектов(v);

Правила перезаписи имеют имена, например, simplify_conditional_assignment . Каждое правило имеет пару шаблонов "match this" и "replace by that", разделенных -> , в нашем примере на отдельных строках для удобства чтения. Шаблоны должны соответствовать категориям синтаксиса языка; в этом случае оба шаблона должны быть из категории синтаксиса statement, также разделенных в соответствии с шаблонами -> . Синтаксис поверхности целевого языка (например, C) кодируется внутри метакавычек " , чтобы отделить синтаксис правила перезаписи от синтаксиса целевого языка. Обратные косые черты внутри метакавычек представляют экранированные последовательности доменов, чтобы указать метапеременные шаблона (например, \v , \e1 , \e2 ), которые соответствуют любой языковой конструкции, соответствующей объявлению метапеременной в строке подписи, например, e1 должен иметь синтаксическую категорию: (любое) выражение . Если метапеременная упоминается несколько раз в шаблоне соответствия , она должна соответствовать идентичным поддеревьям; в этом примере в обоих назначениях в шаблоне соответствия должна встречаться одна и та же идентичная форма v . Метапеременные в шаблоне замены заменяются соответствующими соответствиями с левой стороны. Условное предложение if обеспечивает дополнительное условие, которое должно быть выполнено для применения правила, например, что сопоставленная метапеременная v , будучи произвольной левой частью, не должна иметь побочного эффекта (например, не может иметь вид a[i++] ; предикат no_side_effects определяется анализатором, построенным с использованием других механизмов DMS).

Достижение сложного преобразования кода достигается путем предоставления ряда правил, которые взаимодействуют для достижения желаемого эффекта. Набор правил фокусируется на частях программы метапрограммами, закодированными в PARLANSE.

Полный пример определения языка и правил преобразования исходного текста в исходный текст, определенных и примененных с использованием школьной алгебры и небольшого количества исчисления в качестве предметно-ориентированного языка.

Ссылки

  1. ^ DMS: Программные преобразования для практической масштабируемой эволюции программного обеспечения. Труды Международной конференции по программной инженерии 2004 г. Переиздание
  2. ^ Проектирование систем технического обслуживания. Сообщения ACM 1992 Перепечатка
  3. ^ Покрытие ветвей для произвольных языков стало проще
  4. ^ "Обнаружение клонов с использованием абстрактных синтаксических деревьев. Труды Международной конференции по обслуживанию программного обеспечения 1998". doi :10.1109/ICSM.1998.738528. S2CID  12834606. Архивировано из оригинала 2012-10-10 . Получено 2010-11-06 . {{cite journal}}: Цитировать журнал требует |journal=( помощь )
  5. ^ Акерс, Роберт Л.; Бакстер, Айра Д.; Мелих, Майкл; Эллис, Брайан Дж.; Люкке, Кенн Р. (2007). «Исследование случая: реинжиниринг моделей компонентов C++ с помощью автоматического преобразования программ». Информационные и программные технологии . 49 (3): 275–291. doi :10.1016/j.infsof.2006.10.012. S2CID  13219993.
  6. ^ Исследования инноваций в малом бизнесе (DoE): Refactor++
  7. ^ "Semantic Designs: Параллельный язык программирования PARLANSE для Windows Pentium/80x86". www.semanticdesigns.com .

Внешние ссылки