diff options
author | Jed Barber <jjbarber@y7mail.com> | 2019-01-08 16:29:30 +1100 |
---|---|---|
committer | Jed Barber <jjbarber@y7mail.com> | 2019-01-08 16:29:30 +1100 |
commit | 2912e22000bff5b83b77daeb2b5ed111c47268b8 (patch) | |
tree | e953e4387171f3308c4b14cf7ca0ebfb7dc391e2 /src/packrat.ads | |
parent | 1e67356ba64622e07877db1c65f823f0f58b1321 (diff) |
Packrat.Errors specification and tests
Diffstat (limited to 'src/packrat.ads')
-rw-r--r-- | src/packrat.ads | 85 |
1 files changed, 85 insertions, 0 deletions
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 |