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