Annexe E Prolog II+ et les caractères.. PrologIA HERITAGE II+
A!ociation
Prolog
HERITAGE
Annexe E
Prolog II+ et les caractères.
E.1. Présentation
E.2. Jeu ISO : avantages et inconvénients
E.3. Jeu hôte : avantages et inconvénients
E.4 Remarques
E.5 Conventions
E.1. Présentation
Il existe deux jeux de caractères utilisables en Prolog II+ :
• un jeu défini par le code ISO 8859-1.
• le jeu de la machine hôte.
La détermination du jeu choisi se fait au lancement d'une session Prolog et est valable jusqu'à la fin de la session (voir le manuel d'utilisation §2.3).
Avoir deux jeux de caractères implique avoir deux modes de codage interne de ces caractères :
• Un mode dans lequel quelque soit le système hôte, le codage interne est invariant, c'est celui du code ISO 8859-1.
• Un second mode dans lequel le codage interne utilisé est celui du système hôte.
Tant que l'on manipule des caractères, il n'y a pas de problème. Cependant si l'on manipule les codes des caractères, seul le jeu ISO assure d'avoir le même code pour toutes les machines. Par exemple en jeu ISO char_code("é",x) a la même valeur sur
Macintosh et sur PC, ce n'est pas le cas lorsque l'on choisit le jeu hôte.
Avoir deux modes de codage, c'est aussi avoir deux types de fichiers binaires:
• Des fichiers contenant des chaînes codées d'après le code ISO.
• Des fichiers contenant des chaînes codées avec les caractères du système hôte.
Lors de la sauvegarde, le codage choisi pour la session est mémorisé dans le fichier que l'on crée; un message d'avertissement s'affichera au moment du chargement si le codage mémorisé dans le fichier binaire n'est pas le même que celui choisi pour la session en cours.
©PrologIA
E - 2
Annexe E
D'autre part, en mode ISO, puisque Prolog manipule des données (caractères) qui peuvent ne pas exister sur la machine hôte, il faut leur associer une représentation 1 externe (suite de caractères) pour les visualiser. Il existe deux modes de représentation des caractères accentués n'appartenant pas au jeu hôte:
• Un mode dans lequel ils sont représentés par une séquence accent_escape (cf
R1.31) qui est très lisible.
• Un mode dans lequel ils sont représentés par une séquence octale.
Le choix de ce mode se fait au lancement de Prolog et est valable pour toute la session (voir le manuel d'utilisation §2.3).
Dans ce qui suit, nous ferons la distinction entre une représentation interne (binary string), qui est une valeur en mémoire, et la visualisation de cette donnée (print string), c'est à dire sa représentation sous forme de caractères sur un canal d'entrée ou de sortie.
A!ociation
Prolog
HERITAGE
E.2. Jeu ISO : avantages et inconvénients
Le choix du jeu ISO a l'avantage d'assurer la portabilité des modules (sources ou binaires) inter-machines. Il permet également de manipuler des caractères qui n'existent pas forcément sur la machine hôte (par exemple les machines UNIX qui utilisent le jeu ASCII 7 bits), notamment les caractères accentués.
L'inconvénient de ce choix, pour Prolog qui est un langage très ouvert et qui réalise beaucoup d'échanges ou de partage de données, est la différence de codage interne de certaines données (chaînes) entre Prolog et l'extérieur. Ce qui nécessiterait de faire une transformation à chaque communication avec l'extérieur. En fait, l'utilisateur n'en a pas forcément toujours besoin, cela dépend de l'opération qu'il veut réaliser sur ces données. Il peut les vouloir:
• en code ISO.
• en code hôte en tant que donnée (binary string).
• en code hôte en tant que représentation (print string).
En effet, des procédures qui manipulent les chaînes sans en connaître le sens, par exemple find_pattern qui compare ou substring qui décompose, sont indépendantes d'un code particulier et n'ont donc pas besoin de transformations. Par contre des procédures qui font appel au système hôte en auront besoin.
1
La visualisation est une représentation externe à Prolog et donc nécessairement codée par le système hôte; Prolog lui ne manipule que des données, donc des codes ISO. Ce sont les entrées sorties qui font la transformation entre la représentation graphique et le codage interne.
©PrologIA
A!ociation
Prolog
HERITAGE
Prolog et les caractères
E - 3
En définitive, il suffira de disposer de procédures de transformation des chaînes entre le codage ISO et le codage hôte, et de savoir quel type de codage est supposé dans les procédures de communication de Prolog.
E.3. Jeu hôte : avantages et inconvénients
Le choix du jeu de la machine hôte a l'avantage de simplifier le passage de la représentation des chaînes dans le langage hôte au codage des chaînes en Prolog
II+: il n'est pas nécessaire de transformer les données entre Prolog et l'extérieur.
L'inconvénient de ce choix tient à la pauvreté du jeu ASCII et à la non standardisation des caractères étendus sur l'ensemble des machines, ce qui rend les programmes non portables.
E.4. Remarques
•En utilisant le même codage que celui de la machine hôte, la donnée et sa représentation sont confondues, tandis qu'en utilisant le codage ISO il arrive que la donnée et sa représention soient différentes et que la représentation externe occupe plus d'octets en mémoire que la donnée.
•La première moitié de la table du code ISO est identique à la table du code ASCII
US. Si un programme Prolog ne contient pas de caractères étendus, il est inutile de faire des transformations entre ISO et hôte.
•Le fait de vouloir utiliser des caractères qui n'existent pas sur la machine hôte, impose d'une part à choisir le mode ISO, d'autre part, pour les communications, soit
à les transmettre en ISO, soit à les transmettre sous forme imprimable (print string).
•Le mode ISO sans accent_escape, comme le mode hôte, réduit le nombre de caractères qui peuvent créer une ambiguité d'interprétation s'ils sont précédés du caractère '\'. Ce mode peut donc éviter aux programmes qui utilisent beaucoup de '\', de masquer ce '\' (utile pour les programmes Edinburgh qui manipulent assez souvent des identificateurs ou graphic_symbol contenant des '\').
E.5. Conventions pour le mode ISO
Les données partagées entre Prolog et les langages externes, décrites dans les
EXTERNAL_DESCRIPTOR, doivent être codées en ISO.
La fonction PRO_BIND, qui permet de créer dynamiquement une zone de données partagées, référence des données qui doivent être codées en ISO; par contre son premier argument qui est le nom Prolog de la zone de données est une chaîne hôte.
©PrologIA
E - 4
Annexe E
Les échanges de chaînes par pipe - entre Prolog et des coprocessus - sont considérés comme des entrées sorties et doivent donc être des chaînes hôtes sous forme imprimable. Les fonctions concernées sont send_string et receive_string.
Pour les transferts de données entre Prolog et les langages externes ou vice versa, les conventions sont les suivantes:
get_string, put_string, get_term, put_term:
passent et reçoivent des chaînes ISO.
get_O_string, put_O_string:
ont les mêmes arguments et le même fonctionnement que respectivement
get_string et put_string mais passent et reçoivent des chaînes hôtes sous forme imprimable.
Et enfin voici quatre procédures de traduction de chaînes:
bin_str_iso_to_host(source,dest)
1
bin_str_host_to_iso(source,dest)
1 réalisent la conversion d'une chaîne ISO en une chaîne hôte et vice versa, en assimilant les chaînes à des données (binary string); c'est à dire la longueur est conservée, il peut y avoir des caractères non imprimables, et les caractères de la chaîne d'entrée qui n'existent pas dans le jeu de sortie sont remplacés par le '?'.
print_str_iso_to_host(source,dest)
1
print_str_host_to_iso(source,dest)
1 réalisent la conversion d'une chaîne ISO en une chaîne hôte et vice versa, où la chaîne hôte est la représentation (printable string) de la chaîne ISO; la longueur des deux chaînes n'est pas forcément la même, un caractère peut être représenté par une chaîne à quatre caractères.
A!ociation
Prolog
HERITAGE
1source est l'adresse d'une zone mémoire où se trouve la chaîne de référence terminée par le caractère nul. dest est l'adresse de la zone mémoire où Prolog va copier la chaîne résultat, à charge
à l'utilisateur de réserver la place nécessaire.
©PrologIA
A!ociation
Prolog
HERITAGE
Prolog et les caractères
E - 5
©PrologIA
A!ociation
Prolog
HERITAGE

Public link updated
The public link to your chat has been updated.