Added clang4, a new language independent test case derived from clang1. Also
[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 alExprExtendToJava AlExprExtend [repeat al_expr_extend]
130         deconstruct AlExprExtend
131                 Op [al_expr_op] Term [al_term] Rest [repeat al_expr_extend]
132         construct JavaRest [repeat java_expr_extend]
133                 _ [alExprExtendToJava Rest]
134         replace [repeat java_expr_extend]
135         by
136                 Op Term JavaRest
137 end function
138
139 function alExprToJava AlExpr [al_expr]
140         deconstruct AlExpr
141                 ALTerm [al_term] AlExprExtend [repeat al_expr_extend]
142         construct JavaExprExtend [repeat java_expr_extend]
143                 _ [alExprExtendToJava AlExprExtend]
144         construct Result [opt java_expr]
145                 ALTerm JavaExprExtend
146         replace [opt java_expr]
147         by
148                 Result 
149 end function
150
151 function alStmtToJava2 AlStmt [action_lang_stmt]
152         deconstruct AlStmt
153                 AlExpr [al_expr] ';
154         construct OptJavaExpr [opt java_expr]
155                 _ [alExprToJava AlExpr]
156         deconstruct OptJavaExpr
157                 JavaExpr [java_expr]
158         replace [repeat java_lang_stmt]
159         by
160                 JavaExpr ';
161 end function
162
163 function alOptElseJava AlOptElse [opt al_else]
164         deconstruct AlOptElse
165                 'else 
166                         AlSubStmt [action_lang_stmt]
167         construct AlSubStmts [repeat action_lang_stmt]
168                 AlSubStmt
169         construct JavaSubStmts [repeat java_lang_stmt]
170                 _ [alToJava AlSubStmts]
171         deconstruct JavaSubStmts
172                 JavaSubStmt [java_lang_stmt]
173         replace [opt java_else]
174         by
175                 'else 
176                         JavaSubStmt
177 end function
178
179 function alStmtToJava3 AlStmt [action_lang_stmt]
180         deconstruct AlStmt
181                 'if '( AlExpr [al_expr] ')
182                         AlSubStmt [action_lang_stmt]
183                 AlOptElse [opt al_else]
184         construct OptJavaExpr [opt java_expr]
185                 _ [alExprToJava AlExpr]
186         deconstruct OptJavaExpr
187                 JavaExpr [java_expr]
188         construct AlSubStmts [repeat action_lang_stmt]
189                 AlSubStmt
190         construct JavaSubStmts [repeat java_lang_stmt]
191                 _ [alToJava AlSubStmts]
192         deconstruct JavaSubStmts
193                 JavaSubStmt [java_lang_stmt]
194         construct OptJavaElse [opt java_else]
195                 _ [alOptElseJava AlOptElse]
196         replace [repeat java_lang_stmt]
197         by
198                 'if '( JavaExpr ')
199                         JavaSubStmt
200                 OptJavaElse
201 end function
202
203 function alStmtToJava4a AlStmt [action_lang_stmt]
204         deconstruct AlStmt
205                 'printi Id [id] ';
206         replace [repeat java_lang_stmt]
207         by
208                 'System '. 'out '. 'print '( Id ');
209 end function
210
211 function alStmtToJava4b AlStmt [action_lang_stmt]
212         deconstruct AlStmt
213                 'prints String [stringlit] ';
214         replace [repeat java_lang_stmt]
215         by
216                 'System '. 'out '. 'print '( String ');
217 end function
218
219 function alStmtToJava4c AlStmt [action_lang_stmt]
220         deconstruct AlStmt
221                 'printb Id [id] ';
222         replace [repeat java_lang_stmt]
223         by
224                 '_s '= 'new 'String '( Id ', '0 ', 'pos ') ';
225                 'System '. 'out '. 'print '( '_s ');
226 end function
227
228 function alStmtToJava5 AlStmt [action_lang_stmt]
229         deconstruct AlStmt
230                 '{ AlSubStmts [repeat action_lang_stmt] '}
231         construct JavaSubStmts [repeat java_lang_stmt]
232                 _ [alToJava AlSubStmts]
233         replace [repeat java_lang_stmt]
234         by
235                 '{ JavaSubStmts '}
236 end function
237
238 function alStmtToJava6 AlStmt [action_lang_stmt]
239         deconstruct AlStmt
240                 RagelStmt [al_ragel_stmt]
241         replace [repeat java_lang_stmt]
242         by
243                 RagelStmt
244 end function
245
246
247 function alToJava AlStmts [repeat action_lang_stmt]
248         deconstruct AlStmts
249                 FirstStmt [action_lang_stmt] Rest [repeat action_lang_stmt]
250         construct JavaFirst [repeat java_lang_stmt]
251                 _ 
252                         [alStmtToJava1 FirstStmt]
253                         [alStmtToJava2 FirstStmt]
254                         [alStmtToJava3 FirstStmt]
255                         [alStmtToJava4a FirstStmt]
256                         [alStmtToJava4b FirstStmt]
257                         [alStmtToJava4c FirstStmt]
258                         [alStmtToJava5 FirstStmt]
259                         [alStmtToJava6 FirstStmt]
260         construct JavaRest [repeat java_lang_stmt]
261                 _ [alToJava Rest]
262         replace [repeat java_lang_stmt]
263         by
264                 JavaFirst [. JavaRest]
265 end function
266
267 rule actionTransJava
268         replace [al_host_block]
269                 '{ AlStmts [repeat action_lang_stmt] '}
270         construct JavaStmts [repeat java_lang_stmt]
271                 _ [alToJava AlStmts]
272         by
273                 '{ JavaStmts '}
274 end rule
275
276 rule machineName
277         replace $ [machine_stmt]
278                 'machine _ [id] ';
279         import TXLargs [repeat stringlit]
280                 Arg1 [stringlit] _ [repeat stringlit]
281         construct ClassName [id]
282                 _ [unquote Arg1]
283         by
284                 'machine ClassName ';
285 end rule
286
287 function langTransJava
288         replace [program]
289                 Definitions [repeat action_lang_stmt]
290                 '%%
291                 Initializations [repeat action_lang_stmt]
292                 RagelDef [ragel_def]
293         construct JavaDefinitions [repeat java_lang_stmt]
294                 _ [alToJava Definitions]
295         construct JavaInitializations [repeat java_lang_stmt]
296                 _ [alToJava Initializations]
297         construct NewRagelDef [ragel_def]
298                 RagelDef [actionTransJava] [machineName]
299         import ArrayInits [java_statements]
300                 ArrayInitStmts [repeat java_lang_stmt]
301         by
302                 JavaDefinitions
303                 '%%
304                 ArrayInitStmts [. JavaInitializations]
305                 NewRagelDef
306 end function
307
308 function main
309         replace [program]
310                 P [program]
311         export ArrayInits [java_statements]
312                 _
313         by
314                 P [langTransJava] 
315 end function