|
|
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.