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, int param) {
29 treenode *new=(treenode *)malloc(sizeof(treenode));
32 printf("new_node: %i (%s)\n",op,rule_names[op]);
38 new->name=(char *)NULL;
40 new->param_index=param;
45 /* new_leaf: create leaf - node with no children */
46 treenode *new_leaf(int op) {
47 treenode *new=(treenode *)malloc(sizeof(treenode));
50 printf("new_leaf: %i (%s)\n",op,rule_names[op]);
53 new->kids[0]=(treenode *)NULL;
54 new->kids[1]=(treenode *)NULL;
56 new->name=(char *)NULL;
61 /* new_named_leaf: create leaf with name (used for identifier or
64 treenode *new_named_leaf(int op, char *name) {
65 treenode *new=(treenode *)malloc(sizeof(treenode));
68 printf("new_named_leaf: %i (%s), %s\n",op,rule_names[op],name);
71 new->kids[0]=(treenode *)NULL;
72 new->kids[1]=(treenode *)NULL;
79 /* new_named_leaf_value: create leaf with name (used for identifier or
82 treenode *new_named_leaf_value(int op, char *name, long value, int param) {
83 treenode *new=(treenode *)malloc(sizeof(treenode));
86 printf("new_named_leaf_value: %i (%s), %s, %li\n",op,rule_names[op],name,value);
89 new->kids[0]=(treenode *)NULL;
90 new->kids[1]=(treenode *)NULL;
94 new->param_index=param;
99 /* new_named_node: create node with one or two children and a name (can be
100 * used for storing a procedure's name)
102 treenode *new_named_node(int op, treenode *left, treenode *right, char *name) {
103 treenode *new=(treenode *)malloc(sizeof(treenode));
106 printf("new_named_node: %i (%s), %s\n",op,rule_names[op],name);
117 void write_indent(int indent) {
119 for(a=0;a<indent;a++) {
124 /* write_tree: display the tree generated by the attributed grammar; this tree willk
125 * be traversed by iburg
127 void write_tree(treenode *node, int indent) {
128 write_indent(indent);
129 printf("%s, %s, %s\n",rule_names[node->op],node->name,node->reg);
130 if(node->kids[0]!=(treenode *)NULL || node->kids[1]!=(treenode *)NULL) {
131 if(node->kids[0]!=(treenode *)NULL) {
132 write_tree(node->kids[0], indent+1);
134 if(node->kids[1]!=(treenode *)NULL) {
135 write_tree(node->kids[1], indent+1);
140 treenode *new_number_leaf(long value) {
144 node=new_leaf(OP_Zero);
147 node=new_leaf(OP_One);
150 node=new_leaf(OP_Number);