with Ada.Characters.Latin_1; separate (Packrat) package body Tokens is package SU renames Ada.Strings.Unbounded; package Latin renames Ada.Characters.Latin_1; function Create (Ident : in Label_Enum; Start : in Positive; Value : in Element_Array) return Token is begin return This : Token do This.Identifier := Ident; This.Start_At := Start; This.Token_Value := Value_Holders.To_Holder (Value); end return; end Create; function Debug_String (This : in Token) return String is Result : SU.Unbounded_String := +""; begin SU.Append (Result, "Token " & Label_Enum'Image (This.Identifier) & " at input position" & Integer'Image (This.Start_At) & " with value length" & Integer'Image (This.Token_Value.Constant_Reference.Element'Length) & Latin.LF); return -Result; end Debug_String; function Label (This : in Token) return Label_Enum is begin return This.Identifier; end Label; function Start (This : in Token) return Positive is begin return This.Start_At; end Start; function Value (This : in Token) return Element_Array is begin return This.Token_Value.Element; end Value; end Tokens;