7 /* new_node: create "standard node" with one or two children and
10 treenode *new_node(int op, treenode *left, treenode *right) {
11 treenode *new=(treenode *)malloc(sizeof(treenode));
14 printf("new_node: %i (%s)\n",op,rule_names[op]);
20 new->name=(char *)NULL;
25 /* new_node_value: create "standard node" with one or two children and
26 * given operation and the given value
28 treenode *new_node_value(int op, treenode *left, treenode *right, long value) {
29 treenode *new=(treenode *)malloc(sizeof(treenode));
32 printf("new_node: %i (%s)\n",op,rule_names[op]);
38 new->name=(char *)NULL;
44 /* new_leaf: create leaf - node with no children */
45 treenode *new_leaf(int op) {
46 treenode *new=(treenode *)malloc(sizeof(treenode));
49 printf("new_leaf: %i (%s)\n",op,rule_names[op]);
52 new->kids[0]=(treenode *)NULL;
53 new->kids[1]=(treenode *)NULL;
55 new->name=(char *)NULL;
60 /* new_named_leaf: create leaf with name (used for identifier or
63 treenode *new_named_leaf(int op, char *name) {
64 treenode *new=(treenode *)malloc(sizeof(treenode));
67 printf("new_named_leaf: %i (%s), %s\n",op,rule_names[op],name);
70 new->kids[0]=(treenode *)NULL;
71 new->kids[1]=(treenode *)NULL;
78 /* new_named_leaf_value: create leaf with name (used for identifier or
81 treenode *new_named_leaf_value(int op, char *name, long value) {
82 treenode *new=(treenode *)malloc(sizeof(treenode));
85 printf("new_named_leaf_value: %i (%s), %s, %li\n",op,rule_names[op],name,value);
88 new->kids[0]=(treenode *)NULL;
89 new->kids[1]=(treenode *)NULL;
97 /* new_named_node: create node with one or two children and a name (can be
98 * used for storing a procedure's name)
100 treenode *new_named_node(int op, treenode *left, treenode *right, char *name) {
101 treenode *new=(treenode *)malloc(sizeof(treenode));
104 printf("new_named_node: %i (%s), %s\n",op,rule_names[op],name);
115 void write_indent(int indent) {
117 for(a=0;a<indent;a++) {
122 /* write_tree: display the tree generated by the attributed grammar; this tree willk
123 * be traversed by iburg
125 void write_tree(treenode *node, int indent) {
126 write_indent(indent);
127 printf("%s, %s, %s\n",rule_names[node->op],node->name,node->reg);
128 if(node->kids[0]!=(treenode *)NULL || node->kids[1]!=(treenode *)NULL) {
129 if(node->kids[0]!=(treenode *)NULL) {
130 write_tree(node->kids[0], indent+1);
132 if(node->kids[1]!=(treenode *)NULL) {
133 write_tree(node->kids[1], indent+1);
138 treenode *new_number_leaf(long value) {
142 node=new_leaf(OP_Zero);
145 node=new_leaf(OP_One);
148 node=new_leaf(OP_Number);