Snostorm (Snostorm3) — это версия языка SNOBOL4 с добавленными структурными конструкциями программирования. Он компенсирует почти полное отсутствие структурных конструкций программирования в SNOBOL4, предоставляя операторы IF, ELSEIF, ELSE, LOOP, CASE и PROCEDURE, среди прочих. Первоначально он был разработан и реализован Фредом Г. Шварцем как препроцессор для SPITBOL, работающего под управлением Michigan Terminal System (MTS) в вычислительном центре Мичиганского университета в 1970-х годах. [1]
Дополнительные функции включают логические операторы, структуры управления, включая процедуры, блоки инициализации, расширенные комментарии и управление листингом. [1]
Грамматика включает следующие дополнительные конструкции: [1]
Кроме того, MTS Snostorm предоставляет возможности для красивой печати и отладки с помощью компилятора Spitbol.
Синтаксис Snostorm в значительной степени нечувствителен к пробелам и переводам строк, но не полностью из-за его зависимости от SNOBOL4 для выполнения.
Программа SNOBOL4, представленная в книге «Язык программирования SNOBOL4» Грисволда, Поаджа и Полонски [2], а затем та же программа, переписанная на Snostorm. [1]
... ЧТЕНИЕ ВЫВОДА = ВВОД : F ( ОТОБРАЖЕНИЕ ) ТЕКСТ = ВЫВОД СЛЕДУЮЩИЙ ТЕКСТ СИМВОЛ = : F ( ЧТЕНИЕ ) СЧЕТЧИК < CH > = СЧЕТЧИК < CH > + 1 :( СЛЕДУЮЩИЙ ) ОТОБРАЖЕНИЕ ВЫВОДА = ЦИКЛ БУКВЫ СИМВОЛ = : F ( КОНЕЦ ) ВЫВОД = NE ( СЧЕТЧИК < CH >) CH ' ПРОИСХОДИТ ' СЧЕТЧИК < CH > ' РАЗ' + :( ЦИКЛ ) КОНЕЦ
... ЦИКЛ, ПОКА ТЕКСТ = ВВОД ВЫХОД = ТЕКСТ ЦИКЛ ПОКА ТЕКСТОВЫЙ СИМВОЛ = СЧЕТ<CH> = СЧЕТ<CH> + 1 КОНЕЧНЫЙ ЦИКЛ КОНЕЧНЫЙ ЦИКЛ ВЫХОД = ЦИКЛ ПОКА БУКВЫ СИМВОЛ = ЕСЛИ NE(СЧЕТ<CH>) ВЫХОД = CH ' ПРОИСХОДИТ ' COUNT<CH> ' РАЗ' КОНЕСЛИ КОНЕЧНЫЙ ЦИКЛКОНЕЦ
Помимо использования на восьми-пятнадцати сайтах, на которых работала система терминалов Мичигана, [1] компилятор Snostorm3 существовал в Университетском колледже Лондона (UCL) с 1982 по 1984 год и работал путем компиляции Snostorm3 в SNOBOL4, который затем мог быть запущен с помощью интерпретатора SNOBOL4 или с помощью компилятора SPITBOL для создания исполняемого файла. [ необходима ссылка ]