annotate mc-tree.c @ 41:886ca1f2cf15

*** empty log message ***
author kono
date Wed, 12 Feb 2003 06:10:09 +0900
parents 412ad2e6c2a2
children 1ec39b34ed98
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
0529f5abe9d0 *** empty log message ***
kono
parents: 0
diff changeset
1 /* Micro-C tree print routine */
0529f5abe9d0 *** empty log message ***
kono
parents: 0
diff changeset
2 /* $Id$ */
0529f5abe9d0 *** empty log message ***
kono
parents: 0
diff changeset
3
0
d35df41eac69 Initial revision
kono
parents:
diff changeset
4 #define EXTERN /**/
d35df41eac69 Initial revision
kono
parents:
diff changeset
5 #include "mc.h"
18
df7fa8cee67b pass -Wall
kono
parents: 1
diff changeset
6 extern void tree_print(int e);
df7fa8cee67b pass -Wall
kono
parents: 1
diff changeset
7 extern void tree_parse(int e);
0
d35df41eac69 Initial revision
kono
parents:
diff changeset
8
d35df41eac69 Initial revision
kono
parents:
diff changeset
9 typedef
d35df41eac69 Initial revision
kono
parents:
diff changeset
10 struct tree_node {
d35df41eac69 Initial revision
kono
parents:
diff changeset
11 int tree_type;
d35df41eac69 Initial revision
kono
parents:
diff changeset
12 char *tree_name;
d35df41eac69 Initial revision
kono
parents:
diff changeset
13 char *tree_args;
d35df41eac69 Initial revision
kono
parents:
diff changeset
14 } tree_node_type;
d35df41eac69 Initial revision
kono
parents:
diff changeset
15
18
df7fa8cee67b pass -Wall
kono
parents: 1
diff changeset
16 static
0
d35df41eac69 Initial revision
kono
parents:
diff changeset
17 tree_node_type tree_nodes[] = {
d35df41eac69 Initial revision
kono
parents:
diff changeset
18 {(-1),"INT",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
19 {(-2),"CHAR",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
20 {(-3),"UNSIGNED",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
21 {(-4),"POINTER","t"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
22 {(-5),"ARRAY","tv"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
23 {(-6),"STRUCT","vt"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
24 {(-7),"UNION",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
25 {(-8),"FUNCTION","t"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
26 {(-9),"EMPTY",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
27 {(-10),"STATIC",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
28 {(-11),"GOTO",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
29 {(-12),"RETURN",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
30 {(-13),"BREAK",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
31 {(-14),"CONTINUE",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
32 {(-15),"IF",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
33 {(-16),"ELSE",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
34 {(-17),"FOR",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
35 {(-18),"DO",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
36 {(-19),"WHILE",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
37 {(-20),"SWITCH",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
38 {(-21),"CASE",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
39 {(-22),"DEFAULT",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
40 {(-23),"RESERVE",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
41 {(-24),"TAG",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
42 {(-25),"FIELD",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
43 {(-26),"IDENT",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
44 {(-27),"STRING",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
45 {(-28),"MACRO",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
46 {(-29),"BLABEL",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
47 {(-30),"FLABEL",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
48 {(-31),"TYPEDEF",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
49 {(-32),"SIZEOF",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
50 {(-33),"TYPE",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
51 {(-34),"LONG",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
52 {(-35),"SHORT",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
53 {(-36),"EXTERN",""},
18
df7fa8cee67b pass -Wall
kono
parents: 1
diff changeset
54 {(-37),"VOID",""},
df7fa8cee67b pass -Wall
kono
parents: 1
diff changeset
55 {(-38),"REGISTER",""},
df7fa8cee67b pass -Wall
kono
parents: 1
diff changeset
56 {(-39),"CODE",""},
df7fa8cee67b pass -Wall
kono
parents: 1
diff changeset
57 {(-40),"ENVIRONMENT",""},
df7fa8cee67b pass -Wall
kono
parents: 1
diff changeset
58 {(-41),"DEFINED",""},
37
412ad2e6c2a2 struct copy
kono
parents: 33
diff changeset
59 {(-42),"KONST",""},
412ad2e6c2a2 struct copy
kono
parents: 33
diff changeset
60 {(-43),"FMACRO",""},
412ad2e6c2a2 struct copy
kono
parents: 33
diff changeset
61 {(-44),"LMACRO",""},
412ad2e6c2a2 struct copy
kono
parents: 33
diff changeset
62
0
d35df41eac69 Initial revision
kono
parents:
diff changeset
63 {1,"GVAR","vs"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
64 {2,"RGVAR","vs"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
65 {3,"CRGVAR","vs"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
66 {4,"LVAR","v"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
67 {5,"RLVAR","v"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
68 {6,"CRLVAR","v"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
69 {7,"CONST","v"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
70 {8,"FNAME","n"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
71 {9,"INDIRECT","e"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
72 {10,"RINDIRECT","e"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
73 {11,"CRINDIRECT","e"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
74 {12,"ADDRESS","e"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
75 {13,"MINUS","e"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
76 {14,"LNOT","e"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
77 {15,"BNOT","e"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
78 {16,"INC",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
79 {17,"POSTINC","e"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
80 {18,"PREINC","e"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
81 {19,"CPOSTINC","e"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
82 {20,"CPREINC","e"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
83 {21,"DEC",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
84 {22,"CPOSTDEC","e"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
85 {23,"CPREDEC","e"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
86 {24,"MUL","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
87 {25,"UMUL","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
88 {26,"DIV","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
89 {27,"UDIV","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
90 {28,"MOD","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
91 {29,"UMOD","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
92 {30,"ADD","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
93 {31,"SUB","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
94 {32,"RSHIFT","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
95 {33,"URSHIFT","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
96 {34,"LSHIFT","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
97 {35,"ULSHIFT","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
98 {36,"GT","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
99 {37,"UGT","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
100 {38,"GE","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
101 {39,"UGE","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
102 {40,"LT","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
103 {41,"ULT","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
104 {42,"LE","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
105 {43,"ULE","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
106 {44,"EQ","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
107 {45,"NEQ","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
108 {46,"BAND","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
109 {47,"EOR","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
110 {48,"BOR","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
111 {49,"LAND","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
112 {50,"LOR","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
113 {51,"COND","eee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
114 {52,"ASS","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
115 {53,"CASS","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
116 {54,"ASSOP","eev"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
117 {55,"CASSOP","eev"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
118 {56,"COMMA","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
119 {57,"LPAR",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
120 {58,"RPAR",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
121 {59,"LBRA",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
122 {60,"RBRA",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
123 {61,"LC",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
124 {62,"RC",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
125 {63,"COLON","ee"},
d35df41eac69 Initial revision
kono
parents:
diff changeset
126 {64,"SM",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
127 {65,"PERIOD",""},
d35df41eac69 Initial revision
kono
parents:
diff changeset
128 {66,"ARROW",""},
37
412ad2e6c2a2 struct copy
kono
parents: 33
diff changeset
129 {67,"CNAME",""},
412ad2e6c2a2 struct copy
kono
parents: 33
diff changeset
130 {68,"SASS",""},
412ad2e6c2a2 struct copy
kono
parents: 33
diff changeset
131 {69,"DOTS",""},
0
d35df41eac69 Initial revision
kono
parents:
diff changeset
132 {100,"AS",""}
d35df41eac69 Initial revision
kono
parents:
diff changeset
133 };
d35df41eac69 Initial revision
kono
parents:
diff changeset
134
18
df7fa8cee67b pass -Wall
kono
parents: 1
diff changeset
135 void
0
d35df41eac69 Initial revision
kono
parents:
diff changeset
136 tree_print(int e)
d35df41eac69 Initial revision
kono
parents:
diff changeset
137 {
d35df41eac69 Initial revision
kono
parents:
diff changeset
138 printf("* generate code on type:\n* ");
d35df41eac69 Initial revision
kono
parents:
diff changeset
139 tree_parse(type);
d35df41eac69 Initial revision
kono
parents:
diff changeset
140 printf("\n* expr:\n* ");
d35df41eac69 Initial revision
kono
parents:
diff changeset
141 tree_parse(e);
d35df41eac69 Initial revision
kono
parents:
diff changeset
142 printf("\n");
d35df41eac69 Initial revision
kono
parents:
diff changeset
143 }
d35df41eac69 Initial revision
kono
parents:
diff changeset
144
18
df7fa8cee67b pass -Wall
kono
parents: 1
diff changeset
145 static
0
d35df41eac69 Initial revision
kono
parents:
diff changeset
146 int tree_level;
d35df41eac69 Initial revision
kono
parents:
diff changeset
147
18
df7fa8cee67b pass -Wall
kono
parents: 1
diff changeset
148 void
0
d35df41eac69 Initial revision
kono
parents:
diff changeset
149 tree_parse(int e)
d35df41eac69 Initial revision
kono
parents:
diff changeset
150 {
d35df41eac69 Initial revision
kono
parents:
diff changeset
151 tree_node_type *t;
d35df41eac69 Initial revision
kono
parents:
diff changeset
152 int i,j;
d35df41eac69 Initial revision
kono
parents:
diff changeset
153 char *s;
d35df41eac69 Initial revision
kono
parents:
diff changeset
154
d35df41eac69 Initial revision
kono
parents:
diff changeset
155 if(e<0) {
d35df41eac69 Initial revision
kono
parents:
diff changeset
156 for(t=tree_nodes;t->tree_type!=100;t++) {
d35df41eac69 Initial revision
kono
parents:
diff changeset
157 if(t->tree_type==e) {
d35df41eac69 Initial revision
kono
parents:
diff changeset
158 for(j=0;j<tree_level;j++) putchar(' ');
d35df41eac69 Initial revision
kono
parents:
diff changeset
159 printf("list(%s)",t->tree_name);
d35df41eac69 Initial revision
kono
parents:
diff changeset
160 break;
d35df41eac69 Initial revision
kono
parents:
diff changeset
161 }
d35df41eac69 Initial revision
kono
parents:
diff changeset
162 }
d35df41eac69 Initial revision
kono
parents:
diff changeset
163 } else {
d35df41eac69 Initial revision
kono
parents:
diff changeset
164 i = car(e);
d35df41eac69 Initial revision
kono
parents:
diff changeset
165 for(t=tree_nodes;t->tree_type!=100;t++) {
d35df41eac69 Initial revision
kono
parents:
diff changeset
166 if(t->tree_type==i) {
d35df41eac69 Initial revision
kono
parents:
diff changeset
167 tree_level++;
d35df41eac69 Initial revision
kono
parents:
diff changeset
168 for(j=0;j<tree_level;j++) putchar(' ');
d35df41eac69 Initial revision
kono
parents:
diff changeset
169 printf("list(%s",t->tree_name);
d35df41eac69 Initial revision
kono
parents:
diff changeset
170 for(i=1,s=t->tree_args;*s;s++,i++) {
d35df41eac69 Initial revision
kono
parents:
diff changeset
171 switch(*s) {
d35df41eac69 Initial revision
kono
parents:
diff changeset
172 case 'e':
d35df41eac69 Initial revision
kono
parents:
diff changeset
173 case 't':
d35df41eac69 Initial revision
kono
parents:
diff changeset
174 printf(",\n*");
d35df41eac69 Initial revision
kono
parents:
diff changeset
175 tree_parse(heap[e+i]); break;
d35df41eac69 Initial revision
kono
parents:
diff changeset
176 case 'v':
d35df41eac69 Initial revision
kono
parents:
diff changeset
177 printf(",%d",heap[e+i]); break;
d35df41eac69 Initial revision
kono
parents:
diff changeset
178 case 'n':
d35df41eac69 Initial revision
kono
parents:
diff changeset
179 printf(",%s",((NMTBL *)heap[e+i])->nm); break;
d35df41eac69 Initial revision
kono
parents:
diff changeset
180 case 's':
18
df7fa8cee67b pass -Wall
kono
parents: 1
diff changeset
181 printf(",%s",(char *)heap[e+i]); break;
0
d35df41eac69 Initial revision
kono
parents:
diff changeset
182 case 'i':
d35df41eac69 Initial revision
kono
parents:
diff changeset
183 printf(",%d",heap[e+i]); break;
d35df41eac69 Initial revision
kono
parents:
diff changeset
184 }
d35df41eac69 Initial revision
kono
parents:
diff changeset
185 }
d35df41eac69 Initial revision
kono
parents:
diff changeset
186 tree_level--;
d35df41eac69 Initial revision
kono
parents:
diff changeset
187 printf(")");
d35df41eac69 Initial revision
kono
parents:
diff changeset
188 break;
d35df41eac69 Initial revision
kono
parents:
diff changeset
189 }
d35df41eac69 Initial revision
kono
parents:
diff changeset
190 }
d35df41eac69 Initial revision
kono
parents:
diff changeset
191 }
d35df41eac69 Initial revision
kono
parents:
diff changeset
192 }