TTM (язык программирования) - Википедия - TTM (programming language)

ТТМ
Парадигмауниверсальный макропроцессор
РазработаноСтивен М. Кейн и Э. Кент Гордон
Впервые появился1968
Стабильный выпуск
1.0
ЛицензияМассачусетский технологический институт
Основной реализации
Unidata TTM
Под влиянием
GAP, GPM, ПРОФ

ТТМ ориентирована на строку, обработка макросов общего назначения язык программирования разработан в 1968 году Стивеном Кейном и Э. Кентом Гордоном в Калифорнийский технологический институт.

Описание

Следующее описание взято из оригинального справочного руководства TTM.[1] и последующее расширение пакетной обработки.[2]

TTM - это рекурсивный интерпретирующий язык, разработанный в первую очередь для обработки строк, редактирования текста, определения и расширения макросов и других приложений, обычно классифицируемых как системное программирование. Это происходит, прежде всего, из GAP.[3] и GPM.[4]

Первоначально TTM планировалась как часть обработки макросов ассемблера для IBM System / 360 и, как таковая, была разработана для преодоления ограничений и несоответствий, которые существовали в стандартных ассемблерах для этой системы.[5][6]

Кроме того, он был разработан, чтобы иметь все возможности, которыми обладали более ранние общие макроассемблеры, но с устранением прискорбных синтаксических и семантических трудностей.[7][8][9][10]

Во время разработки TTM стало очевидно, что возможны другие приложения, кроме обработки макросов на ассемблере. К ним относятся редактирование данных, манипуляции с текстом, компиляция выражений и обработка макросов для языковых процессоров, отличных от ассемблеров.

Первоначальная версия TTM была реализована для работы в режиме разговора в базовой системе разделения времени Caltech для IBM System / 360 Модель 50.[11] Другие версии были написаны для работы в среде пакетной обработки OS / 360 и для работы перед процессорами различных языков или совместно с ними.

Синтаксис и семантика

Эталонная реализация предполагает, что TTM предоставляется текстовый файл, содержащий некоторую комбинацию обычного текста и вызовов функций TTM (то есть вызовов). Текст сканируется посимвольно. Любой обычный текст передается на вывод без изменений (кроме убегает Если встречается функция TTM, она собирается и выполняется.

Общая форма вызова функции TTM выглядит так

# <имя функции; аргумент1; аргумент2; ...; аргумент>

где имя функции и аргументы представляют собой произвольные символьные строки, не содержащие значимых символов: '#', '<', '>' и ';'. Функция вызывается с указанными аргументами, и результирующий текст вставляется в исходный текст вместо вызова функции. Если вызов функции был предварен одним символом '#', сканирование возобновится. перед вставленный текст из вызова функции.

Это называется активный призыв.

Если вызов функции был предварен двумя символами '#', сканирование возобновляется просто. после вставленный текст. Это называется пассивный призыв.

Во время сбора вызова функции могут встречаться дополнительные вызовы функции, например this.

# <имя функции; аргумент1; # ; ...; аргумент>

Вызов вложенной функции будет вызван при обнаружении, и результат будет вставлен в текст вызова внешней функции, и сканирование вызова внешней функции возобновится в месте, указанном числом символов '#', предшествующих вложенному вызову.

Если функция принимает, например, 2 аргумента, любые дополнения игнорируются. Для пользовательских функций, если предоставлено слишком мало аргументов, добавляется дополнительный со значением пустой строки (""). Функция может иметь максимум 62 аргумента.

Как и в случае с другими прикладные языки программирования, функция TTM может быть рекурсивной и может быть определена как результат вызова последовательности вызовов других функций.

Функции либо встроенный или же определяемые пользователем. Существует большое количество встроенных функций, которые описаны в справочном руководстве TTM.[1]

Определение функции

Пользовательские функции создаются с использованием следующих двух встроенных функций.

  • #
  • #

Первая функция, ds для «определения строки», определяет именованную строку в словаре TTM. Имя - «имя», а его значение - «текст». Вызов этой именованной строки приведет к тому, что ее вызов будет заменен значением (т.е. "текстом").

Вторая функция, ss для "строки сегмента", просматривает текст ранее определенной строки в поисках вхождений ее аргументов: text1, text2, ... textn. Когда вхождение обнаружено, оно заменяется на метка сегмента. Все вхождения каждого аргумента заменяются одной и той же меткой сегмента.

Когда вызывается сегментированная строка, каждый аргумент вызова заменяется соответствующей меткой сегмента. Рассмотрим этот пример.

[01] #  [02] #  [03] # 

Строка F определена (строка 1), а ее тело «abcxxdefyy» сегментировано на две строки «xx» и «yy» (строка2). При вызове (строка 3) он вернет значение «abc11def22». Фактически у нас есть определяемая пользователем функция F с двумя аргументами.

Побег

Можно избежать одного или нескольких символов, используя любое из двух способов.

  1. <...> - экранировать несколько символов.
  2. @ - экранировать один символ

Если строка заключена в <...>, то она сканируется, но не интерпретируется TTM. В процессе сканирования внешние скобки <и> удаляются. Если есть вложенные вхождения <...>, они сканируются, но <и> не удаляются. Скобки должны быть сбалансированы: количество символов '<' должно равняться количеству символов '>'.

Соглашение об экранировании '@' заставляет интерпретатор передавать как есть символ после '@'. Ведущий '@' остается, если он находится в escape-последовательности <...>, в противном случае он удаляется. Одно из применений - разрешить несбалансированное вхождение символов «<» или «>».

Примеры

Пример 1: Определение функции

Самый простой пример включает определение функции, которая полезна для определения дополнительных функций. Эта "мета" функция называется defОн записывается как:

# >; ## >> # 

Например, мы можем использовать def чтобы определить строку XX как 12345, а затем сегмент XX на 34, записав это.

# 

Звонок

# 

затем создаст строку «1200005».

В def функция работает путем вызова ds для определения имени функции и начального текста в ТТМ словарь - XX в нашем примере.

Затем текст словарной статьи XX сегментируется по любым указанным аргументам: в данном случае «34».

Когда вызывается XX, его аргумент заменяется меткой сегмента.

Пример 2: Факториал

Факториальную функцию можно определить (используя приведенную выше ## функция) следующим образом.

# >>>>>>

Обратите внимание, что внутреннее вычисление (#

Пример вызова мог бы выглядеть так.

# <п!; 3>

и вернет строку 6.

Смотрите также

Точная связь между TTM и TRAC неизвестна. В документации TTM указано, что он был получен из GAP[3] и GPM.[4] В любом случае описание характеристик TRAC применимо и к TTM. Однако, удалив синтаксическое различие между встроенной и определяемой пользователем функцией, TTM станет намного более чистым языком.

Примечания

  1. ^ а б Caine, S.H .; Гордон, Э. (1968). «TTM: экспериментальный интерпретирующий язык» (PDF). Калифорнийский технологический институт, вычислительный центр Уиллиса Х. Бут, Отчет о программировании № 7.
  2. ^ Caine, S.H .; Гордон, Э. К. (май 1969 г.). «TTM: макроязык для пакетной обработки» (PDF). Калифорнийский технологический институт, вычислительный центр Уиллиса Х. Бут, Отчет о программировании № 8.
  3. ^ а б Фарбер, Д. Дж., Система сборки 635 - GAP. Вычислительный центр Bell Telephone Laboratories (1964).
  4. ^ а б Стрейчи К. Генератор макросов общего назначения. Comput J 8, 3 (1965), стр. 225-241.
  5. ^ IBM, Язык ассемблера System / 360, C28-6514-4, (1967).
  6. ^ Кейн, С. и др., Отчет Комитета по системным целям и требованиям, SHARE, 1965, стр. 29-40.
  7. ^ Иствуд, Д. и Макилрой, доктор медицины, Макро компилятор Модификация SAP. Коммутационный центр Bell Telephone Laboratories, 1959.
  8. ^ Макклюр Р.М. Описание CODAPT Assembler, 1960.
  9. ^ Caine, S.H., Справочное руководство для программы экспериментальной сборки макросов CIT 7090/7040 (XMAP). Калифорнийский технологический институт, Вычислительный центр Уиллиса Х. Бут (1964).
  10. ^ Макилрой, доктор медицины, Макроинструкции расширений языков компилятора. CACM 3, No. 4 (1960), 214-220.
  11. ^ Кейн, С.Х. и др., Операционная среда для исследования программирования. Калифорнийский технологический институт, Отчет о программировании вычислительного центра Уиллиса Х. Бута № 1, 1967.

Рекомендации

  • Гринвальд, И. и Кейн, М., Система Share 709: Программирование и модификация. JACM 6 № 2 (1959). С. 128–133.
  • Гринвальд И. Д. Обработка макросов. CACM 2, No. 11 (1959), 21-22.
  • Ремингтон Рэнд Отделение UNIVAC, Универсальное программирование UNIVAC. Филадельфия, 1957 год.
  • Макилрой, доктор медицины, Использование макросов SAP для управления символьными выражениями. Вычислительный центр Bell Telephone Laboratories (1960).

внешняя ссылка