Язык программирования Шекспира
Язык программирования Шекспира ( SPL ) - это императивный эзотерический язык программирования (компьютерный язык), разработанный Карлом Хассельстремом и Джоном Ослундом в 2001 году , который был реализован на C и является одним из самых сложных языков программирования для изучения. Подобно Chef языка программирования , звуковое давление программа выглядит как - то совсем другое: На первом взгляде, звуковое давление программа выглядит как это была драма по Уильяму Шекспиру и следует его типичной структуре. Однако это не означает, что оригинальные произведения Шекспира можно понимать как SPL и их можно компилировать.
SPL ясно демонстрирует, что концепция функционального языка программирования не обязательно должна следовать общепринятым идеям. В принципе, структура и ключевые слова должны соответствовать только фиксированной схеме, чтобы обеспечить четкую интерпретацию, независимо от того, насколько разборчивым или логичным кажется человеку текст программы. И наоборот, программы SPL очень легко читать даже для людей, которые не умеют программировать, как драму. Значение для (непосвященного) человека и для компьютера здесь совершенно разные; два значения пересекаются. Поэтому SPL часто используется в обучении как пример языкового дизайна.
Как эти два значения перекрываются, какие элементы из драм Шекспира соответствуют каким элементам языка программирования, показано ниже.
Базовые знания
Язык программирования Шекспира является особенным с точки зрения синтаксиса, поскольку он не основан на арифметических и фиксированных символах, как все другие языки программирования, но дает разработчику большую свободу в его программе. Разработчик часто имеет возможность использовать те же функции программы, обмениваясь реальными языковыми элементами, такими как Б. для достижения существительных или прилагательных.
Кроме того, язык программирования основан на Уильяме Шекспире (вы можете программировать в драматической форме , так сказать ), что делает его уникальным, но к нему также нужно привыкнуть.
Следующие примеры взяты из первой программы на SPL - программы Hello World . Однако более сложные программы, такие как B. запрограммировать программу для определения простых чисел , как разработчик демонстрирует в своей документации на нескольких примерах.
функциональность
Название
Первая строка каждой «игры» в SPL - это название. Его можно выбрать произвольно, что придаст пьесе немного больше порядка и ясности. Поскольку его можно выбрать произвольно, компилятор распознает его только как комментарий и, следовательно, не влияет на функциональность программы. В результате название не является обязательным, но разработчики отмечают, что программа без названия так же плохо запрограммирована, как и драма без названия, написанная плохо.
Пример:
The Infamous Hello World Program
Персонажи (Dramatis Personæ)
Как и в любой шекспировской драме, сначала нужно определить людей. Это первые строки кода, которые распознаются компилятором как инструкции объявления и должны распознаваться, чтобы можно было гарантировать формальные аспекты языка программирования. Перечислены все персонажи пьесы, за которыми всегда следует краткое описание.
Пример:
Romeo, a young man with a remarkable patience. Juliet, a likewise young woman of remarkable grace. Ophelia, a remarkable woman much in dispute with Hamlet. Hamlet, the flatterer of Andersen Insulting A/S.
Символы подобны знаковому целое число - переменный или Chars , средство от операционной системы набора символов таблицы четко числовые значения могут быть назначены. Следующее описание символа является обязательным, но анализатор игнорирует его . Могут использоваться только персонажи, которые также играют роль в драмах Шекспира, т.е. в основном Ромео , Джульетта, Гамлет , Отелло , Макбет , Король Лир и т. Д. Действительные персонажи распознаются с помощью прилагаемого списка слов, который в настоящее время состоит из 152 символов.
Обнаженные и сцены
После того, как переменные или персонажи были объявлены, последовательность драмы следует за «Акт I» и «Сцена I», каждой из которых дается название. Как и в случае с названием программы, они рассматриваются компилятором только как комментарии; Однако после компиляции на C «Act» и «Scene» рассматриваются как метки перехода, к которым вы можете перейти с помощью инструкций «GOTO» / перехода.
Как и в случае с заголовком, файлы и сцены не являются абсолютно необходимыми для успешной компиляции. Однако они не являются необязательными в интересах программиста, поскольку каждый программист в SPL, а также каждый драматург должен быть обязан структурировать свою программу / работу в действиях и сценах, чтобы можно было гарантировать читаемость и ясность.
Пример:
Act I: Hamlet’s insults and flattery. Scene I: The insulting of Romeo.
Входите, выходите и уходите.
Каждая сцена в каждом действии заключена в ключевые слова, которые открывают и закрывают сцену. Как и в драме, написанной на раннем новоанглийском, они изначально назывались «[Enter]», «[Exit]» и «[Exit]». Чтобы позволить персонажу говорить и тем самым заставить программу что-то делать, персонажи должны находиться на сцене согласно логике. Персонажи, которые обращаются к другим персонажам, уже находящимся на сцене, с помощью «ты», «ты» или любого другого местоимения от второго лица также должны быть помещены на сцену. Персонажи выходят на сцену, указывая свою команду «[Enter]» как своего рода параметр.
Пример:
[Enter Hamlet and Romeo]
Соответственно, персонажи снова уходят со сцены. Это делается с помощью команды «[Выход]» или «[Выход]». Если фигура уходит, она должна быть упомянута после «[Выход]», например Б. «[Уходит Ромео]». Однако, если два или более персонажа уходят в отставку одновременно, необходимо использовать команду «Выйти». Конец сцены - особая ситуация: в этом случае часто все изображенные люди отходят. Одного «[Exeunt]» без каких-либо параметров достаточно, чтобы сообщить об этом компилятору.
Если вы дадите команду «Enter» персонажу, который уже находится на сцене, или «Exit» отсутствующему персонажу, компилятор сообщает об ошибке выполнения.
Пример:
[Exeunt] [Exeunt Hamlet and Romeo]
Диалог / инструкции
Как и в реальной драме, в основе любых инструкций SPL лежат диалоги. Разрешены простые инструкции, такие как присвоение арифметических и логических выражений и процедурных инструкций ( ввод и вывод ), а также структурированные инструкции управления ( инструкции перехода или условные инструкции ). Диалоговая часть одного символа состоит из имени персонажа, двоеточия и одного или нескольких предложений, которые представляют конкретные инструкции.
Пример:
Hamlet: You lying stupid fatherless big smelly half-witted coward! You are as stupid as the difference between a handsome rich brave hero and thyself! Speak your mind!
Литералы
В SPL литералы или константы определяются списком слов, которых всего три: отрицательное существительное, нейтральное существительное и положительное существительное. Любое английское слово из того же семейства списков слов может использоваться как синоним. Таким образом, литералы соответствуют предопределенным литературным константам, которым могут быть присвоены числовые значения в соответствии со следующими критериями:
- Каждое существительное в основном является константой со значением 1 или -1.
- Точное значение зависит от того, имеет ли существительное отрицательный или положительный оттенок, или от того, что нельзя сказать о своем переносном настроении:
- «Цветок» - з. Б. константа со значением 1.
- «Свинья» или «отрицание» были бы соответственно -1.
- «Дерево» - это з. Б. нейтральный, так как не передает определенного настроения и соответственно имеет значение 1.
Прилагательным также уделяется особое внимание в SPL. Они также делятся на три категории отрицательные, нейтральные и положительные с помощью списков слов:
- Каждое прилагательное должно соответствовать существительному по наклонению. «Вонючий цветок» тоже не имеет смысла с шекспировской точки зрения.
- Каждое предшествующее прилагательное умножает существительное на два.
Задания
Назначение переменных, уже известное из других языков программирования, и доступ к этим переменным (представленным в SPL персонажами произведений Шекспира) реализован в SPL следующим образом:
- Для присвоения переменных вы можете использовать только местоимение от второго лица (а именно «ты», «тебя» и «ты»), за которым следует выражение. Это выражение можно разделить на две категории:
- Присвоение литерала: в этом случае программа присваивает другому символу прямой литерал в форме существительного с необязательным прилагательным перед ним. Другой персонаж, находящийся на сцене, перезаписывает предыдущее значение в своем стеке значением литерала.В этом случае стек адресуемого символа расширяется на значение -64.
You lying stupid fatherless big smelly half-witted coward!
- Присвоение выражения: в этом случае программа присваивает результат арифметического выражения (см. Ниже) другому символу. Для этого абсолютно необходимо указать оператор присваивания, который должен быть помещен между переменной и выражением в форме «as [любое прилагательное] as».В этом примере также объясняется, что значения предыдущих переменных можно использовать в расчетах. Возвратные местоимения «ты», «сам» и «я» действительны . Предполагая, что другого человека зовут «Гамлет», приведенная выше инструкция будет соответствовать следующему назначению: «Гамлет = 8 - Гамлет».
You are as stupid as the difference between a handsome rich brave hero and thyself!
- Присвоение литерала: в этом случае программа присваивает другому символу прямой литерал в форме существительного с необязательным прилагательным перед ним. Другой персонаж, находящийся на сцене, перезаписывает предыдущее значение в своем стеке значением литерала.
Выражения
Используя методологию, описанную выше, SPL сможет выразить любые естественные степени только по основанию 2 или инвертированному основанию 2 для сложения. Таким образом, в SPL появилась возможность реализовывать арифметические и пропозициональные выражения.
Арифметические выражения
Арифметическое выражение состоит из заранее определенных английских слов, описывающих математические операции. B. четыре основных математических арифметических операции «разность», «сумма», «произведение» и «частное», но также разрешены расширенные выражения, такие как «квадрат» или «куб». Эти операции могут быть связаны с «и» по мере необходимости и требуют соответствующей лингвистической корректности. Между арифметическими выражениями должны быть либо литералы, либо переменные:
Чуть более сложный пример:
„the difference between the square of the difference between my little pony and your big hairy hound and the cube of your sorry little codpiece“
Сначала вы заменяете константы числами. Таким образом, предложение меняется на:
„the difference between the square of the difference between 2 and -4 and the cube of −4“
Теперь разница между 2 и -4 равна 6, а третья степень −4 равна (−4) 3 (= −64). Поскольку квадрат 6 = 36, нижняя строка - это «разница между 36 и -64», что соответствует ровно 100. Таким образом, «разница между квадратом разницы между моим маленьким пони и вашей большой волосатой собакой и кубиком вашего жалкого маленького гульфика» = 100.
Пропозициональные выражения
Сравнения состоят из пропозициональных выражений, которые возвращают логическое значение. Позвольте и быть произвольными порядковыми типами данных :
- «Не хуже » тесты для = .
- Тесты " Лучше чем " на > .
- " Хуже " тестов на < .
Любой другой положительный сравнительный компаратор, такой как «больше», «свежее», «дружелюбнее», «лучше» или «веселее» может быть использован для «лучше».
Любой другой негативный сравнительный компаратор, такой как «мельче» или «меньше», также может использоваться для «худшего».
Если результат теста должен быть инвертирован, это может быть реализовано с помощью «не», например Б. «не так хорошо как» или «не лучше чем».
Ввод и вывод
Другого персонажа можно попросить использовать «Открой свое сердце» или «Выскажи свое мнение», чтобы вывести значение его переменной либо численно в первом случае, либо в виде символа, в зависимости от набора символов компьютера , во втором случае . Итак, несколько непрерывных вычислений и поштучный вывод символов для z. Например, символьная строка «Hello world!» Возможна только с одной переменной.
Соответственно, ввод значений ведет себя соответствующим образом: «Слушай свое сердце». Позволяет присваивать числовое значение адресуемому символу, а «Открой свой разум». Может использоваться для символа. Значения можно вводить с помощью любого поддерживаемого устройства ввода ; обычно это делается с помощью клавиатуры.
Инструкции по контролю
Инструкции по прыжкам
Команда, часто известная в компьютерных науках как «GOTO», обеспечивает простейшую итерацию и использовалась только в старых системах, а в настоящее время почти исключительно используется в гораздо более структурированных и упрощенных циклах (например, в счетных циклах или в циклах, управляемых головой или ногами). заменены. Тем не менее, существует возможность команды GOTO в SPL, поскольку возможность простой реализации команды перехода рассматривается как важный фактор для классификации в качестве языка программирования.
Реализация в SPL осуществляется с использованием ключевых терминов «Давайте», «Мы должны» или «Мы должны», за которыми следует «Вернуться на сцену [римская цифра]» или «Перейти к [римская цифра]» и означает, что вы должны перейти в соответствующее место. указанная сцена должна прыгнуть. Обратите внимание, что вы можете прыгать только внутри акта, но не между несколькими актами.
Условные утверждения
Условные операторы состоят из двух основных фрагментов, как показано в следующем примере:
Juliet:
Am I better than you?
Hamlet:
If so, let us proceed to scene III.
Сначала задается вопрос, который является сравнением (пропозициональным выражением) и имеет либо истинное, либо ложное возвращаемое значение (в информатике это называется логической переменной ).
За ним следует условный оператор, начинающийся с «если да» или «если нет» и запятой. Предложение после него выполняется только в том случае, если предыдущее утверждение истинно (или, если используется «если нет», оно, соответственно, ложно).
Компилятор
Разработчики SPL не писали свой собственный компилятор для SPL, но написали переводчик из SPL в C, который преобразует синтаксис SPL в действительный синтаксис C со следующими командами, которые могут быть выполнены в Linux :
./spl2c < hello.spl > hello.c
gcc -c hello.c
g++ hello.o libspl.a
На первом этапе программный код конвертируется из SPL в C с помощью программы spl2c, предоставленной разработчиком, затем на втором этапе он компилируется с помощью компилятора C gcc и с помощью заголовочного файла spl.h, предоставленного разработчиком . На последнем этапе скомпилированный программный модуль «hello.o» связывается с библиотекой «libspl.a», также предоставленной разработчиком, и создается исполняемая программа.
набухать
- ↑ Университет Нотр-Дам : Курс AME 437: Домашнее задание по проектированию систем управления 3 (на английском языке) «Для любых двух из четырех дифференциальных уравнений, которые вы решили на прошлой неделе в 2.9.5, также проверьте свой ответ, построив свое решение и решение, полученное численным путем. решение уравнения с использованием подпрограммы Рунге Кутты четвертого порядка, написанной на C, C ++, FORTRAN или языке программирования Шекспира ».
-
↑ Университет Западной Вирджинии : Курс английского языка 306: Темы гуманитарных вычислений ( памятная записка от 13 мая 2008 г. в Интернет-архиве ) (английский) «Луга 16 сентября, пауза и эффект, глава 2
МакКлауд,« Временные рамки »
Рекомендовано ЯМР : язык программирования Шекспира , Скотт Маклауд, Cloudmakers, Liquid Stage, Джимми Корриган, Костыль, Devil's Tramping Ground, Memex Engine, Ambient Machines, demain / When I am King ».
веб ссылки
- SPL, домашняя страница языка программирования Шекспира Калле Хассельстрёма, соавтора SPL, с документацией и исходным кодом (на английском языке)
- Домашняя страница языка программирования Шекспира на Sourceforge.net (английский)
- Описание языка, инструкции и введение (английский, PDF), версия от декабря 2001 г., по состоянию на 3 июня 2016 г.