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