scryer_prolog/parser/
macros.rs1#[macro_export]
2macro_rules! char_class {
3 ($c: expr, [$head:expr]) => ($c == $head);
4 ($c: expr, [$head:expr $(, $cs:expr)+]) => ($c == $head || $crate::char_class!($c, [$($cs),*]));
5}
6
7#[macro_export]
8macro_rules! alpha_char {
9 ($c: expr) => {
10 (!$c.is_numeric()
11 && !$c.is_whitespace()
12 && !$c.is_control()
13 && !$crate::graphic_token_char!($c)
14 && !$crate::layout_char!($c)
15 && !$crate::meta_char!($c)
16 && !$crate::solo_char!($c))
17 || $c == '_'
18 };
19}
20
21#[macro_export]
22macro_rules! alpha_numeric_char {
23 ($c: expr) => {
24 $crate::alpha_char!($c) || $c.is_numeric()
25 };
26}
27
28#[macro_export]
29macro_rules! backslash_char {
30 ($c: expr) => {
31 $c == '\\'
32 };
33}
34
35#[macro_export]
36macro_rules! back_quote_char {
37 ($c: expr) => {
38 $c == '`'
39 };
40}
41
42#[macro_export]
43macro_rules! octet_char {
44 ($c: expr) => {
45 ('\u{0000}'..='\u{00FF}').contains(&$c)
46 };
47}
48
49#[macro_export]
50macro_rules! capital_letter_char {
51 ($c: expr) => {
52 $c.is_uppercase()
53 };
54}
55
56#[macro_export]
57macro_rules! comment_1_char {
58 ($c: expr) => {
59 $c == '/'
60 };
61}
62
63#[macro_export]
64macro_rules! comment_2_char {
65 ($c: expr) => {
66 $c == '*'
67 };
68}
69
70#[macro_export]
71macro_rules! cut_char {
72 ($c: expr) => {
73 $c == '!'
74 };
75}
76
77#[macro_export]
78macro_rules! decimal_digit_char {
79 ($c: expr) => {
80 $c.is_ascii_digit()
81 };
82}
83
84#[macro_export]
85macro_rules! decimal_point_char {
86 ($c: expr) => {
87 $c == '.'
88 };
89}
90
91#[macro_export]
92macro_rules! double_quote_char {
93 ($c: expr) => {
94 $c == '"'
95 };
96}
97
98#[macro_export]
99macro_rules! end_line_comment_char {
100 ($c: expr) => {
101 $c == '%'
102 };
103}
104
105#[macro_export]
106macro_rules! exponent_char {
107 ($c: expr) => {
108 $c == 'e' || $c == 'E'
109 };
110}
111
112#[macro_export]
113macro_rules! graphic_char {
114 ($c: expr) => ($crate::char_class!($c, ['#', '$', '&', '*', '+', '-', '.', '/', ':',
115 '<', '=', '>', '?', '@', '^', '~']))
116}
117
118#[macro_export]
119macro_rules! graphic_token_char {
120 ($c: expr) => {
121 $crate::graphic_char!($c) || $crate::backslash_char!($c)
122 };
123}
124
125#[macro_export]
126macro_rules! hexadecimal_digit_char {
127 ($c: expr) => {
128 $c.is_ascii_digit() || ('A'..='F').contains(&$c) || ('a'..='f').contains(&$c)
129 };
130}
131
132#[macro_export]
133macro_rules! layout_char {
134 ($c: expr) => {
135 $crate::char_class!($c, [' ', '\r', '\n', '\t', '\u{0B}', '\u{0C}'])
136 };
137}
138
139#[macro_export]
140macro_rules! meta_char {
141 ($c: expr) => {
142 $crate::char_class!($c, ['\\', '\'', '"', '`'])
143 };
144}
145
146#[macro_export]
147macro_rules! new_line_char {
148 ($c: expr) => {
149 $c == '\n'
150 };
151}
152
153#[macro_export]
154macro_rules! octal_digit_char {
155 ($c: expr) => {
156 ('0'..='7').contains(&$c)
157 };
158}
159
160#[macro_export]
161macro_rules! binary_digit_char {
162 ($c: expr) => {
163 $c == '0' || $c == '1'
164 };
165}
166
167#[macro_export]
168macro_rules! prolog_char {
169 ($c: expr) => {
170 $crate::graphic_char!($c)
171 || $crate::alpha_numeric_char!($c)
172 || $crate::solo_char!($c)
173 || $crate::layout_char!($c)
174 || $crate::meta_char!($c)
175 };
176}
177
178#[macro_export]
179macro_rules! semicolon_char {
180 ($c: expr) => {
181 $c == ';'
182 };
183}
184
185#[macro_export]
186macro_rules! sign_char {
187 ($c: expr) => {
188 $c == '-' || $c == '+'
189 };
190}
191
192#[macro_export]
193macro_rules! single_quote_char {
194 ($c: expr) => {
195 $c == '\''
196 };
197}
198
199#[macro_export]
200macro_rules! small_letter_char {
201 ($c: expr) => {
202 $c.is_alphabetic() && !$c.is_uppercase()
203 };
204}
205
206#[macro_export]
207macro_rules! solo_char {
208 ($c: expr) => {
209 $crate::char_class!($c, ['!', '(', ')', ',', ';', '[', ']', '{', '}', '|', '%'])
210 };
211}
212
213#[macro_export]
214macro_rules! space_char {
215 ($c: expr) => {
216 $c == ' '
217 };
218}
219
220#[macro_export]
221macro_rules! symbolic_control_char {
222 ($c: expr) => {
223 $crate::char_class!($c, ['a', 'b', 'f', 'n', 'r', 't', 'v', '0'])
224 };
225}
226
227#[macro_export]
228macro_rules! symbolic_hexadecimal_char {
229 ($c: expr) => {
230 $c == 'x'
231 };
232}
233
234#[macro_export]
235macro_rules! variable_indicator_char {
236 ($c: expr) => {
237 $c == '_'
238 };
239}