6fcf9c371a9f54bc361f16982d66f6548d0a63af
[external/ragel.git] / test / langtrans_java.txl
1 include "testcase.txl"
2
3 keys
4         'boolean 'new
5 end keys
6
7
8 define java_statements
9                 [repeat java_lang_stmt]
10 end define
11
12 define java_lang_stmt
13                 [al_ragel_stmt]
14         |       [java_variable_decl]
15         |       [java_expr_stmt]
16         |       [java_if_stmt]
17         |       [EX] '{ [IN] [NL] [java_statements] [EX] '} [IN] [NL]
18 end define
19
20 define java_variable_decl
21                 [java_type_decl] [id] [opt union] '; [NL]
22 end define
23
24 define java_type_decl
25                 [al_type_decl]
26         |       'boolean
27         |       'String
28 end define
29
30 define java_expr_stmt
31                 [java_expr] '; [NL]
32 end define
33
34 define java_expr
35                 [java_term] [repeat java_expr_extend]
36 end define
37
38 define java_expr_extend
39                 [al_expr_op] [java_term]
40 end define
41
42 define java_term
43                 [al_term]
44         |       [id] [repeat java_dot_id]
45         |       [id] [repeat java_dot_id] '( [java_args] ')
46         |       'new [java_type_decl] [union]
47         |       'new [java_type_decl] '( [java_args] ') 
48 end define
49
50 define java_dot_id
51                 '. [id]
52 end define
53
54 define java_args
55                 [list java_expr] 
56 end define
57
58 define java_sign
59                 '- | '+
60 end define
61
62 define java_if_stmt
63                 'if '( [java_expr] ') [NL] [IN]
64                         [java_lang_stmt] [EX]
65                 [opt java_else]
66 end define
67
68 define java_else
69                 'else [NL] [IN]
70                         [java_lang_stmt] [EX]
71 end define
72
73 define java_lang
74                 [java_statements]
75                 '%% [NL]
76                 [java_statements]
77                 [ragel_def]
78 end define
79
80 define program
81                 [lang_indep]
82         |       [java_lang]
83 end define
84
85 redefine al_host_block
86                 '{ [NL] [IN] [al_statements] [EX] '} [NL]
87         |       '{ [NL] [IN] [java_statements] [EX] '} [NL]
88 end define
89
90 function clearUnion Type [java_type_decl] Id [id] 
91         replace [opt union]
92                 Union [union]
93         import ArrayInits [java_statements]
94                 Stmts [repeat java_lang_stmt]
95         export ArrayInits 
96                 Id '= 'new Type Union '; Stmts
97         by
98                 '[]
99 end function
100
101 rule boolTypes
102         replace [java_type_decl]
103                 'bool
104         by
105                 'boolean
106 end rule
107
108 rule ptrTypes
109         replace [al_type_decl]
110                 'ptr
111         by
112                 'int
113 end rule
114
115 function alStmtToJava1 AlStmt [action_lang_stmt]
116         deconstruct AlStmt
117                 VarDecl [al_variable_decl]
118         deconstruct VarDecl
119                 Type [al_type_decl] Id [id] OptUnion [opt union] ';
120         construct JavaType [java_type_decl]
121                 Type
122         construct Result [java_variable_decl]
123                 JavaType [boolTypes] [ptrTypes] Id OptUnion [clearUnion JavaType Id] ';
124         replace [repeat java_lang_stmt]
125         by
126                 Result
127 end function
128
129 function alTermToJava
130         replace [al_term]
131                 'first_token_char
132         by
133                 'data '[tokstart]
134 end function
135
136 function alExprExtendToJava AlExprExtend [repeat al_expr_extend]
137         deconstruct AlExprExtend
138                 Op [al_expr_op] Term [al_term] Rest [repeat al_expr_extend]
139         construct JavaRest [repeat java_expr_extend]
140                 _ [alExprExtendToJava Rest]
141         replace [repeat java_expr_extend]
142         by
143                 Op Term [alTermToJava] JavaRest
144 end function
145
146 function alExprToJava AlExpr [al_expr]
147         deconstruct AlExpr
148                 ALTerm [al_term] AlExprExtend [repeat al_expr_extend]
149         construct JavaExprExtend [repeat java_expr_extend]
150                 _ [alExprExtendToJava AlExprExtend]
151         construct Result [opt java_expr]
152                 ALTerm [alTermToJava] JavaExprExtend
153         replace [opt java_expr]
154         by
155                 Result 
156 end function
157
158 function alStmtToJava2 AlStmt [action_lang_stmt]
159         deconstruct AlStmt
160                 AlExpr [al_expr] ';
161         construct OptJavaExpr [opt java_expr]
162                 _ [alExprToJava AlExpr]
163         deconstruct OptJavaExpr
164                 JavaExpr [java_expr]
165         replace [repeat java_lang_stmt]
166         by
167                 JavaExpr ';
168 end function
169
170 function alOptElseJava AlOptElse [opt al_else]
171         deconstruct AlOptElse
172                 'else 
173                         AlSubStmt [action_lang_stmt]
174         construct AlSubStmts [repeat action_lang_stmt]
175                 AlSubStmt
176         construct JavaSubStmts [repeat java_lang_stmt]
177                 _ [alToJava AlSubStmts]
178         deconstruct JavaSubStmts
179                 JavaSubStmt [java_lang_stmt]
180         replace [opt java_else]
181         by
182                 'else 
183                         JavaSubStmt
184 end function
185
186 function alStmtToJava3 AlStmt [action_lang_stmt]
187         deconstruct AlStmt
188                 'if '( AlExpr [al_expr] ')
189                         AlSubStmt [action_lang_stmt]
190                 AlOptElse [opt al_else]
191         construct OptJavaExpr [opt java_expr]
192                 _ [alExprToJava AlExpr]
193         deconstruct OptJavaExpr
194                 JavaExpr [java_expr]
195         construct AlSubStmts [repeat action_lang_stmt]
196                 AlSubStmt
197         construct JavaSubStmts [repeat java_lang_stmt]
198                 _ [alToJava AlSubStmts]
199         deconstruct JavaSubStmts
200                 JavaSubStmt [java_lang_stmt]
201         construct OptJavaElse [opt java_else]
202                 _ [alOptElseJava AlOptElse]
203         replace [repeat java_lang_stmt]
204         by
205                 'if '( JavaExpr ')
206                         JavaSubStmt
207                 OptJavaElse
208 end function
209
210 function alStmtToJava4a AlStmt [action_lang_stmt]
211         deconstruct AlStmt
212                 'printi Id [id] ';
213         replace [repeat java_lang_stmt]
214         by
215                 'System '. 'out '. 'print '( Id ');
216 end function
217
218 function alStmtToJava4b AlStmt [action_lang_stmt]
219         deconstruct AlStmt
220                 'prints String [stringlit] ';
221         replace [repeat java_lang_stmt]
222         by
223                 'System '. 'out '. 'print '( String ');
224 end function
225
226 function alStmtToJava4c AlStmt [action_lang_stmt]
227         deconstruct AlStmt
228                 'printb Id [id] ';
229         replace [repeat java_lang_stmt]
230         by
231                 '_s '= 'new 'String '( Id ', '0 ', 'pos ') ';
232                 'System '. 'out '. 'print '( '_s ');
233 end function
234
235 function alStmtToJava4d AlStmt [action_lang_stmt]
236         deconstruct AlStmt
237                 'print_token ';
238         replace [repeat java_lang_stmt]
239         by
240                 '_s '= 'new 'String '( 'data ', 'tokstart ', 'tokend '- 'tokstart ') ';
241                 'System '. 'out '. 'print '( '_s ');
242 end function
243
244 function alStmtToJava5 AlStmt [action_lang_stmt]
245         deconstruct AlStmt
246                 '{ AlSubStmts [repeat action_lang_stmt] '}
247         construct JavaSubStmts [repeat java_lang_stmt]
248                 _ [alToJava AlSubStmts]
249         replace [repeat java_lang_stmt]
250         by
251                 '{ JavaSubStmts '}
252 end function
253
254 function alStmtToJava6 AlStmt [action_lang_stmt]
255         deconstruct AlStmt
256                 RagelStmt [al_ragel_stmt]
257         replace [repeat java_lang_stmt]
258         by
259                 RagelStmt
260 end function
261
262
263 function alToJava AlStmts [repeat action_lang_stmt]
264         deconstruct AlStmts
265                 FirstStmt [action_lang_stmt] Rest [repeat action_lang_stmt]
266         construct JavaFirst [repeat java_lang_stmt]
267                 _ 
268                         [alStmtToJava1 FirstStmt]
269                         [alStmtToJava2 FirstStmt]
270                         [alStmtToJava3 FirstStmt]
271                         [alStmtToJava4a FirstStmt]
272                         [alStmtToJava4b FirstStmt]
273                         [alStmtToJava4c FirstStmt]
274                         [alStmtToJava4d FirstStmt]
275                         [alStmtToJava5 FirstStmt]
276                         [alStmtToJava6 FirstStmt]
277         construct JavaRest [repeat java_lang_stmt]
278                 _ [alToJava Rest]
279         replace [repeat java_lang_stmt]
280         by
281                 JavaFirst [. JavaRest]
282 end function
283
284 rule actionTransJava
285         replace [al_host_block]
286                 '{ AlStmts [repeat action_lang_stmt] '}
287         construct JavaStmts [repeat java_lang_stmt]
288                 _ [alToJava AlStmts]
289         by
290                 '{ JavaStmts '}
291 end rule
292
293 rule machineName
294         replace $ [machine_stmt]
295                 'machine _ [id] ';
296         import TXLargs [repeat stringlit]
297                 Arg1 [stringlit] _ [repeat stringlit]
298         construct ClassName [id]
299                 _ [unquote Arg1]
300         by
301                 'machine ClassName ';
302 end rule
303
304 function langTransJava
305         replace [program]
306                 Definitions [repeat action_lang_stmt]
307                 '%%
308                 Initializations [repeat action_lang_stmt]
309                 RagelDef [ragel_def]
310         construct JavaDefinitions [repeat java_lang_stmt]
311                 _ [alToJava Definitions]
312         construct JavaInitializations [repeat java_lang_stmt]
313                 _ [alToJava Initializations]
314         construct NewRagelDef [ragel_def]
315                 RagelDef [actionTransJava] [machineName]
316         import ArrayInits [java_statements]
317                 ArrayInitStmts [repeat java_lang_stmt]
318         by
319                 JavaDefinitions
320                 '%%
321                 ArrayInitStmts [. JavaInitializations]
322                 NewRagelDef
323 end function
324
325 function main
326         replace [program]
327                 P [program]
328         export ArrayInits [java_statements]
329                 _
330         by
331                 P [langTransJava] 
332 end function