First cut of a test-suite transformation for Ruby. Some of the tests work.
[external/ragel.git] / test / testcase.txl
1 comments
2                 '#
3 end comments
4
5 tokens
6                 union "\[[(\\\c)#\]]*\]"
7 end tokens
8
9 compounds
10                 '%% '%%{ '}%% '== ':= '-> '<> '>= '<= '=>
11                 '|* '*|
12                 '>! '<! '$! '%! '@! '<>!
13                 '>/ '</ '$/ '%/ '@/ '<>/
14 end compounds
15
16 keys
17         'int 'bool 'true 'false 'char 'ptr
18         'if 'else 'printi 'prints 
19         'fc 'fpc 'fbreak 'fgoto 'fcall 'fret 'fhold 'fexec
20         'machine 'alphtype 'action
21 end keys
22
23 define lang_indep
24                 [al_statements]
25                 '%% [NL]
26                 [al_statements]
27                 [ragel_def]
28 end define
29
30 define ragel_def
31                 '%%{ [NL] [IN]
32                         [ragel_program]
33                 [EX] '}%% [NL]
34 end define
35
36 define ragel_program
37                 [repeat statement]
38 end define 
39
40 define statement
41                 [machine_stmt]
42         |       [alphtype_stmt]
43         |       [action_stmt]
44         |       [cond_action_stmt]
45         |       [machine_def]
46         |       [machine_inst]
47 end define 
48
49 define machine_stmt
50                 'machine [id] '; [NL]
51 end define
52
53 define alphtype_stmt
54                 'alphtype [repeat id] '; [NL]
55 end define
56
57 define action_stmt
58                 'action [id] [al_host_block]
59 end define
60
61 define cond_action_stmt
62                 'action [id] '{ [al_expr] '} [NL]
63 end define
64
65 define al_statements
66                 [repeat action_lang_stmt]
67 end define
68
69 define action_lang_stmt
70                 [al_ragel_stmt]
71         |       [al_variable_decl]
72         |       [al_expr_stmt]
73         |       [al_if_stmt]
74         |       [al_print_stmt]
75         |       '{ [al_statements] '}
76 end define
77
78 define al_print_stmt
79                 [print_cmd] [al_expr] '; [NL]
80 end define
81
82 define print_cmd
83                 'printi | 'prints
84 end define
85
86 define al_variable_decl
87                 [al_type_decl] [id] [opt union] '; [NL]
88 end define
89
90 define al_array_decl
91                 '[ [number] ']
92 end define
93
94 define al_type_decl
95                 'int | 'bool | 'char | 'ptr
96 end define 
97
98 define al_expr_stmt
99                 [al_expr] '; [NL]
100 end define
101
102 define al_expr
103                 [al_term] [repeat al_expr_extend]
104 end define
105
106 define al_expr_extend
107                 [al_expr_op] [al_term]
108 end define
109
110 define al_expr_op
111                 '= | '+ | '- | '* | '/ | '== | '<= | '>=
112 end define
113
114 define al_term
115                 [id]
116         |       [opt al_sign] [number]
117         |       [stringlit] [opt union]
118         |       [charlit] 
119         |       'fc
120         |       'true
121         |       'false
122         |       '( [al_expr] ')
123 end define
124
125 define al_sign
126                 '- | '+
127 end define
128
129 define al_if_stmt
130                 'if '( [al_expr] ') [NL] [IN]
131                         [action_lang_stmt] [EX]
132                 [opt al_else]
133 end define
134
135 define al_else
136                 'else [NL] [IN]
137                         [action_lang_stmt] [EX]
138 end define
139
140 define al_ragel_stmt
141                 'fbreak '; [NL]
142         |       'fhold '; [NL]
143         |       'fexec [repeat al_expr] '; [NL]
144         |       'fnext [id] '; [NL]
145         |       'fgoto [id] '; [NL]
146         |       'fcall [id] '; [NL]
147         |       'fnext '* [repeat al_expr] '; [NL]
148         |       'fgoto '* [repeat al_expr] '; [NL]
149         |       'fcall '* [repeat al_expr] '; [NL]
150         |       'fret '; [NL]
151 end define
152
153 define machine_def
154                 [id] '= [machine_expr] '; [NL]
155 end define
156
157 define machine_inst
158                 [id] ':= [machine_expr] '; [NL]
159 end define
160
161 define machine_expr
162                 [repeat machine_expr_item]
163 end define
164
165 define scanner_item
166                 [repeat machine_expr_item] '; [NL]
167 end define
168
169 define machine_expr_item
170                 [action_embed] [al_host_block]
171         |       '|* [repeat scanner_item] '*|
172         |       [not ';] [not '*|] [token]
173 end define
174
175 define al_host_block
176                 '{ [NL] [IN] [al_statements] [EX] '} [NL]
177 end define
178
179 define action_embed
180                 '> | '$ | '@ | '% | 
181                 '$! | '=>
182 end define
183