Added a language-independent test case for the negative sense of conditions and
[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 redefine cond_action_stmt
91                 'action [id] '{ [al_expr] '} [NL]
92         |       'action [id] '{ [java_expr] '} [NL]
93 end redefine
94
95
96 function clearUnion Type [java_type_decl] Id [id] 
97         replace [opt union]
98                 Union [union]
99         import ArrayInits [java_statements]
100                 Stmts [repeat java_lang_stmt]
101         export ArrayInits 
102                 Id '= 'new Type Union '; Stmts
103         by
104                 '[]
105 end function
106
107 rule boolTypes
108         replace [java_type_decl]
109                 'bool
110         by
111                 'boolean
112 end rule
113
114 rule ptrTypes
115         replace [al_type_decl]
116                 'ptr
117         by
118                 'int
119 end rule
120
121 function alStmtToJava1 AlStmt [action_lang_stmt]
122         deconstruct AlStmt
123                 VarDecl [al_variable_decl]
124         deconstruct VarDecl
125                 Type [al_type_decl] Id [id] OptUnion [opt union] ';
126         construct JavaType [java_type_decl]
127                 Type
128         construct Result [java_variable_decl]
129                 JavaType [boolTypes] [ptrTypes] Id OptUnion [clearUnion JavaType Id] ';
130         replace [repeat java_lang_stmt]
131         by
132                 Result
133 end function
134
135 function alTermToJava
136         replace [al_term]
137                 'first_token_char
138         by
139                 'data '[tokstart]
140 end function
141
142 function alExprExtendToJava AlExprExtend [repeat al_expr_extend]
143         deconstruct AlExprExtend
144                 Op [al_expr_op] Term [al_term] Rest [repeat al_expr_extend]
145         construct JavaRest [repeat java_expr_extend]
146                 _ [alExprExtendToJava Rest]
147         replace [repeat java_expr_extend]
148         by
149                 Op Term [alTermToJava] JavaRest
150 end function
151
152 function alExprToJava AlExpr [al_expr]
153         deconstruct AlExpr
154                 ALTerm [al_term] AlExprExtend [repeat al_expr_extend]
155         construct JavaExprExtend [repeat java_expr_extend]
156                 _ [alExprExtendToJava AlExprExtend]
157         construct Result [opt java_expr]
158                 ALTerm [alTermToJava] JavaExprExtend
159         replace [opt java_expr]
160         by
161                 Result 
162 end function
163
164 function alStmtToJava2 AlStmt [action_lang_stmt]
165         deconstruct AlStmt
166                 AlExpr [al_expr] ';
167         construct OptJavaExpr [opt java_expr]
168                 _ [alExprToJava AlExpr]
169         deconstruct OptJavaExpr
170                 JavaExpr [java_expr]
171         replace [repeat java_lang_stmt]
172         by
173                 JavaExpr ';
174 end function
175
176 function alOptElseJava AlOptElse [opt al_else]
177         deconstruct AlOptElse
178                 'else 
179                         AlSubStmt [action_lang_stmt]
180         construct AlSubStmts [repeat action_lang_stmt]
181                 AlSubStmt
182         construct JavaSubStmts [repeat java_lang_stmt]
183                 _ [alToJava AlSubStmts]
184         deconstruct JavaSubStmts
185                 JavaSubStmt [java_lang_stmt]
186         replace [opt java_else]
187         by
188                 'else 
189                         JavaSubStmt
190 end function
191
192 function alStmtToJava3 AlStmt [action_lang_stmt]
193         deconstruct AlStmt
194                 'if '( AlExpr [al_expr] ')
195                         AlSubStmt [action_lang_stmt]
196                 AlOptElse [opt al_else]
197         construct OptJavaExpr [opt java_expr]
198                 _ [alExprToJava AlExpr]
199         deconstruct OptJavaExpr
200                 JavaExpr [java_expr]
201         construct AlSubStmts [repeat action_lang_stmt]
202                 AlSubStmt
203         construct JavaSubStmts [repeat java_lang_stmt]
204                 _ [alToJava AlSubStmts]
205         deconstruct JavaSubStmts
206                 JavaSubStmt [java_lang_stmt]
207         construct OptJavaElse [opt java_else]
208                 _ [alOptElseJava AlOptElse]
209         replace [repeat java_lang_stmt]
210         by
211                 'if '( JavaExpr ')
212                         JavaSubStmt
213                 OptJavaElse
214 end function
215
216 function alStmtToJava4a AlStmt [action_lang_stmt]
217         deconstruct AlStmt
218                 'printi Id [id] ';
219         replace [repeat java_lang_stmt]
220         by
221                 'System '. 'out '. 'print '( Id ');
222 end function
223
224 function alStmtToJava4b AlStmt [action_lang_stmt]
225         deconstruct AlStmt
226                 'prints String [stringlit] ';
227         replace [repeat java_lang_stmt]
228         by
229                 'System '. 'out '. 'print '( String ');
230 end function
231
232 function alStmtToJava4c AlStmt [action_lang_stmt]
233         deconstruct AlStmt
234                 'printb Id [id] ';
235         replace [repeat java_lang_stmt]
236         by
237                 '_s '= 'new 'String '( Id ', '0 ', 'pos ') ';
238                 'System '. 'out '. 'print '( '_s ');
239 end function
240
241 function alStmtToJava4d AlStmt [action_lang_stmt]
242         deconstruct AlStmt
243                 'print_token ';
244         replace [repeat java_lang_stmt]
245         by
246                 '_s '= 'new 'String '( 'data ', 'tokstart ', 'tokend '- 'tokstart ') ';
247                 'System '. 'out '. 'print '( '_s ');
248 end function
249
250 function alStmtToJava5 AlStmt [action_lang_stmt]
251         deconstruct AlStmt
252                 '{ AlSubStmts [repeat action_lang_stmt] '}
253         construct JavaSubStmts [repeat java_lang_stmt]
254                 _ [alToJava AlSubStmts]
255         replace [repeat java_lang_stmt]
256         by
257                 '{ JavaSubStmts '}
258 end function
259
260 function alStmtToJava6 AlStmt [action_lang_stmt]
261         deconstruct AlStmt
262                 RagelStmt [al_ragel_stmt]
263         replace [repeat java_lang_stmt]
264         by
265                 RagelStmt
266 end function
267
268
269 function alToJava AlStmts [repeat action_lang_stmt]
270         deconstruct AlStmts
271                 FirstStmt [action_lang_stmt] Rest [repeat action_lang_stmt]
272         construct JavaFirst [repeat java_lang_stmt]
273                 _ 
274                         [alStmtToJava1 FirstStmt]
275                         [alStmtToJava2 FirstStmt]
276                         [alStmtToJava3 FirstStmt]
277                         [alStmtToJava4a FirstStmt]
278                         [alStmtToJava4b FirstStmt]
279                         [alStmtToJava4c FirstStmt]
280                         [alStmtToJava4d FirstStmt]
281                         [alStmtToJava5 FirstStmt]
282                         [alStmtToJava6 FirstStmt]
283         construct JavaRest [repeat java_lang_stmt]
284                 _ [alToJava Rest]
285         replace [repeat java_lang_stmt]
286         by
287                 JavaFirst [. JavaRest]
288 end function
289
290 rule actionTransJava
291         replace [al_host_block]
292                 '{ AlStmts [repeat action_lang_stmt] '}
293         construct JavaStmts [repeat java_lang_stmt]
294                 _ [alToJava AlStmts]
295         by
296                 '{ JavaStmts '}
297 end rule
298
299 rule condTransJava
300         replace [cond_action_stmt]
301                 'action Id [id] '{ AlExpr [al_expr] '}
302         construct OptJavaExpr [opt java_expr]
303                 _ [alExprToJava AlExpr]
304         deconstruct OptJavaExpr
305                 JavaExpr [java_expr]
306         by
307                 'action Id '{ JavaExpr '}
308 end rule
309
310 rule machineName
311         replace $ [machine_stmt]
312                 'machine _ [id] ';
313         import TXLargs [repeat stringlit]
314                 Arg1 [stringlit] _ [repeat stringlit]
315         construct ClassName [id]
316                 _ [unquote Arg1]
317         by
318                 'machine ClassName ';
319 end rule
320
321 function langTransJava
322         replace [program]
323                 Definitions [repeat action_lang_stmt]
324                 '%%
325                 Initializations [repeat action_lang_stmt]
326                 RagelDef [ragel_def]
327         construct JavaDefinitions [repeat java_lang_stmt]
328                 _ [alToJava Definitions]
329         construct JavaInitializations [repeat java_lang_stmt]
330                 _ [alToJava Initializations]
331         construct NewRagelDef [ragel_def]
332                 RagelDef [actionTransJava] [condTransJava] [machineName]
333         import ArrayInits [java_statements]
334                 ArrayInitStmts [repeat java_lang_stmt]
335         by
336                 JavaDefinitions
337                 '%%
338                 ArrayInitStmts [. JavaInitializations]
339                 NewRagelDef
340 end function
341
342 function main
343         replace [program]
344                 P [program]
345         export ArrayInits [java_statements]
346                 _
347         by
348                 P [langTransJava] 
349 end function