Jump to content

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

пробелами и подсветкой синтаксиса Программа hello world с
  вкладки
  пространства

Пробелы — это эзотерический язык программирования с синтаксисом , в котором значение имеют только символы пробелов ( пробел , табуляция и перевод строки ), в отличие от типичных языков, которые в значительной степени игнорируют символы пробелов. [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

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

  1. ^ Перейти обратно: а б с д и «Пробелы» . Компсок . Архивировано из оригинала 18 июня 2015 года . Проверено 8 декабря 2015 г.
  2. ^ Перейти обратно: а б Паркер, Мэтт (2019). Скромный Пи: комедия математических ошибок . Аллен Лейн. п. 21. ISBN  978-0-241-36023-1 .
  3. ^ Тимоти (1 апреля 2003 г.). «Новый язык программирования, использующий только пробелы» . Слэшдот . Проверено 23 января 2014 г.
  4. ^ Страуструп, Бьерн. «Обобщение перегрузки для C++ 2000» (PDF) . Флорхэм-Парк, Нью-Джерси, США: AT&T Labs . Проверено 23 января 2014 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 95b8ccd2eef737717d12bcd31f7b273d__1722364440
URL1:https://arc.ask3.ru/arc/aa/95/3d/95b8ccd2eef737717d12bcd31f7b273d.html
Заголовок, (Title) документа по адресу, URL1:
Whitespace (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)