|
|
1.1 ! root 1: /* symbol table definitions */ ! 2: extern int symbol_undefined; ! 3: ! 4: /* ! 5: * A LabelData structures are associated with label symbols. They ! 6: * indicate that a tree is labelled with the symbol ! 7: */ ! 8: typedef struct LabelData LabelData; ! 9: ! 10: struct LabelData { ! 11: Node *tree; ! 12: int treeIndex; ! 13: int lineno; ! 14: SymbolEntry *label; /* back pointer */ ! 15: LabelData *next; ! 16: }; ! 17: ! 18: struct treeassoc { ! 19: int tree; ! 20: struct treeassoc *next; ! 21: }; ! 22: ! 23: struct symbol_entry { ! 24: int hash; ! 25: char *name; ! 26: short attr; ! 27: # define A_UNDEFINED 0 ! 28: # define A_NODE 1 ! 29: # define A_LABEL 2 ! 30: # define A_COST 3 ! 31: # define A_ACTION 4 ! 32: # define MAXCHAINS A_CONST ! 33: # define HAS_UNIQUE(x) (x<MAXCHAINS) ! 34: # define A_CONST 5 ! 35: # define HAS_LIST(x) (x<=A_CONST) ! 36: # define A_ERROR 10 ! 37: # define A_KEYWORD 11 ! 38: short unique; ! 39: struct symbol_entry *link; ! 40: struct symbol_entry *next; ! 41: union { ! 42: int keyword; ! 43: int cvalue; /* a constant's value */ ! 44: int arity; /* information stored for A_NODE type */ ! 45: LabelData *lp; ! 46: struct { ! 47: int arity; ! 48: Code *code; ! 49: } predData; ! 50: struct { ! 51: struct treeassoc *assoc; ! 52: Code *code; ! 53: } ca; /* data for cost/action symbols */ ! 54: } sd; ! 55: }; ! 56: ! 57: extern void SymbolInit(); ! 58: extern void SymbolEnter(); ! 59: extern SymbolEntry *SymbolLookup(); ! 60: extern SymbolEntry *SymbolAllocate(); ! 61: extern void SymbolFree(); ! 62: extern void SymbolEnterList(); ! 63: extern char *SymbolGenUnique(); ! 64: ! 65: extern SymbolEntry ErrorSymbol; ! 66: ! 67: /* ! 68: * In order for the walker to access the labelled leaves of a pattern, ! 69: * a table (mistakenly) called the path table is generated (see sym.c). ! 70: * This table contains the following possible values: ! 71: * ! 72: * ePush follow the children link in the walker skeleton. ! 73: * ePop Pop up to parent. ! 74: * eNext follow the siblings link. ! 75: * eEval <arg> The current node is a labelled leaf whose label id ! 76: * is the integer <arg>. ! 77: * eStop All done. stop! ! 78: * ! 79: * The table is interpreted by the _getleaves routine in the walker. ! 80: */ ! 81: #define eSTOP 0 ! 82: #define ePOP -1 ! 83: #define eEVAL -2 ! 84: #define eNEXT -3 ! 85: #define ePUSH -4
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.