doc: paulchen beispiele {code{a,b},gesamt} entpackt (jedes mal entpacken nervt langsa...
[uebersetzerbau-ss10.git] / aus_sammelwut / paulchen / ublu / ss08 / abgabe / codea / tree.h
diff --git a/aus_sammelwut/paulchen/ublu/ss08/abgabe/codea/tree.h b/aus_sammelwut/paulchen/ublu/ss08/abgabe/codea/tree.h
new file mode 100755 (executable)
index 0000000..ae27791
--- /dev/null
@@ -0,0 +1,82 @@
+#ifndef __TREE_H_
+#define __TREE_H_
+
+#ifndef CODE
+typedef struct burm_state *STATEPTR_TYPE; 
+#endif
+
+enum {
+       OP_Not=1,
+       OP_Negation,
+       OP_Addition,
+       OP_Multiplication,
+       OP_Disjunction,
+       OP_Greater,
+       OP_Equal,
+       OP_ID,
+       OP_Number,
+       OP_Field,
+       OP_Return,
+       OP_Zero,
+       OP_One,
+       OP_Exprs,
+       OP_Call
+};
+
+static char rule_names[100][100]={
+       "",
+        "OP_Not",
+        "OP_Negation",
+        "OP_Addition",
+        "OP_Multiplication",
+        "OP_Disjunction",
+        "OP_Greater",
+        "OP_Equal",
+        "OP_ID",
+        "OP_Number",
+        "OP_Field",
+       "OP_Return",
+       "OP_Zero",
+       "OP_One",
+       "OP_Exprs",
+       "OP_Call"
+};
+         
+
+/* struct for the tree build by ox for iburg */
+typedef struct treenode {
+       int op;
+       struct treenode *kids[2];
+       STATEPTR_TYPE label;
+       char *name;
+       long value;
+       char *reg;
+       struct treenode *parent;
+       int skip_reg;
+       int param_index; /* -1 if not a parameter */
+} treenode;
+
+typedef treenode *treenodep;
+
+/* macros for iburg being able to traverse the tree */
+#define NODEPTR_TYPE           treenodep
+#define OP_LABEL(p)            ((p)->op)
+#define LEFT_CHILD(p)          ((p)->kids[0])
+#define RIGHT_CHILD(p)         ((p)->kids[1])
+#define STATE_LABEL(p)         ((p)->label)
+#define PANIC                  printf
+
+/* see tree.c for description about these procedures */
+treenode *new_node(int op, treenode *left, treenode *right);
+treenode *new_node_value(int op, treenode *left, treenode *right, long value, int param);
+treenode *new_leaf(int op);
+treenode *new_number_leaf(long value);
+treenode *new_named_leaf(int op, char *name);
+treenode *new_named_leaf_value(int op, char *name, long value, int param);
+treenode *new_named_node(int op, treenode *left, treenode *right, char *name);
+
+void write_indent(int indent);
+void write_tree(treenode *node, int indent);
+
+#endif /* __TREE_H */
+