From 2912e22000bff5b83b77daeb2b5ed111c47268b8 Mon Sep 17 00:00:00 2001 From: Jed Barber Date: Tue, 8 Jan 2019 16:29:30 +1100 Subject: Packrat.Errors specification and tests --- src/packrat.ads | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) (limited to 'src/packrat.ads') diff --git a/src/packrat.ads b/src/packrat.ads index 36410d5..628923f 100644 --- a/src/packrat.ads +++ b/src/packrat.ads @@ -1,8 +1,93 @@ +with + + Ada.Strings.Unbounded; + + package Packrat is + Parse_Error : exception; + + + + + package Errors is + + + subtype Error_Message is String + with Dynamic_Predicate => Valid_Message (Error_Message); + + type Error_Info is record + Symbol : Ada.Strings.Unbounded.Unbounded_String; + Position : Natural; + end record; + + type Error_Info_Array is array (Positive range <>) of Error_Info; + + + -- Note: No consideration is given to ordering of Error_Info items + -- encoded into an Error_Message string. + + -- Note: Using "&" to join two Valid Error_Messages together + -- will result in an Error_Message that is also Valid, + -- but for best results Join should be used instead to + -- prevent duplication of Error_Info in the message. + + + function Valid_Identifier + (Check : in String) + return Boolean; + + function Valid_Identifier + (Check : in Ada.Strings.Unbounded.Unbounded_String) + return Boolean; + + function Valid_Identifier_Array + (Check : in Error_Info_Array) + return Boolean; + + function Valid_Message + (Check : in String) + return Boolean; + + + function Join + (Left, Right : in Error_Message) + return Error_Message; + + + function Encode + (Name : in String; + Pos : in Natural) + return Error_Message + with Pre => Valid_Identifier (Name); + + function Encode + (Name : in Ada.Strings.Unbounded.Unbounded_String; + Pos : in Natural) + return Error_Message + with Pre => Valid_Identifier (Name); + + function Encode + (Info : in Error_Info) + return Error_Message + with Pre => Valid_Identifier (Info.Symbol); + + function Encode_Array + (Info : in Error_Info_Array) + return Error_Message + with Pre => Valid_Identifier_Array (Info); + + function Decode + (Msg : in Error_Message) + return Error_Info_Array; + + + end Errors; + + private -- cgit