Jump to content

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

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

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

Описание

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

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

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

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

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

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

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

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

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

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

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

#<functionname;arg1;arg2;...;argn>

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

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

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

При сборе вызова функции могут встретиться дополнительные вызовы функций, например такой:

#<functionname;arg1;#<f2;arg;...>;...;argn>

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

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

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

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

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

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

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

  • #<ds;имя;текст>
  • #<сс;имя;текст1;текст2...;текстn>

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

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

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

[01] #<ds;F;abcxxdefyy>
[02] #<ss;F;xx;yy>
[03] #<F;11;22>

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

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

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

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

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

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

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

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

#<ds;def;<##<ds;name;<text>>;##<ss;name;subs>>>
#<ss;def;name;subs;text>

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

#<def;XX;34;12345>

Звонок

#<XX;0000>

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

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

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

При вызове XX его аргумент заменяется меткой сегмента.

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

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

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

#<def;n!;N;<#<lt;N;2;1;<#<mu;N;#<n!;#<su;N;1>>>>>>>

Обратите внимание, что внутренние вычисления (#<mu...) экранируются. поэтому он будет оцениваться только после функций #<lt... выполняется и возвращает это вложенное вычисление в качестве результата.

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

#<n!;3>

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

См. также

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

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

Примечания

[ редактировать ]
  1. ^ Jump up to: Перейти обратно: а б Кейн, Ш.; Гордон, ЭК (1968). «ТТМ: экспериментальный язык интерпретации» (PDF) . Калифорнийский технологический институт, Вычислительный центр Уиллиса Х. Бута, Отчет о программировании № 7. Общественное достояние В данную статью включен текст из этого источника, находящегося в свободном доступе .
  2. ^ Кейн, Ш.; Гордон, EK (май 1969 г.). «TTM: язык макросов для пакетной обработки» (PDF) . Калифорнийский технологический институт, Вычислительный центр Уиллиса Х. Бута, Отчет о программировании № 8. Общественное достояние В данную статью включен текст из этого источника, находящегося в свободном доступе .
  3. ^ Jump up to: Перейти обратно: а б Фарбер, DJ, Система сборки 635 — GAP. Вычислительный центр Bell Telephone Laboratories (1964).
  4. ^ Jump up to: Перейти обратно: а б Стрейчи, К., Макрогенератор общего назначения. Comput J 8, 3 (1965), стр. 225–241.
  5. ^ IBM, Язык ассемблера System/360, C28-6514-4, (1967).
  6. ^ Кейн, С.Х. и др., Отчет Комитета по системным целям и требованиям, SHARE, 1965, стр. 29-40.
  7. ^ Иствуд, DE и Макилрой, доктор медицинских наук , Модификация макрокомпилятора SAP. Вычислительный центр Bell Telephone Laboratories, 1959 год.
  8. ^ МакКлюр, Р.М., Описание ассемблера CODAPT, 1960.
  9. ^ Кейн, С.Х., Справочное руководство для программы экспериментальной сборки макросов CIT 7090/7040 (XMAP). Калифорнийский технологический институт, Вычислительный центр Уиллиса Х. Бута (1964).
  10. ^ Макилрой, доктор медицинских наук , Расширения макроинструкций языков компилятора. CACM 3, № 4 (1960), 214–220.
  11. ^ Кейн, С.Х. и др., Операционная среда для исследований в области программирования. Калифорнийский технологический институт, Отчет о программировании вычислительного центра Уиллиса Х. Бута № 1, 1967 г.
  • Гринвальд, И.Д. и Кейн, М., Система Share 709: программирование и модификация. JACM 6 № 2 (1959). стр. 128–133.
  • Гринвальд, И.Д., Обработка макроинструкций. CACM 2, № 11 (1959), 21–22.
  • Подразделение Remington Rand UNIVAC, Универсальное программирование UNIVAC. Филадельфия, 1957 год.
  • Макилрой, доктор медицинских наук , Использование макросов SAP для управления символическими выражениями. Вычислительный центр Bell Telephone Laboratories (1960).
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 42343ff4cf50386775d1467dd15768f7__1716058560
URL1:https://arc.ask3.ru/arc/aa/42/f7/42343ff4cf50386775d1467dd15768f7.html
Заголовок, (Title) документа по адресу, URL1:
TTM (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)