From 30d59f09f6908aa0de2ec3a58a0736c8030ffda5 Mon Sep 17 00:00:00 2001 From: Jed Barber Date: Thu, 21 Jan 2021 16:33:47 +1100 Subject: Piecewise parsing fixed, unit tested --- test/rat_tests-parsers.ads | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'test/rat_tests-parsers.ads') diff --git a/test/rat_tests-parsers.ads b/test/rat_tests-parsers.ads index 198b622..bca6e30 100644 --- a/test/rat_tests-parsers.ads +++ b/test/rat_tests-parsers.ads @@ -72,11 +72,17 @@ package Rat_Tests.Parsers is (+"Not_Empty", Not_Empty_Check'Access)); + function Parse_Parts_Check return Test_Result; + function Parse_Parts_Left_Check return Test_Result; + function Parse_Parts_Exception_Check return Test_Result; function Parse_Once_Check return Test_Result; function Parse_Once_Exception_Check return Test_Result; Parser_Tests : Test_Array := - ((+"Parse_Once", Parse_Once_Check'Access), + ((+"Parse_Parts", Parse_Parts_Check'Access), + (+"Parse_Parts Left Recursive", Parse_Parts_Left_Check'Access), + (+"Parse_Parts Exception", Parse_Parts_Exception_Check'Access), + (+"Parse_Once", Parse_Once_Check'Access), (+"Parse_Once Exception", Parse_Once_Exception_Check'Access)); @@ -151,6 +157,7 @@ private function Add_Expr is new Left_Sums.Parsers.Sequence_2 (Add, Left_Sums.Parsers.End_Of_Input); package Add_Parse_Once is new Left_Sums.Parsers.Parse_Once (Add_Expr); + package Add_Parse_Parts is new Left_Sums.Parsers.Parse_Parts (Add_Expr); @@ -167,20 +174,20 @@ private function Stamper_Number is new Add_Errors.Parsers.Stamp (Number_Err, Sater_Digit); function Matcher_Plus is new Add_Errors.Parsers.Match ('+'); - function Stamper_Plus is new Add_Errors.Parsers.Stamp (Plus_Err, Matcher_Plus); - function Ignorer_Plus is new Add_Errors.Parsers.Ignore (Stamper_Plus); + function Discarder_Plus is new Add_Errors.Parsers.Discard (Plus_Err, Matcher_Plus); function Sumer_Plus is new Add_Errors.Parsers.Sequence - ((Adder_Redir.Call'Access, Ignorer_Plus'Access, Stamper_Number'Access)); + ((Stamper_Number'Access, Discarder_Plus'Access, Adder_Redir.Call'Access)); function Sumer_Choice is new Add_Errors.Parsers.Choice ((Sumer_Plus'Access, Stamper_Number'Access)); function Sumer is new Add_Errors.Parsers.Stamp (Sum_Err, Sumer_Choice); - function Stamper_End is new Add_Errors.Parsers.Stamp (Eof_Err, Add_Errors.Parsers.End_Of_Input); - function Ignorer_End is new Add_Errors.Parsers.Ignore (Stamper_End); - function Sumer_Expr is new Add_Errors.Parsers.Sequence_2 (Sumer, Ignorer_End); + function Discarder_End is new Add_Errors.Parsers.Discard + (Eof_Err, Add_Errors.Parsers.End_Of_Input); + function Sumer_Expr is new Add_Errors.Parsers.Sequence_2 (Sumer, Discarder_End); package Adder_Parse_Once is new Add_Errors.Parsers.Parse_Once (Sumer_Expr); + package Adder_Parse_Parts is new Add_Errors.Parsers.Parse_Parts (Sumer_Expr); -- cgit