( ८¡à §®¢ ¨¥ ç¨á«®¢ëå «¨â¥à «®¢ ¯à¨ ¨â¥à¯à¥â 樨.
-¥§ ¢¨á¨¬ë¥ ®¯à¥¤¥«¥¨ï.
Copyright [C] 1992-1999 A.Cherezov ac@forth.org
८¡à §®¢ ¨¥ ¨§ 16-à §à冷£® ¢ 32-à §àï¤ë© ª®¤ - 1995-96££
¥¢¨§¨ï - á¥âï¡àì 1999
)
: ?SLITERAL1 ( c-addr u -> ... )
\ ¯à¥®¡à §®¢ âì áâப㠢 ç¨á«®
0 0 2SWAP
OVER C@ [CHAR] - = IF 1- SWAP 1+ SWAP TRUE ELSE FALSE THEN >R
>NUMBER
DUP 1 > IF ." -?" -2001 THROW THEN \ ABORT" -?"
IF C@ [CHAR] . <> IF -2002 THROW THEN \ ABORT" -??"
R> IF DNEGATE THEN
[COMPILE] 2LITERAL
ELSE DROP D>S
R> IF NEGATE THEN
[COMPILE] LITERAL
THEN
;
: ?LITERAL1 ( T -> ... )
\ ¯à¥®¡à §®¢ âì áâப㠢 ç¨á«®
COUNT ?SLITERAL1
;
: HEX-SLITERAL ( addr u -> flag )
BASE @ >R HEX
0 0 2SWAP 2- SWAP 2+ SWAP >NUMBER
?DUP IF
1 = SWAP C@ [CHAR] L = AND 0= IF 2DROP FALSE R> BASE ! EXIT THEN
ELSE DROP THEN
D>S POSTPONE LITERAL TRUE
R> BASE !
;
: INCLUDED_S -2003 THROW
INCLUDED ;
: ?SLITERAL2 ( c-addr u -- ... )
( à áè¨à¥ë© ¢ ਠâ ?SLITERAL1:
¥á«¨ áâப - ¥ ç¨á«®, â® ¯ëâ ¥¬áï âà ªâ®¢ âì ¥ñ
ª ª ¨¬ï ä ©« ¤«ï ¢â®-INCLUDED)
DUP 1 > IF OVER W@ 0x7830 ( 0x) =
IF 2DUP 2>R HEX-SLITERAL IF RDROP RDROP EXIT ELSE 2R> THEN THEN
THEN
2DUP 2>R ['] ?SLITERAL1 CATCH
IF 2DROP 2R>
OVER C@ [CHAR] " = OVER 2 > AND
IF 2 - SWAP 1+ SWAP THEN ( ã¡à « ª ¢ë窨, ¥á«¨ ¥áâì)
2DUP + 0 SWAP C!
['] INCLUDED_S CATCH
DUP 2 = OVER 3 = OR OVER 161 = OR ( ä ©« ¥ ©¤¥ ¨«¨ ¯ãâì ¥ ©¤¥,
¨«¨ ¥à §à¥è¥®¥ ¨¬ï ä ©« )
IF -2003 THROW \ ABORT" -???"
ELSE THROW THEN
ELSE RDROP RDROP
THEN
;
: ?LITERAL2 ( c-addr -- ... )
( à áè¨à¥ë© ¢ ਠâ ?LITERAL1:
¥á«¨ áâப - ¥ ç¨á«®, â® ¯ëâ ¥¬áï âà ªâ®¢ âì ¥ñ
ª ª ¨¬ï ä ©« ¤«ï ¢â®-INCLUDED)
COUNT ?SLITERAL2
;