TMG (Transmogrifier) — это инструмент, предназначенный для создания компиляторов и интерпретаторов. Он использует метод рекурсивного спуска, что делает его пригодным для задач синтаксически-ориентированного перевода. Хотя он появился в 1960-х годах, он сыграл заметную роль в развитии вычислительной техники в 1970-х, особенно на раннем этапе развития Unix и связанных с ним языков программирования.
TMG был разработан Робертом М. МакКлюром и впервые представлен в 1965 году, а его корни восходят к 1963 году. Первоначально он был реализован в таких системах, как OS/360, а затем адаптирован для ранних сред Unix. Дуглас Макилрой портировал TMG на Unix на PDP-7 в 1969 году, предположительно, написав его на бумаге и вручную скомпилировав в язык ассемблера. Этот диалект TMG для Unix оказал влияние на такие языки, как ALGOL 68, B, PL/I и SNOBOL, и сам находился под их влиянием. Оригинальный TMG также вдохновил Дональда Кнута на создание компилятора TROL.
Его связь с 1970-ми годами проистекает, главным образом, из его использования на ранних этапах разработки Unix. В 1970 году Кен Томпсон использовал TMG на PDP-7, чтобы попытаться реализовать компилятор Fortran для Unix. Из-за ограничений памяти PDP-7 эти усилия привели к созданию языка программирования B, бестипового языка, на который сильно повлиял BCPL. B стал прямым предшественником C, который Томпсон и Деннис Ритчи разработали в начале 1970-х годов в качестве языка системной реализации для Unix. TMG был одним из первых языков высокого уровня, доступных в оригинальной системе Unix PDP-7, где все остальные программы изначально писались на ассемблере. К началу 1970-х годов, с появлением версии 2 Unix, TMG получил дальнейшее развитие в рамках растущего набора утилит и языков программирования.
TMG также использовался для создания EPL, ранней версии PL/I, а его алгоритм рекурсивного спуска был формально изучен Александром Бирманом и Джеффри Ульманом, которые описали его как схему распознавания TMG (или TS). Существовали порты для PDP-11, и язык использовал расширения файлов .t в Unix. Современные реализации, такие как версия Макилроя на переносимом языке C, до сих пор существуют в исторических и образовательных целях.
Как компилятор-компилятор, TMG превосходно справляется с обработкой строк и созданием трансляторов для языков программирования. Он справляется с такими задачами, как сканирование строк, построение таблиц и генерация выходных данных. Вариант для Unix включал в себя эклектичные функции современных языков, что делало его универсальным для раннего системного программирования. Его влияние распространилось на такие инструменты, как Yacc (Yet Another Compiler-Compiler), который стал стандартом для генерации парсеров в Unix.
В целом, хотя пик инноваций TMG пришёлся на 1960-е годы, его практическое применение в 1970-х годах, особенно при разработке языков Unix, закрепило его наследие в истории вычислительной техники.
Имеется современная реплика:
github.com/amakukha/tmg