Система трансформации FermaT - FermaT Transformation System - Wikipedia

В Система трансформации FermaT - это система преобразования промышленных программ, предназначенная для обратного проектирования, понимания программ и миграции между языками программирования. В настоящее время система используется для перевода модулей IBM 370 Assembler в эквивалентные читаемые и поддерживаемые программы C и COBOL.

FermaT доступен как бесплатно программное обеспечение под Стандартной общественной лицензией GNU (GPL ).

А преобразование программы любая операция, которая изменяет текст программы без изменения ее внешнего поведения. Простой пример - это изменение направления оператора IF:

ЕСЛИ x = 0, ТО y: = 1 Иначе y: = 2 FI

семантически эквивалентно:

ЕСЛИ x <> 0 ТО y: = 2 Иначе y: = 1 FI

Более сложный пример преобразования программы: Семантический разрез. Рассмотрим следующую программу WSL:

total: = 0; i: = 0; evens: = 0; noevens: = 0; odds: = 0; noodds: = 0; n: = n0; WHILE i <= n DO evenflag: = A [i] MOD 2 ; evenflag: = 0; ЕСЛИ ЛОЖНО, ТО evens: = evens + A [i]; noevens: = noevens + 1 ELSE odds: = odds + A [i]; лапша: = лапша + 1 ФИ; итого: = итого + A [i]; i: = i + 1 OD; IF noevens <> 0 THEN meaneven: = evens / noevens ELSE meaneven: = 0 FI; IF noodds <> 0 THEN meanodd: = odds / noodds ELSE meanodd: = 0 FI; mean: = total / (n + 1); различие: = ABS (meaneven - среднее); нечетное различие: = ABS (среднее-среднее)

Допустим, нас интересует конечное значение переменной даже разница. Сохраните программу как текстовый файл test-1.wsl и запустим преобразование:

dotrans test-1.wsl test-2.wsl Semantic_Slice data = evendifference

Это создает выходной файл test-2.wsl:

evendifference: = ABS (REDUCE ("+", A [0..n0]) / (n0 + 1))

Веб ссылки