]]> ]]>

npiet

Реализация языка программирования Piet

npiet — интерпретатор для языка Piet, написанный на C. Работает с программами в формате .ppm, с версии 0.3 — .png и .gif. Кроме самого интерпретатора, в дистрибутив входит визуальный редактор программ npietedit, позволяющий автоматизировать выбор следующего цвета блока в зависимости от цвета текущего и нужной команды, и транслятор с foogol на Piet.

Внешний вид редактора npietedit
Внешний вид редактора npietedit

Примеры:

Hello, World!:

Пример для версий npiet 1.2

В этом примере используются только две команды — push и out(char). Для того, чтобы вывести на печать один символ, нужно сначала создать блок произвольного цвета из количества пикселей, равного ASCII-коду символа, затем справа от него создать блок цвета, на один темнее, из произвольного количества пикселей (команда push), и наконец, справа от него создать блок цвета, на один левее исходного, из произвольного количества символов (команда out(char)). После этого цикл повторяется.

Для того, чтобы закончить работу программы, используется петля — блок одного цвета, окруженный черными пикселями. Когда указатель инструкций попадает в этот блок, он не может его покинуть ни в каком направлении.

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

Hello, World! на Piet (базовый вариант)
Hello, World! на Piet (базовый вариант)

Hello, World! на Piet (базовый вариант, увеличение 5x)
Hello, World! на Piet (базовый вариант, увеличение 5x)

Hello, World! на Piet (декоративный вариант)
Hello, World! на Piet (декоративный вариант)

Hello, World! на Piet (декоративный вариант, увеличение 5x)
Hello, World! на Piet (декоративный вариант, увеличение 5x)

Hello, World!:

Пример для версий npiet 1.2

Этот пример сгенерирован автоматически, при помощи транслятора, написанного Сергеем Льюисом (Sergei Lewis). В комплект входят транслятор с C-подобного языка на ассемблер и с ассемблера — в изображение Piet. Так, в данном случае исходная программа выглядела следующим образом:

main()
{
asm{ @"Hello, World!\r\n" }
}

Hello, World! на Piet, сгенерированный автоматически
Hello, World! на Piet, сгенерированный автоматически

Hello, World! на Piet, сгенерированный автоматически (увеличение 5x)
Hello, World! на Piet, сгенерированный автоматически (увеличение 5x)

Факториал:

Пример для версий npiet 1.2

Этот пример сгенерирован автоматически. Ниже приведена исходная программа, из которой он был получен. Используется итеративное вычисление факториала. Значения 13! и больше вычисляются неправильно из-за переполнения.

main()
{
  f = 1;
  for ( i = 0; i <= 16; i++ )
  {
    __outn(i);
    asm{ @"! = " }
    __outn(f);
    __out(10);
    f = f * (i+1);
  }
}

Факториал на Piet
Факториал на Piet

Факториал на Piet (увеличение 4x)
Факториал на Piet (увеличение 4x)

Числа Фибоначчи:

Пример для версий npiet 1.2

Этот пример сгенерирован автоматически. Ниже приведена исходная программа, из которой он был получен. Используется итеративное вычисление чисел Фибоначчи.

main()
{
  f1 = 0;
  f2 = 1;
  for ( i = 1; i <= 16; i++ )
  {
    __outn(f2);
    __out(44);
    __out(32);
    f2 = f1 + f2;
    f1 = f2 - f1;
  }
  __out(46);
  __out(46);
  __out(46);
  __out(10);
}

Числа Фибоначчи на Piet
Числа Фибоначчи на Piet

Числа Фибоначчи на Piet (увеличение 4x)
Числа Фибоначчи на Piet (увеличение 4x)


Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам