TTM (язык программирования)

редактировать

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

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

Содержание
  • 1 Описание
  • 2 Синтаксис и семантика
    • 2.1 Определение функции
    • 2.2 Экранирование
  • 3 Примеры
    • 3.1 Пример 1: Функция D efinition
    • 3.2 Пример 2: Факториал
  • 4 См. также
  • 5 Примечания
  • 6 Ссылки
  • 7 Внешние ссылки
Описание

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

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

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

Кроме того, он был разработан, чтобы иметь всю мощь, которой обладали более ранние общие макроассемблеры, но с устранением прискорбных синтаксических и семантических трудностей.

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

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

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

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

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

#

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

Это называется активным вызовом.

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

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

#;...;argn>

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

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

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

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

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

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

  • #
  • #

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

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

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

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

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

Экранирование

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

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

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

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

Примеры

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

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

#>; ## >># 

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

#

Вызов

#

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

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

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

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

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

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

#>>>>>>

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

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

#

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

См. Также

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

Примечания
Ссылки
  • Greenwald, ID и Кейн, М., The Share 709 System: Programming and Modification. JACM 6 No. 2 (1959). Pp. 128–133.
  • Greenwald, ID, Handling Macro Instructions. CACM 2, No. 11 (1959)), 21-22.
  • Remington Rand UNIVAC Division, UNIVAC Generalized Programming. Philadelphia, 1957.
  • McIlroy, MD, Использование макросов SAP для манипулирования символьными выражениями. Вычислительный центр Bell Telephone Laboratories ( 196 0).
Внешние ссылки
Последняя правка сделана 2021-06-09 06:28:34
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте