]]> ]]>

Morphett's FALSE

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

Онлайн-интерпретатор FALSE, написанный Anthony Morphett. Написан на JavaScript. Отличается от оригинального интерпретатора рядом нюансов, в том числе:

  • имена переменных могут состоять из произвольного количества букв, а не из единственной, как в оригинале. Впрочем, для соблюдения духа языка не рекомендуется использовать длинные осмысленные имена, и прибегать к ним только в том случае, если все более короткие имена уже заняты.
  • к списку команд добавлена rotate ® — извлекает из стека верхний элемент N и переносит N-ый элемент стека наверх. Это сделано для исправления основного неудобства оригинального языка — невозможности оперировать с элементами стека, кроме верхних трех.
  • команда flush ß не реализована, т.к. вывод не буферизован.
  • аргументы командной строки недоступны.
  • команда inline-ассемблера ` недоступна; вместо этого этот символ можно использовать для установки контрольных точек для отладки программ.

Внешний вид интерпретатора Morphett's FALSE
Внешний вид интерпретатора Morphett's FALSE

Примеры:

Hello, World!:

Пример для версий Morphett's FALSE, Wouter's FALSE 1.2.CF

Строка эквивалентна команде вывода ее содержимого на печать.

"Hello, World!"

Факториал:

Пример для версий Morphett's FALSE, Wouter's FALSE 1.2.CF

Используется итеративное вычисление факториала. В переменных i и f хранятся текущее число (счетчик цикла) и текущее значение факториала. После инициализации переменных начинается цикл: [i;17=~] — условие продолжения цикла: пока i не равно 17. Затем следует тело цикла, в котором выводится значение i и символьная константа, затем i увеличивается на 1, выводится старое значение факториала и вычисляется новое.

Для Wouter’s FALSE 1.2.CF значения факториала 13 и больше вычисляются с ошибкой из-за переполнения.

0i: 1f: 
[i;17=~]
[i; $."! = " 1+$i: f;$.10, *f:]
#

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

Пример для версий Morphett's FALSE, Wouter's FALSE 1.2.CF

Используется итеративное вычисление чисел Фибоначчи. Текущие числа хранятся в переменных a и b, счетчик цикла — в i.

Второй цикл примера очищает содержимое стека (числа Фибоначчи, записанные в него первым циклом). Некоторые интерпретаторы позволяют оставлять данные в стеке после конца работы программы, но, к примеру, Wouter’s FALSE 1.2.CF требует, чтобы стек был пустым, и выдает ошибку выполнения в противном случае.

0i: 1a: 1b:
[i;16=~]
[a; $. ", " $ b; $ a: + b: i;1+i:]
#
"..."

[1=~]
[]
#
%

CamelCase:

Пример для версий Morphett's FALSE

Введенная строка обрабатывается посимвольно. В Morphett’s FALSE строки вводятся во всплывающем окне, и признаком конца ввода является пустая строка, которая преобразуется в значение -1; поэтому в качестве признака конца цикла используется -1. Условное выполнение команд ? позволяет только выполнить команду, если условие истинно; для реализации ветви else приходится дублировать условие (переменная l), инвертировать его и использовать еще один оператор ?.

1_s: ^
[$1_=~]
[ $$ 96> \123\> & [32-]?
  $$ 64> \91\> & $l: [s;~[32+]? , 0s:]? l;~[1_s: %]?
^]
#

Комментарии

]]>

blog comments powered by Disqus

]]>

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