История изменений
Исправление MOPKOBKA, (текущая версия) :
Посмотрел еще набор твоих слов, не особо внимательно, может пропустил.
1. Но не нашел у тебя слова .s https://forth-standard.org/standard/tools/DotS
Без него неудобно, оно выводит все значения стека. gforth доступен под linux бесплатно, там можно посмотреть как оно работает:
Gforth 0.7.3, Copyright (C) 1995-2008 Free Software Foundation, Inc.
Gforth comes with ABSOLUTELY NO WARRANTY; for details type `license'
Type `bye' to exit
1 2 3 4 5 ok
+ ok
* ok
.s <3> 1 2 27 ok
2. Так же у меня есть слово see https://forth-standard.org/standard/tools/SEE
Декомпилятор я пока не сделал, поэтому печатает hex слова. Но все равно удобнее чем вручную выковыривать.
3. Вывод числа на самом деле стоит начинать реализовывать в компиляторе не со слова .
, а со слов форматирования <# sign # #>:
https://forth.sourceforge.net/standard/fst83/fst83-12.htm#less-sharp
Если их реализуешь, то слово .
будет выглядеть так:
: #u ( вывод unsigned ) # dup 0 <> if rec then #r ;
: #n ( вывод signed ) sign #u ;
: . <# #n #> type space ;
<# - просто инициализирует указатели на буфер временный, для строк и форматирования
# - делит свой аргумент на переменную BASE, и добавляет в буфер символ, который берет из CH:=NUMTABLE[Остаток]. NUMTABLE это 0123456789ABCDEF..., если остаток=0, то добавит символ нуля, если остаток 10, а такое может быть только если BASE>10, то добавит символ A, так уже выводятся hex-числа.
#r - ну этой мой костыль, оно просто переворачивает буфер, потому что цифры пишутся задом наперед у меня из за алгоритма
sign - если число отрицательное, то пишет в буфер знак -, и делает число положительным
#> - выдает строку которая получилась из буфера
type - печатает строку
space - печатает пробел
В чем преимущество? Возможностей большей, можно делать свое форматирование, и не будет ограничение на значения BASE. Я например часто BASE устанавливаю в двойку, что бы посмотреть бинарное представление числа. Можно устанавливать в 24, не знаю какая у этого может быть цель, просто прикольно.
Исправление MOPKOBKA, :
Посмотрел еще набор твоих слов, не особо внимательно, может пропустил.
1. Но не нашел у тебя слова .s https://forth-standard.org/standard/tools/DotS
Без него неудобно, оно выводит все значения стека. gforth доступен под linux бесплатно, там можно посмотреть как оно работает:
Gforth 0.7.3, Copyright (C) 1995-2008 Free Software Foundation, Inc.
Gforth comes with ABSOLUTELY NO WARRANTY; for details type `license'
Type `bye' to exit
1 2 3 4 5 ok
+ ok
* ok
.s <3> 1 2 27 ok
2. Так же у меня есть слово see https://forth-standard.org/standard/tools/SEE
Декомпилятор я пока не сделал, поэтому печатает hex слова. Но все равно удобнее чем вручную выковыривать.
3. Вывод числа на самом деле стоит начинать реализовывать в компиляторе не со слова .
, а со слов форматирования <# sign # #>:
https://forth.sourceforge.net/standard/fst83/fst83-12.htm#less-sharp
Если их реализуешь, то слово .
будет выглядеть так:
: #u ( вывод unsigned ) # dup 0 <> if rec then #r ;
: #n ( вывод signed ) sign #u ;
: . <# #n #> type space ;
<# - просто инициализирует указатели на буфер временный, для строк и форматирования
# - делит свой аргумент на переменную BASE, и добавляет в буфер символ, который берет из CH:=NUMTABLE[Остаток]. NUMTABLE это 0123456789ABCDEF..., если остаток=0, то добавит символ нуля, если остаток 10, а такое может быть только если BASE>10, то добавит символ A, так уже выводятся hex-числа.
#r - ну этой мой костыль, оно просто переворачивает буфер, потому что цифры пишутся задом наперед у меня из за алгоритма
sign - если число отрицательное, то пишет в буфер знак -, и делает число положительным
#> - выдает строку которая получилась из буфера
type - печатает строку
space - печатает пробел
В чем преимущество? Возможностей большей, можно делать свое форматирование, и не будет ограничение на значения BASE. Я например часто BASE устанавливаю в двойку, что бы посмотреть бинарное представление числа. Можно устанавливать в 24, не знаю какая у этого цель, просто прикольно.
Исправление MOPKOBKA, :
Посмотрел еще набор твоих слов, не особо внимательно, может пропустил.
1. Но не нашел у тебя слова .s https://forth-standard.org/standard/tools/DotS
Без него неудобно, оно выводит все значения стека. gforth доступен под linux бесплатно, там можно посмотреть как оно работает:
Gforth 0.7.3, Copyright (C) 1995-2008 Free Software Foundation, Inc.
Gforth comes with ABSOLUTELY NO WARRANTY; for details type `license'
Type `bye' to exit
1 2 3 4 5 ok
+ ok
* ok
.s <3> 1 2 27 ok
2. Так же у меня есть слово see https://forth-standard.org/standard/tools/SEE
Декомпилятор я пока не сделал, поэтому печатает hex слова. Но все равно удобнее чем вручную выковыривать.
3. Вывод числа на самом деле стоит начинать реализовывать в компиляторе не со слова .
, а со слов форматирования <# sign # #>:
https://forth.sourceforge.net/standard/fst83/fst83-12.htm#less-sharp
Если их реализуешь, то слово .
будет выглядеть так:
: #u ( вывод unsigned ) # dup 0 <> if rec then #r ;
: #n ( вывод signed ) sign #u ;
: . <# #n #> type space ;
<# - просто инициализирует указатели на буфер временный, для строк и форматирования
# - делит свой аргумент на переменную BASE, и добавляет в буфер символ, который берет из CH:=NUMTABLE[Остаток]. NUMTABLE это 0123456789ABCDEF..., если остаток=0, то добавит символ нуля, если остаток 10, а такое может быть только если BASE>10, то добавит символ A, так уже выводятся hex-числа.
#r - ну этой мой костыль, оно просто переворачивает буфер, потому что цифры пишутся задом наперед у меня из за алгоритма
sign - если число отрицательное, то пишет в буфер знак -, и делает число положительным
#> - выдает строку которая получилась из буфера
type - печатает строку
space - печатает пробел
В чем преимущество? Возможностей большей, можно делать свое форматирование, и не будет ограничение на значения BASE. Я например часто BASE устанавливаю в двойку, что бы посмотреть бинарное представление числа.
Исправление MOPKOBKA, :
Посмотрел еще набор твоих слов, не особо внимательно, может пропустил.
1. Но не нашел у тебя слова .s https://forth-standard.org/standard/tools/DotS
Без него неудобно, оно выводит все значения стека. gforth доступен под linux бесплатно, там можно посмотреть как оно работает:
Gforth 0.7.3, Copyright (C) 1995-2008 Free Software Foundation, Inc.
Gforth comes with ABSOLUTELY NO WARRANTY; for details type `license'
Type `bye' to exit
1 2 3 4 5 ok
+ ok
* ok
.s <3> 1 2 27 ok
2. Так же у меня есть слово see https://forth-standard.org/standard/tools/SEE
Декомпилятор я пока не сделал, поэтому печатает hex слова. Но все равно удобнее чем вручную выковыривать.
3. Вывод числа на самом деле стоит начинать реализовывать в компиляторе не со слова .
, а со слов форматирования <# sign # #>:
https://forth.sourceforge.net/standard/fst83/fst83-12.htm#less-sharp
Если их реализуешь, то слово .
будет выглядеть так:
: #u ( вывод unsigned ) # dup 0 <> if rec then #r ;
: #n ( вывод signed ) sign #u ;
: . <# #n #> type space ;
<# - просто инициализирует указатели на буфер временный, для строк и форматирования
# - делит свой аргумент на переменную BASE, и добавляет в буфер символ, который берет из NUMTABLE[Остаток]. NUMTABLE это 0123456789ABCDEF..., если остаток=0, то добавит символ нуля, если остаток 10, а такое может быть только если BASE>10, то добавит символ A, так уже выводятся hex-числа.
#r - ну этой мой костыль, оно просто переворачивает буфер, потому что цифры пишутся задом наперед у меня из за алгоритма
sign - если число отрицательное, то пишет в буфер знак -, и делает число положительным
#> - выдает строку которая получилась из буфера
type - печатает строку
space - печатает пробел
В чем преимущество? Возможностей большей, можно делать свое форматирование, и не будет ограничение на значения BASE. Я например часто BASE устанавливаю в двойку, что бы посмотреть бинарное представление числа.
Исходная версия MOPKOBKA, :
Посмотрел еще набор твоих слов, не особо внимательно, может пропустил.
1. Но не нашел у тебя слова .s https://forth-standard.org/standard/tools/DotS
Без него неудобно, оно выводит все значения стека. gforth доступен под linux бесплатно, там можно посмотреть как оно работает:
Gforth 0.7.3, Copyright (C) 1995-2008 Free Software Foundation, Inc.
Gforth comes with ABSOLUTELY NO WARRANTY; for details type `license'
Type `bye' to exit
1 2 3 4 5 ok
+ ok
* ok
.s <3> 1 2 27 ok
2. Так же у меня есть слово see https://forth-standard.org/standard/tools/SEE
Декомпилятор я пока не сделал, поэтому печатает hex слова. Но все равно удобнее чем вручную выковыривать.
3. Вывод числа на самом деле стоит начинать не со слова .
, а со слов форматирования <# sign # #>:
https://forth.sourceforge.net/standard/fst83/fst83-12.htm#less-sharp
Если их реализуешь, то слово .
будет выглядеть так:
: #u ( вывод unsigned ) # dup 0 <> if rec then #r ;
: #n ( вывод signed ) sign #u ;
: . <# #n #> type space ;
<# - просто инициализирует указатели на буфер временный, для строк и форматирования
# - делит свой аргумент на переменную BASE, и добавляет в буфер символ, который берет из NUMTABLE[Остаток]. NUMTABLE это 0123456789ABCDEF..., если остаток=0, то добавит символ нуля, если остаток 10, а такое может быть только если BASE>10, то добавит символ A, так уже выводятся hex-числа.
#r - ну этой мой костыль, оно просто переворачивает буфер, потому что цифры пишутся задом наперед у меня из за алгоритма
sign - если число отрицательное, то пишет в буфер знак -, и делает число положительным
#> - выдает строку которая получилась из буфера
type - печатает строку
space - печатает пробел
В чем преимущество? Возможностей большей, можно делать свое форматирование, и не будет ограничение на значения BASE. Я например часто BASE устанавливаю в двойку, что бы посмотреть бинарное представление числа.