doc: paulchen beispiele {code{a,b},gesamt} entpackt (jedes mal entpacken nervt langsa...
[uebersetzerbau-ss10.git] / aus_sammelwut / paulchen / ublu / ss08 / abgabe / codeb / .svn / text-base / tree.h.svn-base
1 #ifndef __TREE_H_
2 #define __TREE_H_
3
4 #ifndef CODE
5 typedef struct burm_state *STATEPTR_TYPE; 
6 #endif
7
8 enum {
9         OP_Not=1,
10         OP_Negation,
11         OP_Addition,
12         OP_Multiplication,
13         OP_Disjunction,
14         OP_Greater,
15         OP_Equal,
16         OP_ID,
17         OP_Number,
18         OP_Field,
19         OP_Return,
20         OP_Zero,
21         OP_One,
22         OP_Exprs,
23         OP_Call,
24         OP_Assign,
25         OP_If,
26         OP_Stats,
27         OP_Empty,
28         OP_Ifstats,
29         OP_While
30 };
31
32 static char rule_names[100][100]={
33         "",
34         "OP_Not",
35         "OP_Negation",
36         "OP_Addition",
37         "OP_Multiplication",
38         "OP_Disjunction",
39         "OP_Greater",
40         "OP_Equal",
41         "OP_ID",
42         "OP_Number",
43         "OP_Field",
44         "OP_Return",
45         "OP_Zero",
46         "OP_One",
47         "OP_Exprs",
48         "OP_Call",
49         "OP_Assign",
50         "OP_If",
51         "OP_Stats",
52         "OP_Empty",
53         "OP_Ifstats",
54         "OP_While"
55 };
56           
57
58 /* struct for the tree build by ox for iburg */
59 typedef struct treenode {
60         int op;
61         struct treenode *kids[2];
62         STATEPTR_TYPE label;
63         char *name;
64         long value;
65         char *reg;
66         struct treenode *parent;
67         int skip_reg;
68         int param_index; /* -1 if not a parameter */
69 } treenode;
70
71 typedef treenode *treenodep;
72
73 /* macros for iburg being able to traverse the tree */
74 #define NODEPTR_TYPE            treenodep
75 #define OP_LABEL(p)             ((p)->op)
76 #define LEFT_CHILD(p)           ((p)->kids[0])
77 #define RIGHT_CHILD(p)          ((p)->kids[1])
78 #define STATE_LABEL(p)          ((p)->label)
79 #define PANIC                   printf
80
81 /* see tree.c for description about these procedures */
82 treenode *new_node(int op, treenode *left, treenode *right);
83 treenode *new_node_value(int op, treenode *left, treenode *right, long value, int param);
84 treenode *new_leaf(int op);
85 treenode *new_number_leaf(long value);
86 treenode *new_named_leaf(int op, char *name);
87 treenode *new_named_leaf_value(int op, char *name, long value, int param);
88 treenode *new_named_node(int op, treenode *left, treenode *right, char *name);
89
90 void write_indent(int indent);
91 void write_tree(treenode *node, int indent);
92
93 #endif /* __TREE_H */
94