Пробелы (язык программирования)

Пробелы — это эзотерический язык программирования с синтаксисом , в котором значение имеют только символы пробелов ( пробел , табуляция и перевод строки ), в отличие от типичных языков, которые в значительной степени игнорируют символы пробелов. [1] [2]
Вследствие своего синтаксиса исходный код пробелов может содержаться внутри пробелов кода, написанного на языке, который игнорирует пробелы, что делает текст многоязычным . [2]
Пробелы — это императивный язык , основанный на стеке . Программист может помещать целочисленные значения произвольной ширины в стек и получать доступ к куче для хранения данных.
Интерпретатор исходным кодом вместе с его на Haskell предоставлен создателями Whitespace.
История
[ редактировать ]Эдвин Брэди и Крис Моррис, которые также разработали языки Kaya и Idris , создали Whitespace в 2002 году в Даремском университете . Slashdot опубликовал обзор в День смеха 2003 года. [3]
Идея использования пробельных символов в качестве операторов языка C++ была в шутку предложена пятью годами ранее Бьярном Страуструпом . [4]
Синтаксис
[ редактировать ]Пробелы определяют команду как последовательность символов пробелов. Например, [Tab][Space][Space][Space]
выполняет арифметическое сложение двух верхних элементов стека.
Команда записывается как параметр модификации инструкции (IMP), за которым следует операция, а затем любые параметры. [1]
Последовательности IMP включают:
ИМП | Значение |
---|---|
[Космос] | Манипулирование стеком |
[Tab][Пробел] | Арифметика |
[Вкладка][Вкладка] | Доступ к куче |
[Перевод строки] | Управление потоком |
[Tab][Перевод строки] | ввод/вывод |
Последовательности операторов, организованные IMP, включают: [1]
ИМП | Оператор | Параметр | Значение |
---|---|---|---|
[Космос] | [Космос] | Число | Поместить число в стек |
[Космос] | [LF][Пробел] | - | Дублируйте верхний элемент стека |
[Космос] | [Tab][Пробел] | Число | Скопируйте n-й элемент стека (заданный аргументом) на вершину стека. |
[Космос] | [LF][Tab] | - | Поменяйте местами два верхних элемента в стопке. |
[Космос] | [ЛФ][ЛФ] | - | Отбросить верхний элемент стека |
[Космос] | [Tab][LF] | Число | Выдвиньте n элементов из стопки, оставив верхний элемент. |
[Tab][Пробел] | [Пробел][Пробел] | - | Добавление |
[Tab][Пробел] | [Пробел][Tab] | - | Вычитание |
[Tab][Пробел] | [Пробел][LF] | - | Умножение |
[Tab][Пробел] | [Tab][Пробел] | - | Целочисленное деление |
[Tab][Пробел] | [Вкладка][Вкладка] | - | Модуль |
[Вкладка][Вкладка] | [Космос] | - | Хранить в куче |
[Вкладка][Вкладка] | [Вкладка] | - | Получить из кучи |
[ЛФ] | [Пробел][Пробел] | Этикетка | Отметьте место в программе |
[ЛФ] | [Пробел][Tab] | Этикетка | Вызов подпрограммы |
[ЛФ] | [Пробел][LF] | Этикетка | Перейти к ярлыку |
[ЛФ] | [Tab][Пробел] | Этикетка | Перейти к метке, если вершина стека равна нулю |
[ЛФ] | [Вкладка][Вкладка] | Этикетка | Перейти к метке, если вершина стека отрицательна |
[ЛФ] | [Tab][LF] | - | Завершить подпрограмму и передать управление обратно вызывающей стороне. |
[ЛФ] | [ЛФ][ЛФ] | - | Завершить программу |
[Tab][LF] | [Пробел][Пробел] | - | Вывести символ наверху стека |
[Tab][LF] | [Пробел][Tab] | - | Выведите число на вершине стека |
[Tab][LF] | [Tab][Пробел] | - | Прочитайте символ и поместите его в место, указанное на вершине стека. |
[Tab][LF] | [Вкладка][Вкладка] | - | Прочтите число и поместите его на место, указанное вершиной стопки. |
Операции копирования и слайда были добавлены в Whitespace 0.3. [1]
Комментарии
[ редактировать ]Персонажи, кроме space
, tab
и linefeed
игнорируются и поэтому могут использоваться для комментариев.
Числа
[ редактировать ]Числовое значение представляется в виде последовательности space
и tab
символы, обозначающие 0 и 1 соответственно и заканчивающиеся символом linefeed
. Первый символ представляет знак значения – space
для позитива и tab
для негатива. Последующие символы перед разделителем представляют собой двоичные цифры значения.
Например:
- [пробел][tab][пробел][пробел][tab][пробел][tab][tab][перевод строки] (STSSTSTTL) является положительным, поскольку начинается с
space
и представляет собой 1001011 в двоичном формате, что составляет 75 в десятичном виде. - [tab][tab][tab][пробел][пробел][tab][пробел][перевод строки] (TTTSSTSL) имеет отрицательное значение, поскольку начинается с
tab
и представляет -110010 в двоичном формате, что равно -50 в десятичном формате.
Этикетки
[ редактировать ]Метка используется для потока управления . Это linefeed
-завершенная последовательность space
и tab
персонажи. Поскольку существует только одно пространство имен, все метки должны быть уникальными.
[1]
Пример кода
[ редактировать ]Следующий исходный код предназначен для пробела «Hello, world!» программа. Для ясности оно помечено пометкой S
, T
и L
перед каждым
space
,
tab
, и linefeed
.
S S S T S S T S S S L:Push_+1001000=72='H'_onto_the_stack T L S S :Output_'H';_S S S T T S S T S T L:Push_+1100101=101='e'_onto_the_stack T L S S :Output_'e';_S S S T T S T T S S L:+1101100=108='l' T L S S S S S T T S T T S S L:+1101100=108='l' T L S S S S S T T S T T T T L:+1101111=111='o' T L S S S S S T S T T S S L:+101100=44=',' T L S S S S S T S S S S S L:+100000=32=Space T L S S S S S T T T S T T T L:+1110111=119='w' T L S S S S S T T S T T T T L:+1101111=111='o' T L S S S S S T T T S S T S L:+1110010=114='r' T L S S S S S T T S T T S S L:+1101100=108='l' T L S S S S S T T S S T S S L=+1100100=100='d' T L S S S S S T S S S S T L:+100001=33='!' T L S S :Output_'!';_L L L:End_the_program
Когда исходный код пробелов отображается в некоторых браузерах, горизонтальный интервал, создаваемый символом табуляции, не фиксирован, а зависит от его местоположения в тексте относительно следующей горизонтальной позиции табуляции . В зависимости от программного обеспечения символы табуляции также могут быть заменены соответствующим переменным количеством символов пробела.
Ссылки
[ редактировать ]- ^ Перейти обратно: а б с д и «Пробелы» . Компсок . Архивировано из оригинала 18 июня 2015 года . Проверено 8 декабря 2015 г.
- ^ Перейти обратно: а б Паркер, Мэтт (2019). Скромный Пи: комедия математических ошибок . Аллен Лейн. п. 21. ISBN 978-0-241-36023-1 .
- ^ Тимоти (1 апреля 2003 г.). «Новый язык программирования, использующий только пробелы» . Слэшдот . Проверено 23 января 2014 г.
- ^ Страуструп, Бьерн. «Обобщение перегрузки для C++ 2000» (PDF) . Флорхэм-Парк, Нью-Джерси, США: AT&T Labs . Проверено 23 января 2014 г.
Внешние ссылки
[ редактировать ]- Официальный сайт
- Анонс релиза на Slashdot
- The Whitespace Corpus Коллекция интерпретаторов, компиляторов и программ для Whitespace.
- Коллекция интерпретаторов пробелов на различных языках сценариев.
- Acme::Bleach Модуль Perl , который перезаписывает тело вашего модуля в кодировку, состоящую только из пробелов («для действительно чистых программ»).