Grammaires locales étendues mise en œuvre
Dans ce chapitre nous présentons la mise en œuvre du formalisme des grammaires locales étendues qui a été introduit au chapitre chapitre 4. Leur développement s’inscrit dans le cadre du moteur linguistique Unitex, qui comme a été évoqué au chapitre 3 est un outil open source pour le traitement de corpus textuels à l’aide de grammaires locales. Dorénavant, nous utilisons le terme manuel pour faire référence au « Manuel d’utilisation d’Unitex » (Paumier, 2016).
Rappelons qu’une des particularités qui différencie une grammaire locale étendue d’une grammaire locale classique est la capacité d’associer des fonctions arbitraires aux transitions. Considérer des fonctions arbitraires suppose d’une part qu’il n’existe pas de contrainte spécifique au moment où on associe une fonction à une transition, d’autre part, cela implique que les fonctions sont liées à la grammaire mais ne sont pas implémentées dans celle-ci. Par exemple, si reverse est le nom d’une fonction placée sur une des transitions d’une grammaire, il n’en existe aucune définition dans la grammaire relative à cette fonction, mise à part la syntaxe d’appel. Une telle caractéristique fournie, du point de vue des traitements, une grande souplesse, mais impose à la fois une réflexion sur la façon de mettre en œuvre les fonctions d’une grammaire locale étendue.
Anatomie de l’appel à une fonction étendue
Le symbole dollar ($) comme préfixe et suffixe sert à délimiter la partie de la sortie étendue qui doit être évaluée, autrement dit, les séquences en dehors de l’appel à la fonction étendue sont interprétées séparément soit comme des symboles terminaux (des chaînes de caractères littérales), soit comme des appels à d’autres fonctions. S’il s’agit des symboles de l’alphabet de sortie et si la sortie est satisfaite, alors ces symboles seront concaténés à la valeur retournée par la fonction. Dans le cas où une sortie étendue comporte plus d’une fonction, l’évaluation est effectuée de la fonction la plus à gauche vers celle la plus à droite. Dans tous les cas, l’évaluation est effectuée seulement si la fonction qui la précède est aussi satisfaite.
Le nom d’une fonction est précédé par le symbole arobase (@). Nous avons choisi cette convention puisque l’arobase est communément associé à la préposition « à » (« at », en anglais). En effet, cela sert à évoquer le fait que la définition de la fonction, c’est-à-dire, le code source contenant les instructions à exécuter se trouve dans un fichier externe (que nous appelons extension) du même nom et se terminant par .uppLe nom d’une fonction est valide s’il est composé uniquement de caractères apparte- nant à la classe [a-zA-Z0-9_], soit des lettres latines minuscules ou majuscule, des chiffres et des tirets bas. Cette restriction suit celle déjà utilisée dans Unitex pour créer des noms de variables (d’entrée ou de sortie, manuel, p. 105) et permet ainsi de garantir une cohérence vis-à-vis de la création des identifiants associés aux grammaires.
Nuls et booléens
Pour passer un argument de valeur nulle il est nécessaire d’utiliser le mot-clé nil. Un argument de valeur nulle peut être compris comme un argument dépourvu de valeur. Pour la valeur booléenne vraie, le mot-clé est true et pour la valeur fausse le mot-clé est false. Nous avons adopté cette convention en accord avec les mot-clés nil | false | true qui peuvent être utilisés avec une connotation similaire dans la définition des fonctions. Par ailleurs, il est utile de remarquer que ces trois mot-clés doivent toujours être écrits en respectant la casse.
Pour construire un argument contenant une chaîne littérale de caractères, telle que « chaîne » ou « autre chaîne », il est juste requis d’écrire la suite de caractères, sans aucun autre symbole particulier l’entourant. Autrement dit, une chaîne littérale estuniquement délimitée par les virgules ou par les parenthèses qui séparent les arguments. Afin d’utiliser les caractères qui ont un sens spécial dans la syntaxe d’appel dans une fonction étendue, tels que le symbole dollar ($) ou « et » commercial (&), l’implémentation courante permet de les déspécialiser (mode d’« échappement »). Ainsi, pour utiliser ces symboles dans une chaîne littérale, il suffit de les redoubler : $$ → $, && → &. En outre, dans une liste d’arguments non-vide, une chaîne littérale est vide si elle ne contient pas de caractères et dans ce cas elle prend la valeur nulle. Finalement, les chaînes littérales peuvent se concaténer aux variables que nous décrivons ensuite. Il est aussi utile de remarquer que la longueur maximale d’un argument du type chaîne littérale est de 4095 caractères.