Редактирование: Стековая нотация
Перейти к навигации
Перейти к поиску
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
'''Стековая нотация''' — минимальное требование к документированию слова [[Каллисто]], размером в одну строку. Пример ''стековой нотации'': | '''Стековая нотация''' — минимальное требование к документированию слова [[Каллисто]], размером в одну строку. Пример ''стековой нотации'': | ||
+ ( | + ( x1 x2 -- x3 ) Сложение. x3 ← x1 + x2 | ||
Слева находится имя того слова [[Каллисто]], которое документируется. В данном случае имя состоит из одной литеры "+". | Слева находится имя того слова [[Каллисто]], которое документируется. В данном случае имя состоит из одной литеры "+". | ||
Далее, в скобках, | Далее, в скобках, описаны состояния [[Стек данных|стека]] до и после выполнения слова, разделённые литерами "--". По принятому соглашению вершина стека находится справа. Всё, находящееся в [[Стек данных|стеке]] до указанных элементов, остаётся неизменным. | ||
Мы видим, что до выполнения слова "+" на стеке находилось два десятичных числа x1 и x2. Слово "+" убрало из стека верхнее из этих чисел, а нижнее заменило на x3. Если слово не меняет стек, ''стековая нотация'' выглядит вот так: | Мы видим, что до выполнения слова "+" на стеке находилось два десятичных числа x1 и x2. Слово "+" убрало из стека верхнее из этих чисел, а нижнее заменило на x3. Если слово не меняет стек, ''стековая нотация'' выглядит вот так: | ||
Строка 14: | Строка 14: | ||
Строго говоря, в [[Каллисто]] все элементы [[Стек данных|стека]] имеют одинаковый тип «[[десятичное число]]» и размер в 1 десятичный регистр. Но слова имеют определённые ожидания насчёт аргументов, передаваемых им через [[Стек данных|стек]]. Также кое-что можно сказать заранее о значениях, возвращаемых словами [[Каллисто]]. | Строго говоря, в [[Каллисто]] все элементы [[Стек данных|стека]] имеют одинаковый тип «[[десятичное число]]» и размер в 1 десятичный регистр. Но слова имеют определённые ожидания насчёт аргументов, передаваемых им через [[Стек данных|стек]]. Также кое-что можно сказать заранее о значениях, возвращаемых словами [[Каллисто]]. | ||
Традиционно эта дополнительная информация об аргументах и значениях отражается в буквах, которыми элементы [[Стек данных|стека]] обозначаются в ''стековой нотации'' | Традиционно эта дополнительная информация об аргументах и значениях отражается в буквах, которыми элементы [[Стек данных|стека]] обозначаются в ''стековой нотации'', а именно: | ||
a адрес в [[Единое адресное пространство|единой адресации]] (от 0 до 19'999) | a адрес в [[Единое адресное пространство|единой адресации]] (от 0 до 19'999) | ||
b 8-битное целое (от -128 до 255) | b 8-битное целое (от -128 до 255) | ||
c неотрицательное 8-битное целое (от 0 до 255) | c неотрицательное 8-битное целое (от 0 до 255) | ||
f флаг: −1 «истина», 0 «ложь» | f флаг: −1 «истина», 0 «ложь» | ||
ф флаг: 0 «ложь», отлично от нуля — «истина» | ф флаг: 0 «ложь», отлично от нуля — «истина» | ||
Строка 27: | Строка 25: | ||
т [[CFA|токен (CFA)]] слова | т [[CFA|токен (CFA)]] слова | ||
u неотрицательное целое (от 0 до 999'999'999'999) | u неотрицательное целое (от 0 до 999'999'999'999) | ||
x y z t любой элемент стека ([[десятичное число]] от -9,999'999'999'99e99 до 9,999'999'999'99e99) | x y z t любой элемент стека ([[десятичное число]] от -9,999'999'999'99e99 до 9,999'999'999'99e99) | ||
Строка 35: | Строка 32: | ||
↑ ( x -- x x ) Дублировать. | ↑ ( x -- x x ) Дублировать. | ||
2DUP ( | 2DUP ( x1 x2 -- x1 x2 x1 x2 ) Дублировать пару чисел. | ||
{{заготовка}} | {{заготовка}} | ||
[[Категория:Каллисто]] | [[Категория:Каллисто]] |