Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Преобразование программы является любой операцией , которая принимает компьютерную программу и формирует другую программу. Во многих случаях требуется, чтобы преобразованная программа была семантически эквивалентна исходной относительно определенной формальной семантики, и в меньшем количестве случаев преобразования приводят к программам, которые семантически отличаются от оригинала предсказуемым образом. [1]

Хотя преобразования можно выполнять вручную, часто более практично использовать систему преобразования программ, которая применяет спецификации требуемых преобразований. Программные преобразования могут быть определены как автоматизированные процедуры, которые изменяют структуры данных компилятора (например, абстрактные синтаксические деревья ), представляющие текст программы, или могут быть указаны более удобно с использованием шаблонов или шаблонов, представляющих параметризованные фрагменты исходного кода. [2]

Практическое требование к системам преобразования исходного кода состоит в том, чтобы они могли эффективно обрабатывать программы, написанные на языке программирования . Обычно это требует интеграции полного интерфейса для интересующего языка программирования, включая анализ исходного кода , построение внутренних программных представлений структур кода, значения программных символов, полезный статический анализ и восстановление действительного исходного кода из преобразованных программных представлений. . Проблема построения и интеграции адекватных интерфейсов для обычных языков ( Java , C ++ , PHPи т. д.) могут быть не менее сложными, чем построение самой системы преобразования программ из-за сложности таких языков. Чтобы быть широко полезной, система преобразования должна быть способна обрабатывать многие целевые языки программирования и должна обеспечивать некоторые средства для определения таких интерфейсов.

Обобщением семантической эквивалентности является понятие уточнения программы : одна программа является уточнением другой, если она завершается во всех начальных состояниях, для которых завершается исходная программа, и для каждого такого состояния гарантировано завершение в возможном конечном состоянии для оригинальная программа. Другими словами, уточнение программы более определено и детерминировано, чем исходная программа. Если две программы являются уточнением друг друга, то программы эквивалентны. [ требуется разъяснение ]

См. Также [ править ]

Ссылки [ править ]

  1. ^ Уорд, Мартин (1989). Доказательство уточнений и преобразований программ (докторская диссертация). Оксфордский университет.
  2. ^ Павляк, Рено; Монперрус, Мартин; Петитпрез, Николас; Ногера, Карлос; Сейнтюрье, Лайонел (2016). «SPOON: библиотека для реализации анализа и преобразования исходного кода Java» . Программное обеспечение: практика и опыт . 46 (9): 1155–1179. DOI : 10.1002 / spe.2346 .

Внешние ссылки [ править ]