X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=aus_sammelwut%2Fpaulchen%2Fublu%2Fss08%2Fabgabe%2Fgesamt%2F.svn%2Ftext-base%2Ftree.h.svn-base;fp=aus_sammelwut%2Fpaulchen%2Fublu%2Fss08%2Fabgabe%2Fgesamt%2F.svn%2Ftext-base%2Ftree.h.svn-base;h=7ac2789d857e44ee0747f1fff40cae6b33a9f85c;hb=f6171150f9e60240b256808fc31613530b21db6c;hp=0000000000000000000000000000000000000000;hpb=b82da83a0ad2014c11113818eee6bd5fb5f3445c;p=uebersetzerbau-ss10.git diff --git a/aus_sammelwut/paulchen/ublu/ss08/abgabe/gesamt/.svn/text-base/tree.h.svn-base b/aus_sammelwut/paulchen/ublu/ss08/abgabe/gesamt/.svn/text-base/tree.h.svn-base new file mode 100644 index 0000000..7ac2789 --- /dev/null +++ b/aus_sammelwut/paulchen/ublu/ss08/abgabe/gesamt/.svn/text-base/tree.h.svn-base @@ -0,0 +1,98 @@ +#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, + OP_Assign, + OP_If, + OP_Stats, + OP_Empty, + OP_Ifstats, + OP_While, + OP_CallNoParam, + OP_Arg +}; + +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", + "OP_Assign", + "OP_If", + "OP_Stats", + "OP_Empty", + "OP_Ifstats", + "OP_While", + "OP_CallNoParam", + "OP_Arg" +}; + + +/* 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 */ +