wordlist constant prefix-wl \ словарь префиксных операторов
wordlist constant infix-wl \ словарь инфиксных операторов
\ вспомогательные слова для работы с контекстом поиска
: set-top ( wid -- )
>r get-order nip r> swap set-order ;
: infix infix-wl set-top ;
: prefix prefix-wl set-top ;
: create-in-wordlist ( wid "name" -- )
\ создать определение в определённом словаре
get-current swap set-current
create
set-current ;
: eval-word ( i*x c-addr -- j*x )
\ как evaluate, но для одного слова и в контексте исходной строки
find if
state @ if compile, else execute then
else
count evaluate
then ;
: prefix: ( xt "name" -- )
\ создать для xt определение в префиксном словаре
prefix-wl create-in-wordlist ,
does>
@ >r
bl word eval-word
r> execute
infix ;
: infix: ( xt "name" -- )
\ создать для xt определение в инфиксном словаре
infix-wl create-in-wordlist ,
does>
@ >r
prefix
bl word eval-word
r> execute ;
' - infix: -
' negate prefix: -
also infix
\ test
3 - - 0 - - 5 . \ 8
CndvcmRsaXN0IGNvbnN0YW50IHByZWZpeC13bCAgXCDRgdC70L7QstCw0YDRjCDQv9GA0LXRhNC40LrRgdC90YvRhSDQvtC/0LXRgNCw0YLQvtGA0L7Qsgp3b3JkbGlzdCBjb25zdGFudCBpbmZpeC13bCAgXCDRgdC70L7QstCw0YDRjCDQuNC90YTQuNC60YHQvdGL0YUg0L7Qv9C10YDQsNGC0L7RgNC+0LIKClwg0LLRgdC/0L7QvNC+0LPQsNGC0LXQu9GM0L3Ri9C1INGB0LvQvtCy0LAg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDQutC+0L3RgtC10LrRgdGC0L7QvCDQv9C+0LjRgdC60LAKOiBzZXQtdG9wICAoIHdpZCAtLSApCiAgICA+ciBnZXQtb3JkZXIgbmlwIHI+IHN3YXAgc2V0LW9yZGVyIDsKOiBpbmZpeCAgaW5maXgtd2wgc2V0LXRvcCA7CjogcHJlZml4ICBwcmVmaXgtd2wgc2V0LXRvcCA7Cgo6IGNyZWF0ZS1pbi13b3JkbGlzdCAgKCB3aWQgIm5hbWUiIC0tICkKICAgIFwg0YHQvtC30LTQsNGC0Ywg0L7Qv9GA0LXQtNC10LvQtdC90LjQtSDQsiDQvtC/0YDQtdC00LXQu9GR0L3QvdC+0Lwg0YHQu9C+0LLQsNGA0LUKICAgIGdldC1jdXJyZW50IHN3YXAgc2V0LWN1cnJlbnQKICAgIGNyZWF0ZQogICAgc2V0LWN1cnJlbnQgOwoKOiBldmFsLXdvcmQgICggaSp4IGMtYWRkciAtLSBqKnggKQogICAgXCDQutCw0LogZXZhbHVhdGUsINC90L4g0LTQu9GPINC+0LTQvdC+0LPQviDRgdC70L7QstCwINC4INCyINC60L7QvdGC0LXQutGB0YLQtSDQuNGB0YXQvtC00L3QvtC5INGB0YLRgNC+0LrQuAogICAgZmluZCBpZgogICAgICAgIHN0YXRlIEAgIGlmICBjb21waWxlLCAgZWxzZSAgZXhlY3V0ZSAgdGhlbgogICAgZWxzZQogICAgICAgIGNvdW50IGV2YWx1YXRlCiAgICB0aGVuIDsKCjogcHJlZml4OiAgKCB4dCAibmFtZSIgLS0gKQogICAgXCDRgdC+0LfQtNCw0YLRjCDQtNC70Y8geHQg0L7Qv9GA0LXQtNC10LvQtdC90LjQtSDQsiDQv9GA0LXRhNC40LrRgdC90L7QvCDRgdC70L7QstCw0YDQtQogICAgcHJlZml4LXdsIGNyZWF0ZS1pbi13b3JkbGlzdCAsCiAgICBkb2VzPgogICAgICAgIEAgPnIKICAgICAgICBibCB3b3JkIGV2YWwtd29yZAogICAgICAgIHI+IGV4ZWN1dGUKICAgICAgICBpbmZpeCA7Cgo6IGluZml4OiAgKCB4dCAibmFtZSIgLS0gKQogICAgXCDRgdC+0LfQtNCw0YLRjCDQtNC70Y8geHQg0L7Qv9GA0LXQtNC10LvQtdC90LjQtSDQsiDQuNC90YTQuNC60YHQvdC+0Lwg0YHQu9C+0LLQsNGA0LUKICAgIGluZml4LXdsIGNyZWF0ZS1pbi13b3JkbGlzdCAsCiAgICBkb2VzPgogICAgICAgIEAgPnIKICAgICAgICBwcmVmaXgKICAgICAgICBibCB3b3JkIGV2YWwtd29yZAogICAgICAgIHI+IGV4ZWN1dGUgOwoKJyAtIGluZml4OiAtCicgbmVnYXRlIHByZWZpeDogLQoKYWxzbyBpbmZpeAoKXCB0ZXN0CjMgLSAtIDAgLSAtIDUgLiAgXCA4Cgo=