WikiDer > TTM (язык программирования) - Википедия
Эта статья тон или стиль могут не отражать энциклопедический тон используется в Википедии. (Декабрь 2012 г.) (Узнайте, как и когда удалить этот шаблон сообщения) |
Парадигма | универсальный макропроцессор |
---|---|
Разработано | Стивен М. Кейн и Э. Кент Гордон |
Впервые появился | 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 с двумя аргументами.
Побег
Можно избежать одного или нескольких символов, используя любое из двух способов.
- <...> - экранировать несколько символов.
- @ - экранировать один символ
Если строка заключена в <...>, то она сканируется, но не интерпретируется TTM. В процессе сканирования внешние скобки <и> удаляются. Если есть вложенные вхождения <...>, они сканируются, но <и> не удаляются. Скобки должны быть сбалансированы: количество символов '<' должно равняться количеству символов '>'.
Соглашение об экранировании '@' заставляет интерпретатор передавать как есть символ после '@'. Ведущий '@' остается, если он находится в escape-последовательности <...>, в противном случае он удаляется. Одно из применений - разрешить несбалансированное вхождение символов «<» или «>».
Примеры
Пример 1: Определение функции
Самый простой пример включает определение функции, которая полезна для определения дополнительных функций. Эта "мета" функция называется defОн записывается как:
#>; ## >> #
Например, мы можем использовать def чтобы определить строку XX как 12345, а затем сегмент XX на 34, записав это.
#
Звонок
#
затем создаст строку «1200005».
В def функция работает путем вызова ds для определения имени функции и начального текста в ТТМ словарь - XX в нашем примере.
Затем текст словарной статьи XX сегментируется по любым указанным аргументам: в данном случае «34».
Когда вызывается XX, его аргумент заменяется меткой сегмента.
Пример 2: Факториал
Факториальную функцию можно определить (используя приведенную выше ##
#>>>>>>
Обратите внимание, что внутреннее вычисление (# Пример вызова мог бы выглядеть так. и вернет строку 6. Точная связь между TTM и TRAC неизвестна. В документации TTM указано, что он был получен из GAP[3] и GPM.[4] В любом случае описание характеристик TRAC применимо и к TTM. Однако, удалив синтаксическое различие между встроенной и определяемой пользователем функцией, TTM станет намного более чистым языком.# <п!; 3>
Смотрите также
Примечания
Рекомендации
внешняя ссылка