Annotation of researchv10no/cmd/twig/machcomm.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * The machine is laid out as a sequence of integers in the walker.
                      3:  * The form described above is only used inside the preprocessor.
                      4:  * Each machine state is one of the following sequence:
                      5:  *
                      6:  * TABLE <value_1><index_1>...<value_n><index_n> -1 [FAIL <fail_index>] -1
                      7:  * or
                      8:  * TABLE2 <value_1><index_1>...<value_n><index_n> -1 [FAIL <fail_index>] -1
                      9:  * or
                     10:  * ACCEPT <accept table index> -1
                     11:  *
                     12:  * The accept table is in the form:
                     13:  *
                     14:  * <tree index_1> ...<tree_index_m> -1
                     15:  *
                     16:  */
                     17: 
                     18: #define FASTLIM        0
                     19: #define TABLE  1
                     20: #define FAIL   2
                     21: #define ACCEPT 3
                     22: #define TABLE2 4
                     23: #define EOT    -1
                     24: 
                     25: /* special machine state */
                     26: #define HANG   -1
                     27: 
                     28: /* used by the evaluator to interpret path table */
                     29: #define        eSTOP   0
                     30: #define        ePOP    -1
                     31: #define eEVAL  -2
                     32: #define eNEXT  -3
                     33: #define ePUSH  -4
                     34: 
                     35: /* Tags that indicate the type of a value */
                     36: #define M_BRANCH 010000
                     37: #define M_NODE 0
                     38: #define M_LABEL 01000
                     39: #define MAX_NODE_VALUE 00777
                     40: #define MTAG_SHIFT 9
                     41: #define M_DETAG(x)     ((x)&~(M_BRANCH|M_LABEL|M_NODE))
                     42: 
                     43: /* predicates to tell whether a value x is of type NODE, BRANCH, or LABEL */
                     44: #define MI_NODE(x)     (((x)&(M_BRANCH|M_LABEL))==0)
                     45: #define MI_DEFINED(x)  ((x)!=-1)
                     46: #define MI_LABEL(x)    (((x)&M_LABEL)!=0)
                     47: #define MI_BRANCH(x)   (((x)&M_BRANCH)!=0)
                     48: 
                     49: /* build a tagged value */
                     50: #define MV_NODE(x)     (x)
                     51: #define MV_BRANCH(x)   ((x)|M_BRANCH)
                     52: #define MV_LABEL(x)    ((x)|M_LABEL)
                     53: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.