СНОБОЛ - SNOBOL

СНОБОЛ
Парадигма Императивный , неструктурированный
Разработано Дэвид Дж. Фарбер , Ральф Э. Грисволд и Иван П. Полонски
Разработчик Дэвид Дж. Фарбер, Ральф Э. Грисволд, Иван П. Полонски и Bell Labs
Впервые появился 1962 ; 59 лет назад ( 1962 )
Стабильный выпуск
СНОБОЛ4 / 1967 ; 54 года назад ( 1967 )
Веб-сайт www .snobol4 .org
Основные реализации
СНОБОЛ , СПИТБОЛ
Под влиянием
COMIT
Под влиянием
AWK , SL5, Icon , бс , Lua

SNOBOL ( «Струнное Oriented и символический язык») представляет собой ряд языков программирования , разработанных в период с 1962 по 1967 году в AT & T Bell Laboratories по Дэвиду Дж Фарберу , Ральф Грисуолду и Иван П. Полонский, завершившейся в SNOBOL4. Это был один из ряда языков, ориентированных на текстовую строку, которые были разработаны в 1950-х и 1960-х годах; другие включали КОМИТ и ПРОФ .

SNOBOL4 отличается от большинства языков программирования своей эпохи тем, что имеет шаблоны как первоклассный тип данных ( т. Е. Тип данных, значениями которого можно манипулировать всеми способами, разрешенными для любого другого типа данных в языке программирования) и предоставляя операторы для шаблонов конкатенация и чередование . Шаблоны SNOBOL4 являются типом объектов и допускают различные манипуляции, как и более поздние объектно-ориентированные языки, такие как JavaScript , шаблоны которых известны как регулярные выражения . Кроме того, строки SNOBOL4, сгенерированные во время выполнения, можно рассматривать как программы и либо интерпретировать, либо компилировать и выполнять (как в функции eval в других языках).

SNOBOL4 довольно широко преподавался в крупных университетах США в конце 1960-х - начале 1970-х годов и широко использовался в 1970-х и 1980-х годах в качестве языка манипулирования текстом в гуманитарных науках .

В 1980-х и 1990-х годах его использование исчезло, поскольку новые языки, такие как AWK и Perl, сделали модными манипуляции со строками с помощью регулярных выражений . Шаблоны SNOBOL4 включают грамматики BNF , которые эквивалентны контекстно-свободным грамматикам и более эффективны, чем регулярные выражения. «Регулярные выражения» в текущих версиях AWK и Perl на самом деле являются расширениями регулярных выражений в традиционном смысле , но регулярные выражения, в отличие от шаблонов SNOBOL4, не рекурсивны, что дает явное вычислительное преимущество шаблонам SNOBOL4. (Рекурсивные выражения действительно появились в Perl 5.10, выпущенном в декабре 2007 года.)

Позже SL5 (1977) и Icon (1978) языки были разработаны Грисуолд сочетать откаты от SNOBOL4 согласования модели с более стандартным Алголом -как структуризации.

Разработка

СНОБОЛ1

Первоначальный язык SNOBOL был создан как инструмент, который будут использоваться его авторами для работы с символьными манипуляциями с многочленами. Он был написан на ассемблере для IBM 7090 . У него был простой синтаксис, только один тип данных, строка, без функций и объявлений, и очень мало контроля ошибок. Однако, несмотря на его простоту и «личный» характер, его использование начало распространяться на другие группы. В итоге авторы решили его расширить и привести в порядок.

СНОБОЛ2

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

СНОБОЛ3

SNOBOL был переписан, чтобы добавить функции, как стандартные, так и определяемые пользователем, и результат был выпущен как SNOBOL3. SNOBOL3 стал довольно популярным и был переписан для других компьютеров, кроме IBM 7090, другими программистами. В результате возникло несколько несовместимых диалектов.

СНОБОЛ4

По мере того, как SNOBOL3 становился все более популярным, авторы получали все больше и больше запросов на расширение языка. Они также начали получать жалобы на несовместимость и ошибки в версиях, которые они не писали. Чтобы решить эту проблему и воспользоваться преимуществами новых компьютеров, представленных в конце 1960-х годов, было принято решение разработать SNOBOL4 с множеством дополнительных типов данных и функций, но на основе виртуальной машины, чтобы обеспечить улучшенную переносимость между компьютерами. Переводчик языка SNOBOL4 все еще был написан на ассемблере. Однако использовался макро особенности ассемблера для определения инструкции виртуальной машины на S NOBOL I mplementation L anguage, в SIL. Это значительно улучшило переносимость языка, сделав относительно простым перенос виртуальной машины, на которой размещался переводчик, путем воссоздания ее виртуальных инструкций на любой машине, которая включала макроассемблер или действительно язык высокого уровня.

Машинно-независимый язык SIL возник как обобщение макросов обработки строк Дугласа Макилроя , которые широко использовались в начальной реализации SNOBOL. В 1969 году Макилрой снова повлиял на язык, настаивая на добавлении типа таблицы в SNOBOL4.

СНОБОЛ4 особенности

SNOBOL отличается форматом и стилем программирования, которые радикально отличаются от современных процедурных языков, таких как Fortran и ALGOL .

SNOBOL4 поддерживает ряд встроенных типов данных , таких как целые числа и действительные числа ограниченной точности , строки , шаблоны , массивы и таблицы (ассоциативные массивы), а также позволяет программисту определять дополнительные типы данных и новые функции . В то время в SNOBOL4 был развит тип данных, определяемый программистом - он похож на записи более раннего COBOL и более поздних языков программирования Pascal .

Все командные строки SNOBOL имеют вид

метка субъект шаблон = объект : передача

Каждый из пяти элементов является необязательным. Как правило, объект сопоставляется с шаблоном . Если объект присутствует, любая совпадающая часть заменяется объектом с помощью правил замены. Передача может быть абсолютным или ветвь условного перехода зависит от успеха или неудачи оценки предмета, оценки паттерна, сопоставление с образцом, оценки объекта или конечного назначения. Это также может быть перенос в код, созданный и скомпилированный самой программой во время выполнения.

Выкройка СНОБОЛ может быть очень простой или чрезвычайно сложной. Простой шаблон - это просто текстовая строка (например, «ABCD»), но сложный шаблон может быть большой структурой, описывающей, например, полную грамматику компьютерного языка. В СНОБОЛ можно реализовать языковой интерпретатор почти непосредственно из его формы Бэкуса – Наура с небольшими изменениями. Создание макроассемблера и интерпретатора для полностью теоретического аппаратного обеспечения может занять всего несколько сотен строк, а новая инструкция добавляется одной строкой.

Сложные шаблоны SNOBOL могут делать вещи, которые были бы непрактичными или невозможными при использовании более примитивных регулярных выражений, используемых в большинстве других языков сопоставления с образцом. Часть этой мощности происходит от так называемых «расширений SPITBOL» (которые с тех пор были включены практически во все современные реализации исходного языка SNOBOL 4), хотя можно достичь такой же мощности и без них. Частично эта мощь исходит из побочных эффектов, которые можно произвести во время операции сопоставления с образцом, включая сохранение многочисленных промежуточных / предварительных результатов сопоставления и возможность вызывать написанные пользователем функции во время сопоставления с образцом, которые могут выполнять практически любую желаемую обработку, и затем влиять на текущее направление, в котором принимает прерванное сопоставление с образцом, или даже на изменение самого образца во время операции сопоставления. Шаблоны могут быть сохранены, как и любой другой первоклассный элемент данных, и могут быть объединены, использованы в других шаблонах и использованы для создания очень сложных и сложных выражений шаблонов. Можно написать, например, шаблон SNOBOL4, который соответствует «полному имени и международному почтовому почтовому адресу», что значительно превосходит все, что практически возможно даже попытаться использовать регулярные выражения.

SNOBOL4 сопоставления с образцом использует алгоритм отслеживания в обратном направлении аналогичный тому , который используется в логическом программировании языка Prolog , который обеспечивает шаблон типа конструкций через DCGs . Этот алгоритм упрощает использование SNOBOL в качестве языка логического программирования, чем для большинства языков.

SNOBOL хранит переменные, строки и структуры данных в единой куче со сборкой мусора .

Примеры программ

"Привет, мир!" программа может быть такой ...

          OUTPUT = "Hello, World!"
END

Простая программа, которая запрашивает имя пользователя и затем использует его в выходном предложении ...

          OUTPUT = "What is your name?"
          Username = INPUT
          OUTPUT = "Thank you, " Username
END

Чтобы выбрать один из трех возможных выходов ...

          OUTPUT = "What is your name?"
          Username = INPUT
          Username "J"                                             :S(LOVE)
          Username "K"                                             :S(HATE)
MEH       OUTPUT = "Hi, " Username                                 :(END)
LOVE      OUTPUT = "How nice to meet you, " Username               :(END)
HATE      OUTPUT = "Oh. It's you, " Username
END

Чтобы продолжать запрашивать ввод до тех пор, пока больше не поступит ...

          OUTPUT = "This program will ask you for personal names"
          OUTPUT = "until you press return without giving it one"
          NameCount = 0                                            :(GETINPUT)
AGAIN     NameCount = NameCount + 1
          OUTPUT = "Name " NameCount ": " PersonalName
GETINPUT  OUTPUT = "Please give me name " NameCount + 1 
          PersonalName = INPUT
          PersonalName LEN(1)                                      :S(AGAIN)
          OUTPUT = "Finished. " NameCount " names requested."
END

Реализации

Классическая реализация была на PDP-10 ; он использовался для изучения компиляторов , формальной грамматики и искусственного интеллекта , особенно машинного перевода и машинного понимания естественных языков . Первоначальная реализация была на IBM 7090 в Bell Labs, Холмдел, Нью-Джерси. SNOBOL4 был специально разработан для портативности; первая реализация была начата на IBM 7094 в 1966 году, но завершена на IBM 360 в 1967 году. Она была быстро перенесена на многие другие платформы.

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

Гнат Ada Compiler поставляется с пакетом (GNAT.Spitbol) , который реализует все манипуляции строки семантики Spitbol. Это можно вызвать из программы Ada.

Редактор файлов для Michigan Terminal System (MTS) обеспечивал сопоставление с образцом на основе образцов SNOBOL4.

В настоящее время доступно несколько реализаций. Макрос SNOBOL4 на языке C, написанный Филом Бадном, представляет собой бесплатную реализацию с открытым исходным кодом, способную работать практически на любой платформе. Catspaw, Inc предоставила коммерческую реализацию языка SNOBOL4 для многих различных компьютерных платформ, включая DOS, Macintosh, Sun, RS / 6000 и другие, и эти реализации теперь доступны бесплатно от Catspaw. Minnesota SNOBOL4, автор Викторс Берстис, реализация ПК, наиболее близкая к исходной версии мэйнфрейма IBM (даже включая поддержку операторов FORMAT в стиле Фортран), также бесплатна.

Хотя сам SNOBOL не имеет функций структурированного программирования , препроцессор SNOBOL под названием Snostorm был разработан и реализован в 1970-х годах Фредом Шварцем для использования в терминальной системе штата Мичиган (MTS) в Мичиганском университете . Snostorm использовался на восьми-пятнадцати сайтах МТС. Он также был доступен в Университетском колледже Лондона (UCL) с 1982 по 1984 год.

Snocone Эндрю Кенига добавляет в язык SNOBOL4 блочно-структурированные конструкции. Snocone - это автономный язык программирования, а не надмножество SNOBOL4.

Реализация SPITBOL также представила ряд функций, которые, хотя и не используют традиционные ключевые слова структурированного программирования, тем не менее могут использоваться для обеспечения многих эквивалентных возможностей, обычно называемых «структурированным программированием», в первую очередь вложенных конструкций типа if / then / else. С тех пор эти функции были добавлены в самые последние реализации SNOBOL4. После многих лет существования коммерческого продукта в апреле 2009 года SPITBOL был выпущен как бесплатное программное обеспечение под Стандартной общественной лицензией GNU .

Именование

По словам Дэйва Фарбера, он, Грисволд и Полонски «наконец-то пришли к названию« Символьный интерпретатор выражения SEXI ».

Все шло хорошо, пока однажды я не отправил пакетное задание на сборку системы и, как обычно, на моей карте JOB - первой карте в колоде, я, по стандартам BTL, набрал свою работу и свое имя - SEXI Farber.

Одна из девушек из Comp Center посмотрела на это и с юмором сказала: «Это то, что вы думаете».

Это дало понять, что нам нужно другое имя !! Мы сидели, разговаривали, пили кофе и снимали резиновые ленты, и спустя слишком много времени кто-то сказал - скорее всего, Ральф - «У нас нет шанса Снежка, черт возьми, найти имя». Мы все сразу закричали: «МЫ ПОЛУЧИЛИ - СНОБОЛ» в духе всех языков болгарского языка . Затем мы напрягли свой разум, чтобы найти то, что он обозначал.

Общие бэкронит из «SNOBOL» являются «Строка Oriented символическим языком» или (как квази-аббревиатура ) 'Струнного Oriented символического языком.

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

использованная литература

дальнейшее чтение

  • Эммер, Марк Б. SNOBOL4 +: язык SNOBOL4 для пользователя персонального компьютера . Энглвуд Клиффс, Нью-Джерси: Прентис-Холл, 1985 ( ISBN  0-13-815119-9 ).
  • Гимпель, Джеймс Ф. Алгоритмы в СНОБОЛ4 . Нью-Йорк: Wiley, 1976 ( ISBN  0-471-30213-9 ); переиздан Salida, CO: Catspaw, 1986 ( ISBN  0-939793-00-8 ).
  • Грисволд, Ральф Э. Макро-реализация SNOBOL4 . Сан-Франциско, Калифорния: WH Freeman and Company, 1972 ( ISBN  0-7167-0447-1 ).
  • Грисволд, Ральф Э., Дж. Ф. Поаж и И. П. Полонски. Язык программирования СНОБОЛ4 . Englewood Cliffs, NJ: Prentice Hall, 1968 ( ISBN  0-13-815373-6 ).
  • Грисволд, Ральф Э. Обработка строк и списков в SNOBOL4: методы и приложения . Englewood Cliffs, NJ: Prentice Hall, 1975 ( ISBN  0-13-853010-6 ).
  • Хоккей, Сьюзен М. Снобол Гуманитарное программирование . Нью-Йорк: Clarendon Press; Оксфорд: Издательство Оксфордского университета, 1985 ( ISBN  0-19-824676-5 ).

внешние ссылки