Transformace programu - Program transformation

Transformační program je jakákoli operace, která trvá počítačový program a vygeneruje jiný program. V mnoha případech se vyžaduje, aby transformovaný program byl sémanticky ekvivalentní originálu ve vztahu ke konkrétní formální sémantice a v méně případech jsou výsledkem transformací programy, které se sémanticky liší od originálu předvídatelnými způsoby.

Zatímco transformace lze provádět ručně, je často praktičtější použít systém transformace programu, který aplikuje specifikace požadovaných transformací. Transformace programu mohou být specifikovány jako automatizované procedury, které upravují datové struktury kompilátoru (např. Abstraktní syntaxové stromy ) představující text programu, nebo mohou být specifikovány pohodlněji pomocí vzorů nebo šablon představujících fragmenty zdrojového kódu s parametry.

Praktickým požadavkem na systémy transformace zdrojového kódu je, aby byly schopné efektivně zpracovávat programy napsané v programovacím jazyce . To obvykle vyžaduje integraci úplného rozhraní pro požadovaný programovací jazyk, včetně syntaktické analýzy zdrojového kódu , vytváření interních programových reprezentací struktur kódu, významu programových symbolů, užitečných statických analýz a regenerace platného zdrojového kódu z transformovaných programových reprezentací. . Problém budování a integrace odpovídajících frontendů pro konvenční jazyky ( Java , C ++ , PHP atd.) Může být stejně složitý jako budování samotného systému transformace programu kvůli složitosti těchto jazyků. Aby byl transformační systém široce užitečný, musí být schopen zvládnout mnoho cílových programovacích jazyků a musí poskytovat určité prostředky pro specifikaci těchto frontendů.

Zobecněním sémantické ekvivalence je pojem upřesnění programu : jeden program je upřesněním druhého, pokud se ukončí ve všech počátečních stavech, pro které původní program končí, a pro každý takový stav je zaručeno ukončení v možném konečném stavu pro původní program. Jinými slovy, upřesnění programu je definovanější a determinističtější než původní program. Pokud jsou dva programy vzájemným vylepšením, jsou programy rovnocenné.

Viz také

Reference

externí odkazy