Transformacja programu

Transformacja programu to dowolna operacja, która wykonuje program komputerowy i generuje inny program. W wielu przypadkach wymaga się, aby przekształcony program był semantycznie równoważny z oryginałem, w stosunku do określonej semantyki formalnej , aw mniejszej liczbie przypadków transformacje skutkują programami, które semantycznie różnią się od oryginału w przewidywalny sposób.

Chociaż transformacje można wykonać ręcznie, często bardziej praktyczne jest użycie systemu transformacji programu , który stosuje specyfikacje wymaganych transformacji. Transformacje programu mogą być określane jako zautomatyzowane procedury, które modyfikują struktury danych kompilatora (np. abstrakcyjne drzewa składniowe ) reprezentujące tekst programu lub mogą być określane wygodniej za pomocą wzorców lub szablonów reprezentujących sparametryzowane fragmenty kodu źródłowego.

Praktycznym wymogiem dla systemów transformacji kodu źródłowego jest zdolność do efektywnego przetwarzania programów napisanych w języku programowania . Zwykle wymaga to integracji pełnego interfejsu dla interesującego nas języka programowania, w tym parsowania kodu źródłowego , budowania wewnętrznych reprezentacji programu struktur kodu, znaczenia symboli programu, przydatnych analiz statycznych i regeneracji prawidłowego kodu źródłowego z przekształconych reprezentacji programu . Problem budowy i integracji odpowiednich front-endów dla języków konwencjonalnych ( Java , C++ , PHP itp.) mogą być równie trudne jak zbudowanie samego systemu transformacji programu ze względu na złożoność takich języków. Aby system transformacji był szeroko użyteczny, musi być w stanie obsłużyć wiele docelowych języków programowania i musi zapewniać pewne środki do określania takich interfejsów.

Uogólnieniem równoważności semantycznej jest pojęcie udoskonalenia programu : jeden program jest udoskonaleniem innego, jeśli kończy się na wszystkich stanach początkowych, dla których kończy się program oryginalny, i dla każdego takiego stanu jest gwarantowane zakończenie w możliwym stanie końcowym dla oryginalny program. Innymi słowy, udoskonalenie programu jest bardziej zdefiniowane i bardziej deterministyczne niż program oryginalny. Jeśli dwa programy są wzajemnymi udoskonaleniami, to programy te są równoważne. [ wymagane wyjaśnienie ]

Zobacz też

Linki zewnętrzne