Автор работы: Пользователь скрыл имя, 03 Февраля 2013 в 16:37, курсовая работа
Давно минули времена, когда программирование вычислительных машин выражало строгий язык математики и было уделом профессионалов, представлявших с помощью компьютерных программ се¬рьезные технические задачи. Еще 20-30 лет назад мало кто мог подумать о том, чтобы написать программу, не несущую ника¬кой, с виду, практической пользы.
Введение. 2
Глава 1. Описание языка Piet. 3
Что такое язык PIET? 3
Бесполезные или эзотерические? 3
Простой ЭЯП, не полный по Тьюрингу 4
Классификация полных ЭЯП 4
Многомерное программирование 5
Программист Пит Мондриан 6
Основы языка Цвета 6
Коделы 7
Стек 7
Исполнение программ на Piet 8
Другие элементы синтаксиса 9
Глава 2. Программирование на Piet 12
Интерпретатор npiet 12
Среда npietedit 12
Первая программа 12
Как читать трассировку 15
Более сложные программы 16
Заключение 17
Список литературы. 21
Приложения 22
Основной структурой хранения данных в Piet является стек. Язык подобно Forth — бестиповый, данные существуют только в виде целых неотрицательных чисел, но могут быть интерпретированы разными способами — например, выведены на экран как символы Юникода.
Приведем список команд Piet с пояснениями:
push: кладет на стек число, соответствующее числу коделов в цветовом блоке, из которого интерпретатор только что вышел;
pop: выкидывает одно число с вершины стека;
add, sub, mul, div, mod: арифметические команды. Снимают
два числа с вершины стека, складывают/вычитают/умножают/
not: заменяет значение на вершине стека на О, если оно было ненулевым, и на 1 в противоположном случае;
greater: снимает со стека два числа и кладет туда единицу, если второе число от вершины стека больше, чем число, которое было на вершине, и ноль в противном случае;
pointer: снимает число с вершины стека и меняет направление DP по часовой стрелке данное число раз. Если снятое число отрицательно, то вращение происходит против часовой стрелки;
switch: снимает число с вершины стека и меняет направление СС данное число раз;
dup: копирует число на вершине стека и кладет его на стек (создает копию вершины);
roll: снимает два числа — тг (вершина) и т (второе число после вершины) со стека и производит с оставшимися на стеке числами следующую операцию: вращает т чисел от вершины стека п раз. Вращение т чисел один раз производится так: вершина стека кладется на глубину т, а глубина всех элементов, располагавшихся на глубине меньшей или равной т, уменьшается на единицу. Если п отрицательно, то вращение производится в противоположном направлении. Если т отрицательно, то команда просто игнорируется;
in, out: команды ввода-вывода; in читает из входного потока число (или символ) и кладет его на стек, out снимает число со стека и выводит его в выходной поток в виде числа или символа Юникода.
В работе мы рассмотрели пример двух задач: типовую и более сложную.
Приведём пример типовой задачи:
Рассмотрим программу, читающую из входного потока число и возвращающую результат умножения этого числа на два (без символа перевода строки), оставив само число на стеке. Один из вариантов такой программы приведен на рис.( Приложение 3)
Для начала такую программу надо записать в виде текста с использованием вышеописанных команд Piet:
in (число)
dup
push 2
mulout (число)
Сначала мы вводим число командой in и копируем его с помощью dup, после чего помещаем на стек двойку и вызываем mul. Полученный результат должен быть выведен командой out.
Итак, как мы увидели, язык Piet сложен и интересен, а программирование на нем является поистине искусством для избранных. Но есть ли способы еще сильнее усложнить себе жизнь и разработать какой- нибудь еще более невероятный диалект этого языка? Разумеется! Можно, например, добавить еще одно измерение и ввести концепцию "вокоделов" (объемных коделов), дать возможность регистру DP принимать шесть различных значений, а регистру СС — четыре. С другой стороны, можно добавить более сложные варианты уже привычных направлений и траекторий: все возможно.
Приложение 1
Приложение 2
Приложение 3
Программа на Piet, умножающая заданное число на 2
Приложение 4
"Скелет" вышеприведенной программы
Приложение 5
Результат трассировки программы
Приложение 6