annotate ansi/mc-tree.c @ 5:3db1b6d78412

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