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