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