@@ -190,7 +190,7 @@ pub fn compile<T: Copy + Ord>(productions: &Map<RE, Option<T>>) -> Result<DFA<Se
190
190
191
191
#[ cfg( test) ]
192
192
mod tests {
193
- use regular_expression:: { sym, rep, cat} ;
193
+ use regular_expression:: { sym, rep, cat, alt } ;
194
194
195
195
use crate :: { Result , lex, compile} ;
196
196
@@ -249,4 +249,67 @@ mod tests {
249
249
assert_eq ! ( expected, actual?) ;
250
250
Ok ( ( ) )
251
251
}
252
+
253
+ #[ test]
254
+ fn test_4 ( ) -> Result < ( ) > {
255
+ #[ derive( Clone , Copy , Debug , Eq , Ord , PartialEq , PartialOrd ) ]
256
+ #[ allow( non_camel_case_types) ]
257
+ #[ allow( dead_code) ]
258
+ enum Token {
259
+ PRODUCTION_OPERATOR ,
260
+ TOKEN ,
261
+ SEMICOLON ,
262
+ VERTICAL_BAR ,
263
+ ASTERISK ,
264
+ PLUS_SIGN ,
265
+ QUESTION_MARK ,
266
+ CARET ,
267
+ DOLLAR_SIGN ,
268
+ FULL_STOP ,
269
+ LEFT_PARENTHESIS ,
270
+ RIGHT_PARENTHESIS ,
271
+ LEFT_SQUARE_BRACKET ,
272
+ RIGHT_SQUARE_BRACKET ,
273
+ HYPHEN ,
274
+ UNESCAPED_LITERAL ,
275
+ ESCAPED_LITERAL ,
276
+ CONTROL_LITERAL ,
277
+ OCTAL_LITERAL ,
278
+ HEXADECIMAL_LITERAL ,
279
+ UNICODE_LITERAL ,
280
+ LEFT_CURLY_BRACKET ,
281
+ RIGHT_CURLY_BRACKET ,
282
+ COMMA ,
283
+ INTEGER ,
284
+ } ;
285
+ use Token :: * ;
286
+ let expected = vec ! [ UNESCAPED_LITERAL , UNESCAPED_LITERAL , UNESCAPED_LITERAL , PRODUCTION_OPERATOR , TOKEN , SEMICOLON ] ;
287
+ let actual = lex ( "abc => ABC;" , & compile ( & map ! [
288
+ cat![ sym!( '=' ) , sym!( '>' ) ] => Some ( PRODUCTION_OPERATOR ) ,
289
+ cat![ alt![ sym!( 'A' ) , sym!( 'B' ) , sym!( 'C' ) /* ... */ ] , rep!( alt![ sym!( 'A' ) , sym!( 'B' ) , sym!( 'C' ) /* ... */ ] ) ] => Some ( TOKEN ) ,
290
+ sym!( ';' ) => Some ( SEMICOLON ) ,
291
+ sym!( '|' ) => Some ( VERTICAL_BAR ) ,
292
+ sym!( '*' ) => Some ( ASTERISK ) ,
293
+ sym!( '+' ) => Some ( PLUS_SIGN ) ,
294
+ sym!( '?' ) => Some ( QUESTION_MARK ) ,
295
+ sym!( '^' ) => Some ( CARET ) ,
296
+ sym!( '$' ) => Some ( DOLLAR_SIGN ) ,
297
+ sym!( '.' ) => Some ( FULL_STOP ) ,
298
+ sym!( '(' ) => Some ( LEFT_PARENTHESIS ) ,
299
+ sym!( ')' ) => Some ( RIGHT_PARENTHESIS ) ,
300
+ sym!( '[' ) => Some ( LEFT_SQUARE_BRACKET ) ,
301
+ sym!( ']' ) => Some ( RIGHT_SQUARE_BRACKET ) ,
302
+ sym!( '-' ) => Some ( HYPHEN ) ,
303
+ alt![ sym!( 'a' ) , sym!( 'b' ) , sym!( 'c' ) /* ... */ ] => Some ( UNESCAPED_LITERAL ) ,
304
+ cat![ sym!( '\\' ) , alt![ sym!( '.' ) , sym!( '^' ) , sym!( '$' ) /* ... */ ] ] => Some ( ESCAPED_LITERAL ) ,
305
+ cat![ sym!( '\\' ) , alt![ sym!( 'n' ) , sym!( 'r' ) , sym!( 't' ) /* ... */ ] ] => Some ( CONTROL_LITERAL ) ,
306
+ sym!( '{' ) => Some ( LEFT_CURLY_BRACKET ) ,
307
+ sym!( '}' ) => Some ( RIGHT_CURLY_BRACKET ) ,
308
+ sym!( ',' ) => Some ( COMMA ) ,
309
+ cat![ alt![ sym!( '0' ) , sym!( '1' ) , sym!( '2' ) /* ... */ ] , rep!( alt![ sym!( '1' ) , sym!( '2' ) , sym!( '3' ) /* ... */ ] ) ] => Some ( INTEGER ) ,
310
+ rep!( sym!( ' ' ) ) => None
311
+ ] ) ?) ;
312
+ assert_eq ! ( expected, actual?) ;
313
+ Ok ( ( ) )
314
+ }
252
315
}
0 commit comments