Section courante

A propos

Section administrative du site

Environnement de langage prédéfini

Cette annexe décrit la spécification du paquet STANDARD contenant tous les identifiants prédéfinis dans le langage. Le corps du paquet correspondant est défini par l'implémentation et n'est pas affiché.

Les opérateurs prédéfinis pour les types déclarés dans le paquet STANDARD sont indiqués dans les commentaires car ils sont déclarés implicitement. L'italique est utilisée pour les pseudo-noms de types anonymes (tels que universal_real) et pour les informations non définies (telles que implementation_defined et any_fixed_point_type).

  1. package STANDARD is 
  2.  
  3.   type BOOLEAN is (FALSE, TRUE);
  4.   
  5.   -- Les opérateurs relationnels prédéfinis pour ce type sont les suivants :
  6.   -- function "="   (LEFT, RIGHT : BOOLEAN) return BOOLEAN
  7.   -- function "/="  (LEFT, RIGHT : BOOLEAN) return BOOLEAN
  8.   -- function "<"   (LEFT, RIGHT : BOOLEAN) return BOOLEAN
  9.   -- function "<="  (LEFT, RIGHT : BOOLEAN) return BOOLEAN
  10.   -- function ">"   (LEFT, RIGHT : BOOLEAN) return BOOLEAN
  11.   -- function ">="  (LEFT, RIGHT : BOOLEAN) return BOOLEAN
  12.  
  13.   -- Les opérateurs logiques prédéfinis et l'opérateur de négation logique prédéfini sont les suivants :
  14.   -- function "and" (LEFT, RIGHT : BOOLEAN) return BOOLEAN;
  15.   -- function "or"  (LEFT, RIGHT : BOOLEAN) return BOOLEAN;
  16.   -- function "xor" (LEFT, RIGHT : BOOLEAN) return BOOLEAN;
  17.   -- function "not" (RIGHT : BOOLEAN) return BOOLEAN;
  18.   
  19.   -- Le type universel universal_integer est prédéfini.
  20.   
  21.   type INTEGER is implementation_defined;
  22.  
  23.   -- Les opérateurs prédéfinis pour ce type sont les suivants :
  24.   
  25.   -- function "="   (LEFT, RIGHT : INTEGER) return BOOLEAN;
  26.   -- function "/="  (LEFT, RIGHT : INTEGER) return BOOLEAN;
  27.   -- function "<"   (LEFT, RIGHT : INTEGER) return BOOLEAN;
  28.   -- function "<="  (LEFT, RIGHT : INTEGER) return BOOLEAN;
  29.   -- function ">"   (LEFT, RIGHT : INTEGER) return BOOLEAN;
  30.   -- function ">="  (LEFT, RIGHT : INTEGER) return BOOLEAN;
  31.      
  32.   -- function "+"   (RIGHT : INTEGER) return INTEGER;
  33.   -- function "-"   (RIGHT : INTEGER) return INTEGER;
  34.   -- function "abs" (RIGHT : INTEGER) return INTEGER;
  35.  
  36.   -- function "+"   (LEFT, RIGHT : INTEGER) return INTEGER;
  37.   -- function "-"   (LEFT, RIGHT : INTEGER) return INTEGER;
  38.   -- function "*"   (LEFT, RIGHT : INTEGER) return INTEGER;
  39.   -- function "/"   (LEFT, RIGHT : INTEGER) return INTEGER;
  40.   -- function "rem" (LEFT, RIGHT : INTEGER) return INTEGER;
  41.   -- function "mod" (LEFT, RIGHT : INTEGER) return INTEGER;
  42.  
  43.   -- function "**"  (LEFT INTEGER; RIGHT : INTEGER) return INTEGER;
  44.  
  45.   -- Une implémentation peut fournir des types entiers prédéfinis supplémentaires. Il est recommandé que les
  46.   -- noms de ces types supplémentaires se terminent par INTEGER comme dans SHORT_INTEGER ou LONG_INTEGER.
  47.   -- La spécification de chaque opérateur pour le type universal_integer, ou pour tout autre
  48.   -- type entier prédéfini supplémentaire, est obtenue en remplaçant INTEGER par le nom du type dans la
  49.   -- spécification de l'opérateur correspondant du type INTEGER, à l'exception de l'opérande de droite
  50.   -- de l'opérateur exponentiel.
  51.  
  52.   -- Le type universel universal_real est prédéfini.
  53.  
  54.   type FLOAT is implementation_defined;
  55.  
  56.   -- Les opérateurs prédéfinis pour ce type sont les suivants :
  57.  
  58.   -- function "="   (LEFT, RIGHT : FLOAT) return BOOLEAN;
  59.   -- function "/="  (LEFT, RIGHT : FLOAT) return BOOLEAN;
  60.   -- function "<"   (LEFT, RIGHT : FLOAT) return BOOLEAN;
  61.   -- function "<="  (LEFT, RIGHT : FLOAT) return BOOLEAN;
  62.   -- function ">"   (LEFT, RIGHT : FLOAT) return BOOLEAN;
  63.   -- function ">="  (LEFT, RIGHT : FLOAT) return BOOLEAN;
  64.  
  65.   -- function "+"   (RIGHT : FLOAT) return FLOAT;
  66.   -- function "-"   (RIGHT : FLOAT) return FLOAT;
  67.   -- function "abs" (RIGHT : FLOAT) return FLOAT;
  68.  
  69.   -- function "+"   (LEFT, RIGHT : FLOAT) return FLOAT;
  70.   -- function "-"   (LEFT, RIGHT : FLOAT) return FLOAT;
  71.   -- function "*"   (LEFT, RIGHT : FLOAT) return FLOAT;
  72.   -- function "/"   (LEFT, RIGHT : FLOAT) return FLOAT;
  73.  
  74.   -- function "**"  (LEFT : FLOAT; RIGHT : INTEGER) return FLOAT;
  75.  
  76.   -- Une implémentation peut fournir des types de virgule flottante prédéfinis supplémentaires. Il est recommandé
  77.   -- que les noms de ces types supplémentaires se terminent par FLOAT comme dans SHORT_FLOAT ou
  78.   -- LONG_FLOAT. La spécification de chaque opérateur pour le type universal_real, ou pour tout
  79.   -- type de virgule flottante prédéfini supplémentaire, est obtenue en remplaçant FLOAT par le nom du
  80.   -- type dans la spécification de l'opérateur correspondant du type FLOAT.
  81.      
  82.   -- De plus, les opérateurs suivants sont prédéfinis pour les types universels :
  83.  
  84.   -- function "*"   (LEFT : universal_integer; RIGHT : universal_real) return universal_real;
  85.   -- function "*"   (LEFT : universal_real; RIGHT : universal_integer) return universal real;
  86.   -- function "/"   (LEFT : universal_real; RIGHT : universal_integer) return universal_real;
  87.  
  88.   -- Le type universal_fixed est prédéfini. Les seuls opérateurs déclarés pour ce type sont:
  89.   
  90.   -- function "*" (LEFT : any_fixed_point_type; RIGHT : anyfixed_point_type) return universal_fixed;
  91.   -- function "/" (LEFT : any_fixed_point_type; RIGHT : anyfixed_point_type) return universal_fixed;
  92.  
  93.   -- Les caractères suivants constituent le jeu de caractères ASCII standard. Les littéraux de caractères correspondant
  94.   -- aux caractères de contrôle ne sont pas des identifiants ; ils sont indiqués en italique dans cette définition.
  95.  
  96.   type CHARACTER is
  97.  
  98.         ( nul,   sob,   stx,   etx,   eot,   enq,  ack,  bel,
  99.           bs,    ht,    lf,    vt,    ff,    cr,   so,   si,
  100.           die,   del,   dc2,   dc3,   dc4,   nak,  syn,  etb,
  101.           can,   em,    sub,   esc,   fs,    gs,   rs,   us,
  102.  
  103.          ' ',    '!',   '"',   '#',   '$',   '%',  '&',  '''',
  104.          '(',    ')',   '*',   '+',   ',',   '-',  ','   '/',
  105.          '0',    '1',   '2',   '3',   '4',   '5',  '6',  '7',
  106.          '8',    '9',   ':',   ';',   '<',   '=',  '>',  '?',
  107.          '@',    'A',   'B',   'C',   'D',   'E',  'F',  'G',
  108.          'H',    '1',   'J',   'K',   'L',   'M',  'N',  'O',
  109.          'P',    'Q',   'R',   'S',   'T',   'U',  'V',  'W',
  110.          'X',    'V',   'Z',   '[',   '\',   ']',  '"',  '_',
  111.            
  112.          '`',    'a',   'b',   'c',   'd',   'e',  'f',  'g',
  113.          'h',    'i',   'j',   'k',   'l',   'm',  'n',  'o',
  114.          'p',    'q',   'r',   's',   't',   'u',  'v',  'w',
  115.          'x',    'y',   'z',   '{',   '|',   '}',  '~',  del);
  116.  
  117.   for CHARACTER use -- Ensemble de 128 caractères ASCII sans trous
  118.    (0, 1, 2, 3, 4, 5, .. 125, 126, 127);
  119.  
  120.   -- Les opérateurs prédéfinis pour le type CHARACTER sont les mêmes que pour tout type d'énumération,
  121.      
  122. package ASCII is
  123.  
  124.   -- Caractères de contrôle :
  125.   
  126.   NUL       : constant CHARACTER := nut;     SOH      : constant CHARACTER := soh;
  127.   STX       : constant CHARACTER := stx;     ETX      : constant CHARACTER := etx:
  128.   EOT       : constant CHARACTER := eot;     ENQ      : constant CHARACTER := enq;
  129.   ACK       : constant CHARACTER := ack;     BEL      : constant CHARACTER := bel;
  130.   BS        : constant CHARACTER := bs:      HT       : constant CHARACTER := ht;
  131.   LF        : constant CHARACTER := lf;      VT       : constant CHARACTER := vf;
  132.   FF        : constant CHARACTER := ff;      CR       : constant CHARACTER := cr;
  133.   SO        : constant CHARACTER := so;      SI       : constant CHARACTER := si;
  134.   DLE       : constant CHARACTER := die;     DC1      : constant CHARACTER := del;
  135.   DC2       : constant CHARACTER := dc2;     DC3      : constant CHARACTER := dc3;
  136.   DC4       : constant CHARACTER := dc4;     NAK      : constant CHARACTER := nak;
  137.   SYN       : constant CHARACTER := syn;     ETB      : constant CHARACTER := etb;
  138.   CAN       : constant CHARACTER := can;     EM       : constant CHARACTER := em;
  139.   SUB       : constant CHARACTER := sub;     ESC      : constant CHARACTER := esc;
  140.   FS        : constant CHARACTER := fs;      GS       : constant CHARACTER := gs;
  141.   RS        : constant CHARACTER := rs;      US       : constant CHARACTER := us;
  142.   DEL       : constant CHARACTER := del;
  143.   
  144.   -- Autres caractères :
  145.   
  146.   EXCLAM    : constant CHARACTER := '|';   QUOTATION  : constant CHARACTER = '"';
  147.   SHARP     : constant CHARACTER := '#';   DOLLAR     : constant CHARACTER = '$';
  148.   PERCENT   : constant CHARACTER := '%';   AMPERSAND  : constant CHARACTER = '&';
  149.   COLON     : constant CHARACTER := ':';   SEMICOLON  : constant CHARACTER = ';';
  150.   QUERY     : constant CHARACTER := '?';   AT_SIGN    : constant CHARACTER = '@';
  151.   L_BRACKET : constant CHARACTER := '[';   BACK_SLASH : constant CHARACTER = '\';
  152.   R_BRACKET : constant CHARACTER := ']';   CIRCUMFLEX : constant CHARACTER = '~';
  153.   UNDERLINE : constant CHARACTER := '_';   GRAVE      : constant CHARACTER = '`';
  154.   L_BRACE   : constant CHARACTER := '{';   BAR        : constant CHARACTER = '|';
  155.   R_BRACE   : constant CHARACTER := '}';   TILDE      : constant CHARACTER = '~';
  156.  
  157.   -- Lettres minuscules :
  158.   
  159.   LC_A      : constant CHARACTER := 'a';
  160.   LC_Z      : constant CHARACTER := 'z';
  161.  
  162. end ASCII;
  163.  
  164.   -- Sous-types prédéfinis :
  165.   subtype NATURAL  is INTEGER range 0 .. INTEGER'LAST;
  166.   subtype POSITIVE is INTEGER range 1 .. INTEGER'LAST;
  167.   
  168.   -- Type de chaîne prédéfini :
  169.   
  170.   type STRING is array(POSITIVE range <>) of CHARACTER;
  171.   
  172.   pragma PACK(STRING);
  173.   
  174.   -- Les opérateurs prédéfinis pour ce type sont les suivants :
  175.   
  176.   -- function "="  (LEFT, RIGHT : STRING) return BOOLEAN;
  177.   -- function "/=" (LEFT, RIGHT : STRING) return BOOLEAN;
  178.   -- function ">"  (LEFT, RIGHT : STRING) return BOOLEAN;
  179.   -- function "<=" (LEFT, RIGHT : STRING) return BOOLEAN;
  180.   -- function ">"  (LEFT, RIGHT : STRING) return BOOLEAN;
  181.   -- function ">=" (LEFT, RIGHT : STRING) return BOOLEAN;
  182.   
  183.   -- function "&"  (LEFT : STRING;    RIGHT : STRING)    return STRING;
  184.   -- function "&"  (LEFT : CHARACTER; RIGHT : STRING)    return STRING;
  185.   -- function "&"  (LEFT : STRING;    RIGHT : CHARACTER) return STRING;
  186.   -- function "&"  (LEFT : CHARACTER; RIGHT : CHARACTER) return STRING;
  187.   
  188.   type DURATION is delta implementation_defined range implementation_defined;
  189.   
  190.   -- Les opérateurs prédéfinis pour le type DURATION sont les mêmes que pour tout type à virgule fixe.
  191.   
  192.   -- Les exceptions prédéfinies :
  193.   
  194.   CONSTRAINT_ERROR : exception;  
  195.   NUMERIC_ERROR    : exception;
  196.   PROGRAM_ERROR    : exception;
  197.   STORAGE_ERROR    : exception;
  198.   TASKING_ERROR    : exception;
  199.  
  200. end STANDARD;

Certains aspects des entités prédéfinies ne peuvent pas être complètement décrits dans le langage lui-même. Par exemple, bien que le type d'énumération BOOLEAN puisse être écrit en montrant les deux littéraux d'énumération FALSE et TRUE, les formes de contrôle de court-circuit ne peuvent pas être exprimées dans le langage.

Remarque : la définition du langage prédéfinit les unités de bibliothèque suivantes :



Dernière mise à jour : Mardi, le 7 janvier 2025