with Ada.Strings.Unbounded;
package Machina is
-- Création de système linguisique --
-- 'Length' est la taille de l'alphabet ;
-- 'Name' est le nom du système.
procedure Create_System(Length : in Positive; Name : in String);
-- Si un système porte déjà le nom donné, on lève une exception ;
Name_Exist : exception;
-- Les mots sources sont représenté par des tableaus de positifs.
type T_Positive_String is array (Positive range <> ) of Positive;
type T_Positive_Word(Length : Positive) is
record
Positive_String : T_Positive_String(1..Length);
end record;
-- Création d'un mot d'un système --
-- 'Item' est la représentation du mot ;
-- 'Name' est le système auquel appartien le mot.
procedure Create_Word(Word : in T_Positive_Word; Name : in String);
-- Si l'alphabet utiliser dans word à la création d'un mot est en dehors
-- de la borne supérieur de l'alphabet, on lève une exception ;
Out_Of_Range : exception;
private
-- Une lettre est codé par un tableau binaire.
type T_Binary_Code is array (Positive range <> ) of Boolean;
type T_Letter(Width : Positive) is
record
Code : T_Binary_Code(1..Width);
end record;
-- on accède au lettres par référence à l'alphabet.
type Letter_Access is access T_Letter;
-- L'aphabet contient toute les lettres d'un système linguistique.
type T_Alphabet is array (Natural range <> ) of Letter_access;
-- Toute les lettres d'un mot sont dans l'alphabet.
type T_Valid_Letter is access
function(Index : in Positive; Name : in String) return Letter_Access;
-- Les mots codé d'un système sont représentés par des tableaux
-- de lettres de l'alphabet.
type T_Alpha_Beta_code is array (Positive range <> ) of T_Valid_Letter;
type T_Coded_Word(Length : Positive) is
record
Alpba_Beta_Code : T_Alpha_Beta_Code(1..Length);
end record;
-- Un système linguistique est un alphabet.
type T_System(Length : Positive) is
record
Alpabet : T_Alphabet(1..Length);
Name : Ada.Strings.Unbounded.Unbounded_String;
end record;
end Machina;