close

Вход

Забыли?

вход по аккаунту

?

Интерпретатор Piet - языка программирования с цветовым кодированием.

код для вставкиСкачать
Психолого-педагогический журнал Гаудеамус, №2 (16), 2010
ИНТЕРПРЕТАТОР PIET – ЯЗЫКА ПРОГРАММИРОВАНИЯ
С ЦВЕТОВЫМ КОДИРОВАНИЕМ
М.А. Гук, У.А. Ануфриева
Читинский государственный университет, г. Чита, Россия
Эзотерические языки программирования – вид языков программирования, не
предназначенных для практического применения. Образец компьютерного юмора.
Эзотерические языки придумываются для
развлечения, часто они пародируют «настоящие» или являются абсурдным воплощением
«серьезных» концепций программирования.
Некоторые эзотерические языки нарочно ограничены, другие – универсальны и обладают
тьюринговской полнотой. Общее свойство,
присущее любому эзотерическому языку, –
текст программы на нем понятен лишь «посвященному» либо непонятен вообще, потому
что для составления программы нужно написать программу на обычном языке. В то время как разработчики «реальных» языков программирования стараются сделать синтаксис
максимально понятным, а программирование – удобным, создатели эзотерических языков обычно ставят перед собой иные задачи.
В целом такие языки бесполезны, однако
программирование на некоторых из них яв-
ляется неплохой тренировкой. Эзотерические языки нередко включают в список разрешенных языков на конкурсах по программированию.
В данной работе мы решили реализовать
один из эзотерических языков программирования Piet. Этот язык предназначен для написания программ при помощи цветовых
единиц.
Язык Piet использует разноцветные изображения в качестве операторов языка. Программа на Piet выглядит как постживописная
абстракция.
Пиет использует 20 различных цветов,
как показано в таблице 1.
18 цветов первых трех строк в таблице
связаны циклически двумя следующими способами:
цикл оттенков: красный → желтый →
зеленый → голубой → синий → фиолетовый → красный;
цикл яркости: светлый → нормаль-ный
→ темный → светлый.
Таблица 1
Цвета Piet
#FFC0C0
light red
#FFFFC0
light yellow
#C0C0F
#C0FFC0 #C0FFFF
#FFC0FF
F
light green light cyan
light magenta
light blue
#FF0000
red
#FFFF00
yellow
#00FF00
green
#C00000
dark red
#C0C000
dark yellow
#00C000 #00C0C0 #0000C0 #C000C0
dark green dark cyan dark blue dark magenta
#FFFFFF white
#00FFFF #0000FF #FF00FF
cyan
blue
magenta
#000000 black
При этом подразумевается, что светлый
темнее, чем темный, и наоборот. Белый и
черный цвета не входят в циклы.
Дополнительные цвета, такие как оранжевый, коричневый, могут использоваться, хотя
их эффект зависит от реализации. В простейшем случае нестандартные цвета рассматриваются интерпретатором языка как белый, следовательно, могут использоваться везде, где используется белый (в другом случае они могут
использоваться как аналогичные черному).
Код на языке Piet представляет собой
форму графики, собранной из распознаваемых
цветов. Отдельные цветные пикселы важны в
языке, поэтому правило распространяется на
программы, подлежащие увеличению для того, чтобы стали видны детали. В таких увеличенных программах термин «кодел» используется для описания блока с цветом, эквивалентного одному пикселу кода, для того чтобы избежать путаницы с фактическими пик-
1
3. Механизмы развития инновационных процессов в эпоху информационного общества
селами увеличенной графики, которые в действительности могут быть одним коделом.
Основной элемент языка Piet – цветной
блок. Цветной блок – это блок любого числа
смежных коделов одного цвета, ограниченных блоками другого цвета либо краем графики программы. Цветные блоки, смежные
только диагонально, не считаются смежными. Цветной блок может быть любой формы
и может иметь «дыры» других цветов внутри, которые не являются частью блока.
Пиет использует стек для хранения всех
данных. Данные существуют только как целые числа, хотя они могут быть прочитаны
или выведены как Unicode символы соответствующими командами.
Интерпретатор языка Piet начинает выполнять программу в цветном блоке, который содержит верхний левый кодел программы. Интерпретатор содержит Указатель
Направления Direction Pointer (DP), который
вначале указывает вправо. DP может указывать вправо, влево, вверх, вниз. Интерпретатор также содержит «Выбирающего Коделы»
Codel Chooser (CC), вначале указывающего
влево. CC может указывать влево или вправо. Направления DP и CC обычно часто меняются во время выполнения программы.
Во время выполнения программы интерпретатор пересекает цветные блоки по следующим правилам:
1. Интерпретатор находит край текущего цветного блока, который является наиболее отдаленным в направлении DP (этот край
может быть не соединен напрямую, если
блок составной формы).
2. Интерпретатор находит кодел текущего цветного блока на этой границе, который наиболее отдален в направлении СС от
направления DP передвижения.
3. Интерпретатор перемещается от этого кодела в цветной блок, который содержит
Кодел, стоящий непосредственно по направлению DP.
Интерпретатор продолжает выполнять
эти действия, пока программа не завершится.
Каждый не черный и не белый цветной
блок в языке Piet представляет собой целый
эквивалент числу коделов в данном блоке.
Заметьте, что отрицательные целые числа не
могут быть представлены, хотя они могут
быть построены операторами. Когда интер-
претатор кодирует число, не обязательно делать что-либо с ним. В частности, он не помещает его в стек автоматически – есть специальная команда для этого.
Команды определены переходом из одного цветного блока в другой в соответствии
с перемещением по программе. Число шагов
по циклу цветов и циклу яркости в каждом
переходе определяет выполняемую команду.
Если переход осуществляется через белый
блок, команда не выполняется.
Некоторые команды языка:
push помещает значение только что
покинутого цветного блока в стек. Заметьте,
что значение цветного блока не помещается
в стек автоматически – эта операция должна
быть явно выполнена;
pop извлекает верхнее значение из стека, удаляя его;
add извлекает два верхних значения из
стека, складывает их и помещает результат
обратно в стек;
subtract извлекает два верхних значения из стека, вычитает верхнее значение из
второго и помещает результат обратно в
стек;
multiply извлекает два верхних значения из стека, умножает их и помещает результат обратно в стек;
divide извлекает два верхних значения
из стека, вычисляет целочисленное деление
второго значения на верхнее и помещает результат обратно в стек;
mod извлекает два верхних значения из
стека, находит остаток от деления второго
числа на первое и помещает результат обратно в стек;
not заменяет стековое значение на
ноль, если оно не нулевое, и на 1, если оно
нулевое;
greater извлекает два значения и помещает 1, если второе значение больше первого, 0 – если не больше;
pointer извлекает значение и поворачивает по часовой стрелке DP на данное число,
против часовой стрелки, если число отрицательное;
switch переключает CC требуемое число раз;
in читает число или символ в зависимости от того, что вы подразумеваете этой
командой, и помещает значение в стек;
2
Психолого-педагогический журнал Гаудеамус, №2 (16), 2010
out выводит число или символ.
Невыполнимые операции игнорируются
(извлечение из стека несуществующего значения).
Эзотерический язык программирования –
это интересно. Это одновременно и оригинальная шутка, и замысловатая математическая абстракция для изучения, и головолом-
ка. Фактически, написанный интерпретатор
представляет собой реализацию двумерного
конечного полностью определенного автомата. Такой пример, несомненно, является
хорошей практикой реализации интерпретаторов и тренировкой навыков программирования.
3
Документ
Категория
Без категории
Просмотров
12
Размер файла
165 Кб
Теги
язык, цветовых, кодирование, интерпретатор, piety, программирование
1/--страниц
Пожаловаться на содержимое документа