Added clang4, a new language independent test case derived from clang1. Also
[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 | 'printb
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                 [al_term_base] [opt union]
116 end define
117
118 define al_term_base
119                 [id]
120         |       [opt al_sign] [number]
121         |       [stringlit] 
122         |       [charlit] 
123         |       'fc
124         |       'true
125         |       'false
126         |       '( [al_expr] ')
127 end define
128
129 define al_sign
130                 '- | '+
131 end define
132
133 define al_if_stmt
134                 'if '( [al_expr] ') [NL] [IN]
135                         [action_lang_stmt] [EX]
136                 [opt al_else]
137 end define
138
139 define al_else
140                 'else [NL] [IN]
141                         [action_lang_stmt] [EX]
142 end define
143
144 define al_ragel_stmt
145                 'fbreak '; [NL]
146         |       'fhold '; [NL]
147         |       'fexec [repeat al_expr] '; [NL]
148         |       'fnext [id] '; [NL]
149         |       'fgoto [id] '; [NL]
150         |       'fcall [id] '; [NL]
151         |       'fnext '* [repeat al_expr] '; [NL]
152         |       'fgoto '* [repeat al_expr] '; [NL]
153         |       'fcall '* [repeat al_expr] '; [NL]
154         |       'fret '; [NL]
155 end define
156
157 define machine_def
158                 [id] '= [machine_expr] '; [NL]
159 end define
160
161 define machine_inst
162                 [id] ':= [machine_expr] '; [NL]
163 end define
164
165 define machine_expr
166                 [repeat machine_expr_item]
167 end define
168
169 define scanner_item
170                 [repeat machine_expr_item] '; [NL]
171 end define
172
173 define machine_expr_item
174                 [action_embed] [al_host_block]
175         |       '|* [repeat scanner_item] '*|
176         |       [not ';] [not '*|] [token]
177 end define
178
179 define al_host_block
180                 '{ [NL] [IN] [al_statements] [EX] '} [NL]
181 end define
182
183 define action_embed
184                 '> | '$ | '@ | '% | 
185                 '$! | '=>
186 end define
187