Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/src/ml-burg/example1.burg
ViewVC logotype

Annotation of /sml/trunk/src/ml-burg/example1.burg

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2 - (view) (download)

1 : monnier 2
2 :    
3 :     %{
4 :     (* this is the header *)
5 :     %}
6 :    
7 :    
8 :    
9 :     %term ASGNI
10 :     | ADDI
11 :     | CVCI
12 :     | INDIRC
13 :     | I0I
14 :     | ADDRLP
15 :     | CNSTI
16 :    
17 :     %termprefix T_
18 :    
19 :     %start stmt
20 :    
21 :    
22 :     %%
23 :    
24 :     stmt: ASGNI(disp,reg) = stmt_ASGNI_disp_reg (1);
25 :     stmt: reg = stmt_reg;
26 :     reg: ADDI(reg,rc) = reg_ADDI_reg_rc (1);
27 :     reg: CVCI(INDIRC(disp)) = reg_CVCI_INDIRC_disp (1);
28 :     reg: I0I = reg_I0I;
29 :     reg: disp = reg_disp (1);
30 :     disp: ADDI(reg,con) = disp_ADDI_reg_con;
31 :     disp: ADDRLP = disp_ADDRLP;
32 :     rc: con = rc_con;
33 :     rc: reg = rc_reg;
34 :     con: CNSTI = con_CNSTI;
35 :     con: I0I = con_I0I;
36 :    
37 :    
38 :    
39 :     %%
40 :    
41 :     structure In = struct
42 :    
43 :     open BurmOps
44 :    
45 :     datatype tree =
46 :     ASGNI of tree * tree
47 :     | ADDI of tree * tree
48 :     | CVCI of tree
49 :     | INDIRC of tree
50 :     | I0I
51 :     | ADDRLP of string
52 :     | CNSTI of int
53 :    
54 :     fun opchildren t =
55 :     case t of
56 :     ASGNI (t1,t2) => (T_ASGNI, [t1,t2])
57 :     | ADDI (t1,t2) => (T_ADDI, [t1,t2])
58 :     | CVCI (t1) => (T_CVCI, [t1])
59 :     | INDIRC (t1) => (T_INDIRC, [t1])
60 :     | I0I => (T_I0I, [])
61 :     | ADDRLP _ => (T_ADDRLP, [])
62 :     | CNSTI _ => (T_CNSTI, [])
63 :    
64 :     end
65 :    
66 :    
67 :    
68 :    
69 :     structure Example = struct
70 :    
71 :     structure Burm = BurmGen (In)
72 :     open In
73 :    
74 :     fun say s = String.print s
75 :    
76 :    
77 :     local
78 :     val num = ref 1
79 :     in
80 :     fun new s = (s^(makestring (!num)) before inc num)
81 :     end
82 :    
83 :    
84 :     fun walk (Burm.stmt_ASGNI_disp_reg (disp,reg), _) =
85 :     let
86 :     val (disp',reg') = (walk disp, walk reg)
87 :     val stmt = new "stmt"
88 :     in
89 :     say (stmt^" <- ASGNI ("^disp'^" + "^reg'^")\n"); stmt
90 :     end
91 :     | walk (Burm.stmt_reg reg, _) =
92 :     let
93 :     val reg' = walk reg
94 :     val stmt = new "stmt"
95 :     in
96 :     say (stmt^" <- "^reg'^"\n"); stmt
97 :     end
98 :     | walk (Burm.reg_ADDI_reg_rc (reg,rc), _) =
99 :     let
100 :     val (reg',rc') = (walk reg, walk rc)
101 :     val reg2 = new "reg"
102 :     in
103 :     say (reg2^" <- ADDI ("^reg'^","^rc'^")\n"); reg2
104 :     end
105 :     | walk (Burm.reg_CVCI_INDIRC_disp disp, _) =
106 :     let
107 :     val disp' = walk disp
108 :     val reg = new "reg"
109 :     in
110 :     say (reg^" <- CVCI (INDIRC ("^disp'^"))\n"); reg
111 :     end
112 :     | walk (Burm.reg_I0I, _) =
113 :     let
114 :     val reg = new "reg"
115 :     in
116 :     say (reg^" <- ZERO\n"); reg
117 :     end
118 :     | walk (Burm.reg_disp disp, _) =
119 :     let
120 :     val disp' = walk disp
121 :     val reg = new "reg"
122 :     in
123 :     say (reg^" <- "^disp'^"\n"); reg
124 :     end
125 :     | walk (Burm.disp_ADDI_reg_con (reg,con), _) =
126 :     let
127 :     val (reg',con') = (walk reg, walk con)
128 :     val disp = new "disp"
129 :     in
130 :     say (disp^" <- ADDI ("^reg'^","^con'^")\n"); disp
131 :     end
132 :     | walk (Burm.disp_ADDRLP, ADDRLP addr) =
133 :     let
134 :     val disp = new "disp"
135 :     in
136 :     say (disp^" <- ADDRLP "^addr^"\n"); disp
137 :     end
138 :     | walk (Burm.rc_con con, _) =
139 :     let
140 :     val con' = walk con
141 :     val rc = new "rc"
142 :     in
143 :     say (rc^" <- "^con'^"\n"); rc
144 :     end
145 :     | walk (Burm.rc_reg reg, _) =
146 :     let
147 :     val reg' = walk reg
148 :     val rc = new "rc"
149 :     in
150 :     say (rc^" <- "^reg'^"\n"); rc
151 :     end
152 :     | walk (Burm.con_CNSTI, CNSTI i) =
153 :     let
154 :     val con = new "con"
155 :     in
156 :     say (con^" <- CNSTI "^(makestring i)^"\n"); con
157 :     end
158 :     | walk (Burm.con_I0I, _) =
159 :     let
160 :     val con = new "con"
161 :     in
162 :     say (con^" <- CNSTI ZERO\n"); con
163 :     end
164 :     | walk _ = (print "Error, bad match in walk\n"; raise Match)
165 :    
166 :    
167 :    
168 :     fun doit t = walk (Burm.reduce t)
169 :    
170 :    
171 :     (*
172 :     * int p;
173 :     * char c;
174 :     * p = c+4;
175 :     *)
176 :     val a = ASGNI (ADDRLP "p",
177 :     ADDI (CVCI (INDIRC (ADDRLP "c")),
178 :     CNSTI 4))
179 :    
180 :     end
181 :    

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0