Стековая нотация: различия между версиями
AtH (обсуждение | вклад) |
AtH (обсуждение | вклад) Нет описания правки |
||
(не показана 21 промежуточная версия этого же участника) | |||
Строка 1: | Строка 1: | ||
'''Стековая нотация''' — минимальное требование к документированию слова [[Каллисто]], размером в одну строку. Пример стековой нотации: | '''Стековая нотация''' — минимальное требование к документированию слова [[Каллисто]], размером в одну строку. Пример ''стековой нотации'': | ||
+ ( | + ( y x -- x1 ) Сложение. x1 ← y + x | ||
Слева находится имя того слова [[Каллисто]], которое документируется. В данном случае имя состоит из одной литеры "+". | Слева находится имя того слова [[Каллисто]], которое документируется. В данном случае имя состоит из одной литеры "+". | ||
Далее, в скобках, описаны состояния [[Стек данных|стека]] до и после выполнения слова, разделённые литерами "--". По принятому соглашению вершина стека находится справа. | Далее, в скобках, идёт стековая диаграмма: описаны состояния [[Стек данных|стека]] до и после выполнения слова, разделённые литерами "--". По принятому соглашению вершина стека находится справа. За исключением особых случае (таких, как слова [[COLD]] и [[WARM]]) считается, что всё, находящееся в [[Стек данных|стеке]] до указанных элементов, остаётся неизменным. | ||
Мы видим, что до выполнения слова "+" на стеке находилось два десятичных числа x1 и x2. Слово "+" убрало из стека верхнее из этих чисел, а нижнее заменило на x3. Если слово не меняет стек, стековая нотация выглядит вот так: | Мы видим, что до выполнения слова "+" на стеке находилось два десятичных числа x1 и x2. Слово "+" убрало из стека верхнее из этих чисел, а нижнее заменило на x3. Если слово не меняет стек, ''стековая нотация'' выглядит вот так: | ||
DEGREES ( -- ) Градусы. | DEGREES ( -- ) Градусы. | ||
Стековая нотация завершается кратким названием слова, с возможным описанием его работы в свободном формате. | ''Стековая нотация'' завершается кратким названием слова, с возможным описанием его работы в свободном формате. | ||
== Обозначение типа элемента стека в стековой нотации == | == Обозначение типа элемента стека в ''стековой нотации'' == | ||
Строго говоря, в [[Каллисто]] все элементы [[Стек данных|стека]] имеют одинаковый тип «[[десятичное число]]» и размер в 1 десятичный регистр. Но слова имеют определённые ожидания насчёт аргументов, передаваемых им через [[Стек данных|стек]]. Также кое-что можно сказать заранее о значениях, возвращаемых словами [[Каллисто]]. | |||
Традиционно эта дополнительная информация об аргументах и значениях отражается в буквах, которыми элементы [[Стек данных|стека]] обозначаются в ''стековой нотации''. Каждая буква, включая d, означает ровно один элемент стека данных: | |||
a адрес в [[Единое адресное пространство|единой адресации]] (от 0 до 19'999) | |||
b 8-битное целое (от -128 до 255) | |||
c неотрицательное 8-битное целое (от 0 до 255) | |||
d 16-битное целое (от -32768 до 65535) | |||
D 16-битное целое со знаком (от -32768 до 32767) | |||
f флаг: −1 «истина», 0 «ложь» | |||
ф флаг: 0 «ложь», отлично от нуля — «истина» | |||
i 32-битное целое в [[Дополнительный код|дополнительном коде]] (от -2'147'483'648 до 2'147'483'647) | |||
n целое число (от -999'999'999'999 до 999'999'999'999) | |||
p неотрицательное [[десятичное число]] (от 0 до 9,999'999'999'99e99) | |||
т [[CFA|токен (CFA)]] слова | |||
u неотрицательное целое (от 0 до 999'999'999'999) | |||
U 16-битное беззнаковое (от 0 до 65535) | |||
x y z t любой элемент стека ([[десятичное число]] от -9,999'999'999'99e99 до 9,999'999'999'99e99) | |||
Одинаковые вхождения обозначения | Если в ''стековую нотацию'' входит несколько различных чисел данного типа, к букве может добавляться цифра, например x1 x2 x3 | ||
Одинаковые вхождения такого обозначения означают одно и тоже число, например: | |||
↑ ( x -- x x ) Дублировать. | ↑ ( x -- x x ) Дублировать. | ||
2DUP ( | 2DUP ( y x -- y x y x ) Дублировать пару чисел. | ||
Иногда буквами x y z t обозначаются вершина [[Стек данных|стека]] и три элемента под этой вершиной. Это не строгое правило, но оно упрощает изучение [[Каллисто]] тем, кто привык к 4-х уровневому стеку советских ПМК. | |||
{{заготовка}} | {{заготовка}} | ||
[[Категория:Каллисто]] | [[Категория:Каллисто]] |
Текущая версия от 20:43, 5 июня 2016
Стековая нотация — минимальное требование к документированию слова Каллисто, размером в одну строку. Пример стековой нотации:
+ ( y x -- x1 ) Сложение. x1 ← y + x
Слева находится имя того слова Каллисто, которое документируется. В данном случае имя состоит из одной литеры "+".
Далее, в скобках, идёт стековая диаграмма: описаны состояния стека до и после выполнения слова, разделённые литерами "--". По принятому соглашению вершина стека находится справа. За исключением особых случае (таких, как слова COLD и WARM) считается, что всё, находящееся в стеке до указанных элементов, остаётся неизменным.
Мы видим, что до выполнения слова "+" на стеке находилось два десятичных числа x1 и x2. Слово "+" убрало из стека верхнее из этих чисел, а нижнее заменило на x3. Если слово не меняет стек, стековая нотация выглядит вот так:
DEGREES ( -- ) Градусы.
Стековая нотация завершается кратким названием слова, с возможным описанием его работы в свободном формате.
Обозначение типа элемента стека в стековой нотации[править]
Строго говоря, в Каллисто все элементы стека имеют одинаковый тип «десятичное число» и размер в 1 десятичный регистр. Но слова имеют определённые ожидания насчёт аргументов, передаваемых им через стек. Также кое-что можно сказать заранее о значениях, возвращаемых словами Каллисто.
Традиционно эта дополнительная информация об аргументах и значениях отражается в буквах, которыми элементы стека обозначаются в стековой нотации. Каждая буква, включая d, означает ровно один элемент стека данных:
a адрес в единой адресации (от 0 до 19'999) b 8-битное целое (от -128 до 255) c неотрицательное 8-битное целое (от 0 до 255) d 16-битное целое (от -32768 до 65535) D 16-битное целое со знаком (от -32768 до 32767) f флаг: −1 «истина», 0 «ложь» ф флаг: 0 «ложь», отлично от нуля — «истина» i 32-битное целое в дополнительном коде (от -2'147'483'648 до 2'147'483'647) n целое число (от -999'999'999'999 до 999'999'999'999) p неотрицательное десятичное число (от 0 до 9,999'999'999'99e99) т токен (CFA) слова u неотрицательное целое (от 0 до 999'999'999'999) U 16-битное беззнаковое (от 0 до 65535) x y z t любой элемент стека (десятичное число от -9,999'999'999'99e99 до 9,999'999'999'99e99)
Если в стековую нотацию входит несколько различных чисел данного типа, к букве может добавляться цифра, например x1 x2 x3
Одинаковые вхождения такого обозначения означают одно и тоже число, например:
↑ ( x -- x x ) Дублировать. 2DUP ( y x -- y x y x ) Дублировать пару чисел.
Иногда буквами x y z t обозначаются вершина стека и три элемента под этой вершиной. Это не строгое правило, но оно упрощает изучение Каллисто тем, кто привык к 4-х уровневому стеку советских ПМК.
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |