Атом - значение в тексте программы, число, целое или число с плавающей запятой, строка. Строка обрамляется двойными кавычками
Введите
( Это комментарий )
1 2 + .
1 3,1415 + .
"hello" ", " "world!" + + .
, нажмите Execute. В нижнем окне выведется:
3
4,1415
hello, world!
Execute Ok!
В стек заталкивается значение 1, затем значение 2, выполняется слово +, при этом результат оказывается на вершине стека и с помощью слова "." (точка) верхнее значение на вершине стека печатается в вывод. Пока у меня получилось реализовать слово "." не по стандарту - вывод сопровождается переводом строки.
Слова в скрипте выполняются по порядку. Слова разделяются одним или нескольким пробелом,табом, символом перевода строки. Дробная часть в числе с плавающей точкой отделяется запятой. Символы "(" и ")" также являются словами, слово "(" отключает трансляцию дальнейших символов, слово ")" включает трансляцию дальнейших симоволов. Не забывайте о пробелах до и после скобок! Вложенные скобки не обрабатываются.
В документации по Форту принято документировать вновь определяемые слова (см. далее) следующим образом:
( nl n2 —-> сумма)
В стек сначала заносится n1, затем n2, то есть, как написано, при этом на вершине стека будет n2, дальше вглубь n1. "сумма" - результат операции. Может быть несколько результатов на стеке, отображаются таким образом, как будто их вводят - слева направо.
Ну и остальные такие же слова:
+ ( nl n2 —-> сумма) Сложение
- ( n1 n2 —-> разность) вычитание (nl-n2)
* ( n1 л2 —-> произвед) Умножение
/ ( n1 n2 —-> результат (возможно float)) Деление (nl/n2)
DIV (n1 n2 --> частное)
MOD ( nl n2 —-> n-остаток) Деление. В стек заносится остаток от деления
/MOD ( u1 u2 —-> n-остаток n— частное) Деление, В стек заносятся остаток и частное»
TRUE ( --> True) Заносит в стек True
FALSE ( --> False) Заносит в стек False
Логические и побитовые операции
Если на вершине стека наоходятся Boolean, выполняются логические операции
, если Int, Byte, Word, то побитовые операции
AND ( A B ---> A ) логическое И
OR ( A B ---> A ) логическое ИЛИ
XOR ( A B ---> A ) исключающее ИЛИ
NOT ( A ---> A ) логическое НЕ
Операции сравнения, работает с целыми, плавающими, строками
< ( A B ---> A < B ) меньше
= ( A B ---> A = B ) равно
> ( A B ---> A > B ) больше
0 ( A ---> A > 0 ) больше нуля
0= ( A ---> A = 0 ) равно нулю
0> ( A ---> A < 0 ) меньше нуля
Операции со стеком
DUP (n1 --> n1 n1) Дублирование верхнего элемента
SWAP (n1 n2 --> n2 n1) Замена двух элементов местами
OVER (n1 n2 --> n1 n2 n1) Копирование второго элемента и помещение его наверх
ROT (n1 n2 n3 --> n2 n3 n1) Третий элемент стека перетаскивается наверх
STACK_EMPTY ( --> )
заталкивает в стек True, если до этой операции стек был пуст
и False, если не пуст. Нестандартное слово