詞彙結構

VARIABLE CONTEXT #VOCS CELLS ALLOT \ make context array of #VOCS+1 cells

VARIABLE CURRENT

VARIABLE LAST \ NFA of last header created

VARIABLE LAST-LINK \ address of last link for last header created

VARIABLE VOC-LINK \ linked list of vocabularies


\ Vocabularies; currently, these MUST be defined as specified


1 #VOCABULARY ROOT \ root vocab

VOCABULARY FORTH \ main vocabulary

\ #PTHREADS #LEXICON PROCS \ procs vocabulary; there's only 1

1 #VOCABULARY LOCALS \ locals vocab

#FTHREADS #VOCABULARY FILES \ files vocab

#HTHREADS #VOCABULARY HIDDEN \ hidden words


\ -------------------- Vocabulary dictionary structure ----------------------


\ [ cfa field ] +0 VCFA = vocabulary cfa -> DOES> code

\ [ num voc threads ] +4 #THREADS

\ [ voc link ] +8 VLINK

\ [ voc header ] +12 VHEAD

\ [ voc search ] +16 VSRCH

\ [ voc iterate ] +20 VITER

\ [ voc thread 0 ] +24 VOC thread 0 = voc-address

\ [ voc thread 1 ] +28 VOC thread 1

\ [ voc thread 2 ] +32 VOC thread 2

\ [ voc thread ... ] +n*4+24 VOC thread n


0 EQU VCFA

VCFA CELL+ EQU VTHRD

VTHRD CELL+ EQU VHEAD

VHEAD CELL+ EQU VSRCH

VSRCH CELL+ EQU VITER

VITER CELL+ EQU VLINK

VLINK CELL+ EQU VOC#0


DEFER VOC-ALSO

' NOOP IS VOC-ALSO \ possibly for lookaside use


VOC#0 VLINK - OFFSET VLINK>VOC ( voc-link-field -- voc-address )


VLINK VOC#0 - OFFSET VOC>VLINK ( voc-address -- voc-link-field )


: VOC#THREADS ( voc-address -- #threads ) [ VTHRD VOC#0 - ] literal + @ ;


VOC#0 VCFA - OFFSET VCFA>VOC ( vocabulary-cfa -- voc-address )


VCFA VOC#0 - OFFSET VOC>VCFA ( voc-address -- vocabulary-cfa )