( Ñëîâà íåìåäëåííîãî âûïîëíåíèÿ, èñïîëüçóåìûå ïðè êîìïèëÿöèè
÷èñëîâûõ è ñòðî÷íûõ ëèòåðàëîâ â òåëî âûñîêîóðîâíåâîãî îïðåäåëåíèÿ.
ÎÑ-íåçàâèñèìûå îïðåäåëåíèÿ.
Copyright [C] 1992-1999 A.Cherezov ac@forth.org
Ïðåîáðàçîâàíèå èç 16-ðàçðÿäíîãî â 32-ðàçðÿäíûé êîä - 1995-96ãã
Ðåâèçèÿ - ñåíòÿáðü 1999
Ìîäèôèöèðîâàííî Ìàêñèìîâûì Ì.Î.
email:mak@mail.rtc.neva.ru
http://informer.rtc.neva.ru/
ò ä {812}105-92-03
ò ð {812}552-47-64
)
: [LIT], DUP
[ 0x058D W, ' DUP , ] INLINE,
0x058D W, , ;
\ 0 [IF]
: ['] \ 94
\ Èíòåðïðåòàöèÿ: ñåìàíòèêà íåîïðåäåëåíà.
\ Êîìïèëÿöèÿ: ( "<spaces>name" -- )
\ Ïðîïóñòèòü âåäóùèå ïðîáåëû. Âûäåëèòü name, îãðàíè÷åííîå ïðîáåëîì. Íàéòè name.
\ Äîáàâèòü ñåìàíòèêó âðåìåíè âûïîëíåíèÿ, äàííóþ íèæå, ê òåêóùåìó îïðåäåëåíèþ.
\ Íåîïðåäåëåííàÿ ñèòóàöèÿ âîçíèêàåò, åñëè name íå íàéäåíî.
\ Äîáàâèòü ñåìàíòèêó âðåìåíè âûïîëíåíèÿ, äàííóþ íèæå, ê òåêóùåìó îïðåäåëåíèþ,
\ Âðåìÿ âûïîëíåíèÿ: ( -- xt )
\ Ïîëîæèòü âûïîëíèìûé òîêåí èìåíè xt íà ñòåê. Âûïîëíèìûé òîêåí, âîçâðàùàåìûé
\ ñêîìïèëèðîâàííîé ôðàçîé "['] X" ÿâëÿåòñÿ òåì æå çíà÷åíèåì, ÷òî è âîçâðàùàåìîå
\ "' X" âíå ñîñòîÿíèÿ êîìïèëÿöèè.
?COMP ' [LIT],
; IMMEDIATE
\ [THEN]
: LITERAL \ 94 CORE
\ Èíòåðïðåòàöèÿ: ñåìàíòèêà íåîïðåäåëåíà.
\ Êîìïèëÿöèÿ: ( x -- )
\ Äîáàâèòü ñåìàíòèêó âðåìåíè âûïîëíåíèÿ, äàííóþ íèæå, ê òåêóùåìó îïðåäåëåíèþ.
\ Âðåìÿ âûïîëíåíèÿ: ( -- x )
\ Ïîëîæèòü x íà ñòåê.
STATE @ IF LIT, THEN
; IMMEDIATE
: 2LITERAL \ 94 DOUBLE
\ Èíòåðïðåòàöèÿ: ñåìàíòèêà íåîïðåäåëåíà.
\ Êîìïèëÿöèÿ: ( x1 x2 -- )
\ Äîáàâèòü ñåìàíòèêó âðåìåíè âûïîëíåíèÿ, äàííóþ íèæå, ê òåêóùåìó îïðåäåëåíèþ.
\ Âðåìÿ âûïîëíåíèÿ: ( -- x1 x2 )
\ Ïîëîæèòü ïàðó ÿ÷ååê x1 x2 íà ñòåê.
STATE @ IF DLIT, THEN
; IMMEDIATE
: SLITERAL \ 94 STRING
PSLITERAL ; IMMEDIATE
: PSLITERAL
\ Èíòåðïðåòàöèÿ: ñåìàíòèêà íå îïðåäåëåíà.
\ Êîìïèëÿöèÿ: ( c-addr1 u -- )
\ Äîáàâèòü ñåìàíòèêó âðåìåíè âûïîëíåíèÿ, äàííóþ íèæå, ê òåêóùåìó îïðåäåëåíèþ.
\ Âðåìÿ âûïîëíåíèÿ: ( -- c-addr2 u )
\ Âîçâðàòèòü c-addr2 u, îïèñûâàþùèå ñòðîêó, ñîñòîÿùóþ èç ñèìâîëîâ, çàäàííûõ
\ c-addr1 u âî âðåìÿ êîìïèëÿöèè. Ïðîãðàììà íå ìîæåò ìåíÿòü âîçâðàùåííóþ
\ ñòðîêó.
STATE @ IF SLIT, \ ELSE 2DUP + 0 SWAP C!
THEN
;
: S" \ 94+FILE
\ Èíòåðïðåòàöèÿ: ( "ccc<quote>" -- c-addr u )
\ Âûäåëèòü ccc, îãðàíè÷åííûå " (äâîéíûìè êàâû÷êàìè). Çàïèñàòü ïîëó÷åííóþ
\ ñòðîêó c-addr u âî âðåìåííûé áóôåð. Ìàêñèìàëüíàÿ äëèíà âðåìåííîãî
\ áóôåðà çàâèñèò îò ðåàëèçàöèè, íî íå ìîæåò áûòü ìåíüøå 80 ñèìâîëîâ.
\ Ñëåäóþùåå èñïîëüçîâàíèå S" ìîæåò ïåðåïèñàòü âðåìåííûé áóôåð.
\ Îáåñïå÷èâàåòñÿ êàê ìèíèìóì îäèí òàêîé áóôåð.
\ Êîìïèëÿöèÿ: ( "ccc<quote>" -- )
\ Âûäåëèòü ccc, îãðàíè÷åííûå " (äâîéíûìè êàâû÷êàìè). Äîáàâèòü ñåìàíòèêó
\ âðåìåíè âûïîëíåíèÿ, îïèñàííóþ íèæå, ê òåêóùåìó îïðåäåëåíèþ.
\ Âðåìÿ âûïîëíåíèÿ: ( -- c-addr u )
\ Âåðíóòü c-addr è u, êîòîðûå îïèñûâàþò ñòðîêó, ñîñòîÿùóþ èç ñèìâîëîâ ccc.
[CHAR] " PARSE [COMPILE] SLITERAL
; IMMEDIATE
: C" \ 94 CORE EXT
\ Èíòåðïðåòàöèÿ: ñåìàíòèêà íå îïðåäåëåíà.
\ Êîìïèëÿöèÿ: ( "ccc<quote>" -- )
\ Âûäåëèòü ccc, îãðàíè÷åííûå " (äâîéíûìè êàâû÷êàìè) è äîáàâèòü
\ ñåìàíòèêó âðåìåíè âûïîëíåíèÿ, äàííóþ íèæå, ê òåêóùåìó îïðåäåëåíèþ.
\ Âðåìÿ âûïîëíåíèÿ: ( -- c-addr )
\ Âîçâðàòèòü c-addr, ñòðîêó ñî ñ÷åò÷èêîì, ñîñòîÿùóþ èç ñèìâîëîâ ccc.
\ Ïðîãðàììà íå äîëæíà ìåíÿòü âîçâðàùåííóþ ñòðîêó.
[CHAR] " WORD [COMPILE] CLITERAL
; IMMEDIATE
: CLITERAL ( addr -- )
STATE @ IF CLIT, THEN
; IMMEDIATE
: ." \ 94
\ Èíòåðïðåòàöèÿ: ñåìàíòèêà íåîïðåäåëåíà.
\ Êîìïèëÿöèÿ: ( "ccc<quote>" -- )
\ Âûäåëèòü ccc, îãðàíè÷åííîå " (äâîéíûìè êàâû÷êàìè). Äîáàâèòü ñåìàíòèêó âðåìåíè
\ âûïîëíåíèÿ, äàííóþ íèæå, ê òåêóùåìó îïðåäåëåíèþ.
\ Âðåìÿ âûïîëíåíèÿ: ( -- )
\ Âûâåñòè ccc íà ýêðàí.
?COMP
[COMPILE] S"
['] TYPE COMPILE,
; IMMEDIATE
: [CHAR] \ 94
\ Èíòåðïðåòàöèÿ: ñåìàíòèêà íåîïðåäåëåíà.
\ Êîìïèëÿöèÿ: ( "<spaces>name" -- )
\ Ïðîïóñòèòü âåäóùèå ïðîáåëû. Âûäåëèòü name, îãðàíè÷åííîå ïðîáåëàìè. Äîáàâèòü
\ ñåìàíòèêó âðåìåíè âûïîëíåíèÿ, äàííóþ íèæå, ê òåêóùåìó îïðåäåëåíèþ.
\ Âðåìÿ âûïîëíåíèÿ: ( -- char )
\ Ïîëîæèòü char, çíà÷åíèå ïåðâîãî ñèìâîëà name, íà ñòåê.
?COMP
PARSE-WORD DROP C@ [COMPILE] LITERAL
; IMMEDIATE
: ABORT" \ 94
\ Èíòåðïðåòàöèÿ: ñåìàíòèêà íå îïðåäåëåíà.
\ Êîìïèëÿöèÿ: ( "ccc<quote>" -- )
\ Âûäåëèòü ccc, îãðàíè÷åííûå " (äâîéíûìè êàâû÷êàìè). Äîáàâèòü îïèñàííóþ
\ íèæå ñåìàíòèêó âðåìåíè âûïîëíåíèÿ â òåêóùåå îïðåäåëåíèå.
\ Âûïîëíåíèå: ( i*x x1 -- | i*x )
\ Óáðàòü x1 ñî ñòåêà. Åñëè ëþáîé áèò x1 íåíóëåâîé, âûâåñòè íà ýêðàí ccc è
\ âûïîëíèòü çàâèñÿùèå îò ðåàëèçàöèè äåéñòâèÿ, âêëþ÷àþùèå ABORT.
\ : ABORT" \ 94 EXCEPTION EXT
\ Ðàñøèðèòü ñåìàíòèêó CORE ABORT" ÷òîáû áûëî:
\ Èíòåðïðåòàöèÿ: ñåìàíòèêà íå îïðåäåëåíà.
\ Êîìïèëÿöèÿ: ( "ccc<quote>" -- )
\ Âûäåëèòü ccc, îãðàíè÷åííûå " (äâîéíûìè êàâû÷êàìè). Äîáàâèòü ñåìàíòèêó
\ âðåìåíè âûïîëíåíèÿ, äàííóþ íèæå, ê òåêóùåìó îïðåäåëåíèþ.
\ Âðåìÿ âûïîëíåíèÿ: ( i*x x1 -- | i*x ) ( R: j*x -- | j*x )
\ Óáðàòü x1 ñî ñòåêà. Åñëè ëþáîé áèò x1 íåíóëåâîé, âûïîëíèòü ôóíêöèþ
\ -2 THROW, âûâîäÿ ccc, åñëè íà ñòåêå èñêëþ÷åíèé íåò êàäðà èñêëþ÷åíèé.
?COMP
?COMP [COMPILE] C"
['] (ABORT") COMPILE,
; IMMEDIATE