@@ -51,18 +51,18 @@ pub struct ColType {
5151
5252// TODO
5353pub struct ParserReport {
54- bit_stream : String ,
55- errors : Vec < Error > ,
54+ pub bit_stream : String ,
55+ pub report : Vec < Error > ,
5656 id_collect : HashMap < String , ColType > ,
5757}
5858
5959/// generate a bit stream from a Vec of Spanned Token
60- pub fn generate_bit_stream (
60+ pub fn parse (
6161 tokens : & mut Vec < ( Result < Token , ( ) > , Range < usize > ) > ,
6262 colorize : bool ,
6363 debug : bool ,
6464 sep : & str ,
65- ) -> ( String , HashMap < String , ColType > , Vec < Error > ) {
65+ ) -> ParserReport {
6666 colored:: control:: set_override ( colorize) ;
6767 let mut bit_stream_with_id: Vec < String > = vec ! [ ] ;
6868
@@ -230,7 +230,14 @@ pub fn generate_bit_stream(
230230 let id_ref = id_collect. get ( id) ;
231231
232232 if id_ref == None {
233- id_collect. insert ( id. clone ( ) , ColType { val : adr, span : span. clone ( ) , visited : false } ) ;
233+ id_collect. insert (
234+ id. clone ( ) ,
235+ ColType {
236+ val : adr,
237+ span : span. clone ( ) ,
238+ visited : false ,
239+ } ,
240+ ) ;
234241 } else {
235242 let other_span = ( * id_ref. unwrap ( ) ) . span . clone ( ) ;
236243 let report = miette ! (
@@ -253,7 +260,14 @@ pub fn generate_bit_stream(
253260 let id_ref = id_collect. get ( id) ;
254261
255262 if id_ref == None {
256- id_collect. insert ( id. clone ( ) , ColType { val : * val, span : span. clone ( ) , visited : false } ) ;
263+ id_collect. insert (
264+ id. clone ( ) ,
265+ ColType {
266+ val : * val,
267+ span : span. clone ( ) ,
268+ visited : false ,
269+ } ,
270+ ) ;
257271 } else {
258272 let other_span = ( * id_ref. unwrap ( ) ) . span . clone ( ) ;
259273 let report = miette ! (
@@ -325,19 +339,27 @@ pub fn generate_bit_stream(
325339
326340 for ( key, context) in id_collect. clone ( ) {
327341 match context {
328- ColType { val : _, span, visited : false } => {
342+ ColType {
343+ val : _,
344+ span,
345+ visited : false ,
346+ } => {
329347 let report = miette ! (
330348 severity = Severity :: Warning ,
331349 labels = vec![ LabeledSpan :: at( span, "Here" ) , ] ,
332350 "Error: {key} declared but never used"
333351 ) ;
334352 errors. push ( report) ;
335353 }
336- _ => ( )
354+ _ => ( ) ,
337355 }
338356 }
339357
340- ( bit_stream. join ( sep) , id_collect, errors)
358+ ParserReport {
359+ bit_stream : bit_stream. join ( sep) ,
360+ report : errors,
361+ id_collect : id_collect,
362+ }
341363}
342364
343365#[ cfg( test) ]
@@ -349,42 +371,91 @@ mod tests {
349371 fn test_define ( ) {
350372 let src = "DEFINE foo 0\n DEFINE bar 1\n DEFINE titi 42\n DEFINE tata 73" ;
351373 let mut collection: HashMap < String , ColType > = HashMap :: new ( ) ;
352- collection. insert ( "foo" . to_string ( ) , ColType { val : 0 , span : 7 ..10 , visited : false } ) ;
353- collection. insert ( "bar" . to_string ( ) , ColType { val : 1 , span : 20 ..23 , visited : false } ) ;
354- collection. insert ( "titi" . to_string ( ) , ColType { val : 42 , span : 33 ..37 , visited : false } ) ;
355- collection. insert ( "tata" . to_string ( ) , ColType { val : 73 , span : 48 ..52 , visited : false } ) ;
374+ collection. insert (
375+ "foo" . to_string ( ) ,
376+ ColType {
377+ val : 0 ,
378+ span : 7 ..10 ,
379+ visited : false ,
380+ } ,
381+ ) ;
382+ collection. insert (
383+ "bar" . to_string ( ) ,
384+ ColType {
385+ val : 1 ,
386+ span : 20 ..23 ,
387+ visited : false ,
388+ } ,
389+ ) ;
390+ collection. insert (
391+ "titi" . to_string ( ) ,
392+ ColType {
393+ val : 42 ,
394+ span : 33 ..37 ,
395+ visited : false ,
396+ } ,
397+ ) ;
398+ collection. insert (
399+ "tata" . to_string ( ) ,
400+ ColType {
401+ val : 73 ,
402+ span : 48 ..52 ,
403+ visited : false ,
404+ } ,
405+ ) ;
356406
357407 let lex = Token :: lexer ( src) ;
358408
359409 let mut tokens: Vec < ( Result < Token , ( ) > , std:: ops:: Range < usize > ) > = lex. spanned ( ) . collect ( ) ;
360410 assert_eq ! (
361411 collection,
362- generate_bit_stream ( & mut tokens, false , false , "" ) . 1
412+ parse ( & mut tokens, false , false , "" ) . id_collect
363413 ) ;
364414 assert_eq ! (
365415 collection,
366- generate_bit_stream ( & mut tokens, false , true , "" ) . 1
416+ parse ( & mut tokens, false , true , "" ) . id_collect
367417 ) ;
368418 }
369419
370420 #[ test]
371421 fn test_label ( ) {
372422 let src = "main:\n JMP\n label:\n JMP\n JMP\n JMP\n JMP\n JMP\n JMP\n JMP\n JMP\n titi:" ;
373423 let mut collection: HashMap < String , ColType > = HashMap :: new ( ) ;
374- collection. insert ( "main" . to_string ( ) , ColType { val : 0 , span : 0 ..4 , visited : false } ) ;
375- collection. insert ( "label" . to_string ( ) , ColType { val : 16 , span : 10 ..15 , visited : false } ) ;
376- collection. insert ( "titi" . to_string ( ) , ColType { val : 144 , span : 49 ..53 , visited : false } ) ;
424+ collection. insert (
425+ "main" . to_string ( ) ,
426+ ColType {
427+ val : 0 ,
428+ span : 0 ..4 ,
429+ visited : false ,
430+ } ,
431+ ) ;
432+ collection. insert (
433+ "label" . to_string ( ) ,
434+ ColType {
435+ val : 16 ,
436+ span : 10 ..15 ,
437+ visited : false ,
438+ } ,
439+ ) ;
440+ collection. insert (
441+ "titi" . to_string ( ) ,
442+ ColType {
443+ val : 144 ,
444+ span : 49 ..53 ,
445+ visited : false ,
446+ } ,
447+ ) ;
377448
378449 let lex = Token :: lexer ( src) ;
379450
380451 let mut tokens: Vec < ( Result < Token , ( ) > , std:: ops:: Range < usize > ) > = lex. spanned ( ) . collect ( ) ;
381452 assert_eq ! (
382453 collection,
383- generate_bit_stream ( & mut tokens, false , false , "" ) . 1
454+ parse ( & mut tokens, false , false , "" ) . id_collect
384455 ) ;
385456 assert_eq ! (
386457 collection,
387- generate_bit_stream ( & mut tokens, false , true , "" ) . 1
458+ parse ( & mut tokens, false , true , "" ) . id_collect
388459 ) ;
389460 }
390461
@@ -399,11 +470,11 @@ mod tests {
399470
400471 assert_eq ! (
401472 expected,
402- generate_bit_stream ( & mut tokens, false , false , "\n " ) . 0
473+ parse ( & mut tokens, false , false , "\n " ) . bit_stream
403474 ) ;
404475 assert_eq ! (
405476 expected,
406- generate_bit_stream ( & mut tokens, false , true , "\n " ) . 0
477+ parse ( & mut tokens, false , true , "\n " ) . bit_stream
407478 ) ;
408479 }
409480
@@ -414,8 +485,8 @@ mod tests {
414485 let lex = Token :: lexer ( src) ;
415486
416487 let mut tokens: Vec < ( Result < Token , ( ) > , std:: ops:: Range < usize > ) > = lex. spanned ( ) . collect ( ) ;
417- assert ! ( !generate_bit_stream ( & mut tokens, false , false , "" )
418- . 2
488+ assert ! ( !parse ( & mut tokens, false , false , "" )
489+ . report
419490 . is_empty( ) ) ;
420491 }
421492
@@ -431,11 +502,11 @@ mod tests {
431502
432503 assert_eq ! (
433504 expected,
434- generate_bit_stream ( & mut tokens, false , false , "\n " ) . 0
505+ parse ( & mut tokens, false , false , "\n " ) . bit_stream
435506 ) ;
436507 assert_eq ! (
437508 expected,
438- generate_bit_stream ( & mut tokens, false , true , "\n " ) . 0
509+ parse ( & mut tokens, false , true , "\n " ) . bit_stream
439510 ) ;
440511 }
441512
@@ -446,8 +517,8 @@ mod tests {
446517 let lex = Token :: lexer ( src) ;
447518
448519 let mut tokens: Vec < ( Result < Token , ( ) > , std:: ops:: Range < usize > ) > = lex. spanned ( ) . collect ( ) ;
449- assert ! ( !generate_bit_stream ( & mut tokens, false , false , "" )
450- . 2
520+ assert ! ( !parse ( & mut tokens, false , false , "" )
521+ . report
451522 . is_empty( ) )
452523 }
453524
@@ -463,11 +534,11 @@ mod tests {
463534
464535 assert_eq ! (
465536 expected,
466- generate_bit_stream ( & mut tokens, false , false , "\n " ) . 0
537+ parse ( & mut tokens, false , false , "\n " ) . bit_stream
467538 ) ;
468539 assert_eq ! (
469540 expected,
470- generate_bit_stream ( & mut tokens, false , true , "\n " ) . 0
541+ parse ( & mut tokens, false , true , "\n " ) . bit_stream
471542 ) ;
472543 }
473544
@@ -483,11 +554,11 @@ mod tests {
483554
484555 assert_eq ! (
485556 expected,
486- generate_bit_stream ( & mut tokens, false , false , "\n " ) . 0
557+ parse ( & mut tokens, false , false , "\n " ) . bit_stream
487558 ) ;
488559 assert_eq ! (
489560 expected,
490- generate_bit_stream ( & mut tokens, false , true , "\n " ) . 0
561+ parse ( & mut tokens, false , true , "\n " ) . bit_stream
491562 ) ;
492563 }
493564
@@ -503,11 +574,11 @@ mod tests {
503574
504575 assert_eq ! (
505576 expected,
506- generate_bit_stream ( & mut tokens, false , false , "\n " ) . 0
577+ parse ( & mut tokens, false , false , "\n " ) . bit_stream
507578 ) ;
508579 assert_eq ! (
509580 expected,
510- generate_bit_stream ( & mut tokens, false , true , "\n " ) . 0
581+ parse ( & mut tokens, false , true , "\n " ) . bit_stream
511582 ) ;
512583 }
513584
@@ -520,7 +591,7 @@ mod tests {
520591
521592 let mut tokens: Vec < ( Result < Token , ( ) > , std:: ops:: Range < usize > ) > = lex. spanned ( ) . collect ( ) ;
522593
523- generate_bit_stream ( & mut tokens, false , false , "" ) ;
594+ parse ( & mut tokens, false , false , "" ) ;
524595 }
525596
526597 #[ test]
@@ -535,11 +606,11 @@ mod tests {
535606
536607 assert_eq ! (
537608 expected,
538- generate_bit_stream ( & mut tokens, false , false , "\n " ) . 0
609+ parse ( & mut tokens, false , false , "\n " ) . bit_stream
539610 ) ;
540611 assert_eq ! (
541612 expected,
542- generate_bit_stream ( & mut tokens, false , true , "\n " ) . 0
613+ parse ( & mut tokens, false , true , "\n " ) . bit_stream
543614 ) ;
544615 }
545616
@@ -551,8 +622,8 @@ mod tests {
551622
552623 let mut tokens: Vec < ( Result < Token , ( ) > , std:: ops:: Range < usize > ) > = lex. spanned ( ) . collect ( ) ;
553624
554- assert ! ( !generate_bit_stream ( & mut tokens, false , false , "" )
555- . 2
625+ assert ! ( !parse ( & mut tokens, false , false , "" )
626+ . report
556627 . is_empty( ) ) ;
557628 }
558629
@@ -564,8 +635,8 @@ mod tests {
564635
565636 let mut tokens: Vec < ( Result < Token , ( ) > , std:: ops:: Range < usize > ) > = lex. spanned ( ) . collect ( ) ;
566637
567- assert ! ( !generate_bit_stream ( & mut tokens, false , false , "" )
568- . 2
638+ assert ! ( !parse ( & mut tokens, false , false , "" )
639+ . report
569640 . is_empty( ) ) ;
570641 }
571642}
0 commit comments