Charj : added AST nodes to support pointers and references
[charm.git] / src / langs / charj / src / charj / translator / Charj.stg
1 group Charj;
2
3 charjSource_ci(basename, pd, ids, tds, debug) ::=
4 <<
5
6 // interface for <basename>
7 <tds>
8
9 >>
10
11
12 charjSource_h(basename, pd, ids, tds, debug) ::=
13 <<
14 #ifndef __<basename>__
15 #define __<basename>__
16
17 /**************************************************************************
18  * WARNING                                                                *
19  **************************************************************************
20  * This is a machine generated header file.                               *
21  * It is not meant to be edited by hand and may be overwritten by charjc. *
22  **************************************************************************/
23
24 <ids>
25 <tds>
26
27 #endif // __<basename>__
28
29 >>
30
31
32 charjSource_cc(basename, pd, ids, tds, debug) ::=
33 <<
34 #include "<basename>.h"
35
36 <ids>
37 <tds>
38
39 >>
40
41 importDeclaration_cc_h(inc_id, use_id) ::= 
42 <<
43 #include \<<inc_id>\>
44 using <use_id>;
45 >>
46
47 classExtends_ci(type) ::= "<type>"
48
49
50 classExtends_cc_h(type) ::= "#include \<<type>.h\>"
51
52
53 interfaceExtends(ts) ::=
54 <<
55 : public <ts; separator=", public ">
56 >>
57
58 classDeclaration_h(sym, ident, ext, csds) ::=
59 <<
60 <sym.IncludeString>
61 <sym.MemberTypeNames:{name| class <name>; separator = "\n"}>
62 <classDeclaration_h_cont(pds = sym.packageNames, sym = sym, ident = ident, ext = ext, csds = csds)>
63 >>
64
65 classDeclaration_h_cont(pds, sym, ident, ext, csds) ::=
66 <<
67 <if(first(pds))>namespace <first(pds)>
68 {
69     <classDeclaration_h_cont(pds = rest(pds), sym = sym, ident = ident, ext = ext, csds = csds)>
70 } // namespace <first(pds)>
71 <else>
72 <if(ext)>
73 class <ident> : public <ext> {
74 <else>
75 class <ident> {
76 <endif>
77
78     <csds; separator="\n\n">
79 };
80 <endif>
81 >>
82
83
84 classDeclaration_cc(sym, ident, ext, csds) ::=
85 <<
86 <sym.IncludeString>
87 <classDeclaration_cc_cont(pds = sym.packageNames, sym = sym, ident = ident, ext = ext, csds = csds)>
88 >>
89
90 classDeclaration_cc_cont(pds, sym, ident, ext, csds) ::=
91 <<
92 <if(first(pds))>namespace <first(pds)>
93 {
94     <classDeclaration_cc_cont(pds = rest(pds), sym = sym, ident = ident, ext = ext, csds = csds)>
95 } // namespace <first(pds)>
96 <else>
97 <csds; separator="\n\n">
98 <endif>
99 >>
100
101
102 chareDeclaration_cc(sym, ident, ext, csds) ::=
103 <<
104 #include "<ident>.decl.h"
105 <chareDeclaration_cc_cont(pds = sym.packageNames, sym = sym, ident = ident, ext = ext, csds = csds)>
106 #include "<ident>.def.h"
107 >>
108
109 chareDeclaration_cc_cont(pds, sym, ident, ext, csds) ::=
110 <<
111 <if(first(pds))>namespace <first(pds)>
112 {
113     <chareDeclaration_cc_cont(pds = rest(pds), sym = sym, ident = ident, ext = ext, csds = csds)>
114 } // namespace <first(pds)>
115 <else>
116 <csds; separator="\n\n">
117 <endif>
118 >>
119
120 chareDeclaration_h(sym, ident, ext, csds) ::=
121 <<
122 #include "<ident>.decl.h"
123 <chareDeclaration_h_cont(pds = sym.packageNames, sym = sym, ident = ident, ext = ext, csds = csds)>
124 >>
125
126 chareDeclaration_h_cont(pds, sym, ident, ext, csds) ::=
127 <<
128 <if(first(pds))>namespace <first(pds)>
129 {
130     <chareDeclaration_h_cont(pds = rest(pds), sym = sym, ident = ident, ext = ext, csds = csds)>
131 } // namespace <first(pds)>
132 <else>
133 <if(ext)>/* superclass: <ext> */<endif>
134 class <ident>: public CBase_<ident> {
135     <csds; separator="\n">
136 };
137 <endif>
138 >>
139
140 chareDeclaration_ci(sym, chareType, arrayDim, ident, ext, csds) ::=
141 <<
142 module <ident> {
143 <if(ext)>
144     extern module <ext>;
145 <endif>
146     <chareDeclaration_ci_cont(pds = sym.packageNames, chareType = chareType, arrayDim = arrayDim, ident = ident, ext = ext, csds = csds)>
147 }
148 >>
149
150
151 chareDeclaration_ci_cont(pds, sym, chareType, arrayDim, ident, ext, csds) ::=
152 <<
153 <if(first(pds))>namespace <first(pds)>
154 {
155     <chareDeclaration_ci_cont(pds = rest(pds), sym = sym, chareType = chareType, arrayDim = arrayDim, ident = ident, ext = ext, csds = csds)>
156 } // namespace <first(pds)>
157 <else>
158 <chareType><if(arrayDim)> [<arrayDim>]<endif> <ident><if(ext)> : <ext><endif> {
159     <csds; separator="\n">
160 };
161 <endif>
162 >>
163
164 funcMethodDecl_h(modl, gtpl, ty, id, fpl, adl, block) ::=
165 <<
166 <if(first(modl))><modl; separator=" ">: <endif><ty><gtpl> <id><fpl><adl>;
167 >>
168
169
170 funcMethodDecl_ci(modl, gtpl, ty, id, fpl, adl, block) ::=
171 <<
172 entry <ty><gtpl> <id><fpl><adl>;
173 >>
174
175
176 funcMethodDecl_cc(sym, modl, gtpl, ty, id, fpl, adl, block) ::=
177 <<
178 <ty><gtpl> <sym.Name>::<id><fpl><adl>
179 <block>
180 >>
181
182
183 ctorDecl_ci(modl, gtpl, id, fpl, block) ::=
184 <<
185 entry void<gtpl> <id><fpl>;
186 >>
187
188
189 ctorDecl_h(modl, gtpl, id, fpl, block) ::=
190 <<
191 <if(modl)><modl>:<endif><gtpl> <id><fpl>;
192 >>
193
194
195 ctorDecl_cc(modl, gtpl, id, fpl, block) ::=
196 <<
197 <gtpl> <id>::<id><fpl>
198 <block>
199 >>
200
201
202 block_cc(bsl) ::=
203 <<
204 {
205     <bsl; separator="\n">
206 }
207 >>
208
209
210 embed_cc(str, blk) ::=
211 <<
212 // begin embedded block: <str>
213 <blk>
214 // end embedded block: <str>
215 >>
216
217
218 class_var_decl(modl, type, declList) ::=
219 <<
220 <if(modl)><modl>:<else>public:<endif> <type> <declList>;
221 >>
222
223
224 var_decl_list(var_decls) ::=
225 <<
226 <var_decls; separator=", ">
227 >>
228
229
230 var_decl(id, initializer) ::=
231 <<
232 <id><if(initializer)> = <initializer><endif>
233 >>
234
235
236 var_decl_id(id, array_decl_list) ::=
237 <<
238 <id><if(array_decl_list)> <array_decl_list><endif>
239 >>
240
241
242 var_id_decl(id, adl) ::=
243 <<
244 <id><if(adl)> <adl><endif>
245 >>
246
247
248 mod_list(mods) ::=
249 <<
250 <if(mods)><mods; separator=" "><endif>
251 >>
252
253
254 local_mod_list(mods) ::=
255 <<
256 <if(mods)><mods; separator=" "><endif>
257 >>
258  
259
260 local_var_decl(modList, type, declList) ::=
261 <<
262 <if(modList)>
263 <modList> <type> <declList>;
264 <else>
265 <type> <declList>;
266 <endif>
267 >>
268
269
270 simple_type(typeID, arrDeclList) ::=
271 <<
272 <typeID><arrDeclList>
273 >>
274
275
276 obj_type(typeID, arrDeclList) ::=
277 <<
278 <typeID><arrDeclList>
279 >>
280
281 pointer_type(typeID, arrDeclList) ::=
282 <<
283 <typeID>*<arrDeclList>
284 >>
285
286 reference_type(typeID, arrDeclList) ::=
287 <<
288 <typeID>&<arrDeclList>
289 >>
290
291
292 typeIdent(typeID, generics) ::=
293 <<
294 <typeID><generics>
295 >>
296
297
298 generic_arg_list(types) ::=
299 <<
300 \<<types>\>
301 >>
302
303
304 formal_param_list(sdecl, vdecl) ::=
305 <<
306 <if(vdecl)>
307 (<sdecl; separator=", ">, <vdecl>)
308 <else>
309 (<sdecl; separator=", ">)
310 <endif>
311 >>
312
313
314 formal_param_decl(modList, type, declID) ::=
315 <<
316 <if(modList)><modList> <endif><type> <declID>
317 >>
318
319
320 assert(cond, msg) ::=
321 <<
322 <if(msg)>
323 CkAssert(<cond> && <msg>);
324 <else>
325 CkAssert(<cond>);
326 <endif>
327 >>
328
329
330 if(cond, then, else_) ::=
331 <<
332 if <cond> <then><if(else_)> else <else_><endif>
333 >>
334
335
336 for(initializer, cond, update, body) ::=
337 <<
338 for (<if(initializer)><initializer><else>;<endif> <cond>; <update; separator=", ">) <body>
339 >>
340
341 while(cond, body) ::=
342 <<
343 while <cond> <body>
344 >>
345
346 dowhile(cond, body) ::=
347 <<
348 do <body> while <cond>;
349 >>
350
351
352 switch(expr, labels) ::=
353 <<
354 switch <expr> {
355     <labels>
356 }
357 >>
358
359 return(val) ::=
360 <<
361 return<if(val)> <val><endif>;
362 >>
363
364 label(text, stmt) ::=
365 <<
366 <text>: <stmt>
367 >>
368
369 case(expr, block) ::=
370 <<
371 case <expr>: <block>
372 >>
373
374 method_call(primary, generic_types, args) ::=
375 <<
376 <if(generic_types)>
377 <primary>\<<generic_types>\>(<args>)
378 <else>
379 <primary>(<args>)
380 <endif>
381 >>
382
383
384 array_construction_with_init(array_decls, initializer) ::=
385 <<
386 <array_decls> = {<initializer>};
387 >>
388
389
390 array_construction(exprs, array_decls) ::=
391 <<
392 [<exprs; separator="][">]<array_decls>
393 >> 
394
395
396 arguments(exprs) ::=
397 <<
398 <exprs; separator=", ">
399 >>
400
401