Grammaires et algèbre

jeudi 15 juillet 2010
par  Alain BUSSER

Il y a

  • Les papous papas à poux papas ;
  • Les papous papas à poux pas papas ;
  • Les papous pas papas à poux papas ;
  • Les papous pas papas à poux pas papas ;
  • Les papoux papas pas à poux ;
  • Les papous pas papas pas à poux ;

et c’est tout !


RegExp

Le travail des ribosomes commence par la recherche d’une sous-chaîne de caractères, ce qui peut se faire avec l’objet "String" en écrivant quelque chose comme ceci :

var s="Les poules couvent au couvent.";//la chaîne où on cherche un mot
for(i=0;i<=s.length;i++){
	if(s.substring(i,i+7)=="couvent"){
		Println(i);
	}
}

L’objet RegExp permet d’automatiser cette recherche, avec

var e=new RegExp(/couvent/);//le mot qu'on cherche
var s="Les poules couvent au couvent.";//la phrase où on cherche un mot
Println(s.match(e));

La réponse "couvent" signifie qu’une seule des deux occurences a été trouvée. Pour les trouver toutes, il faut donner à la RegExp l’attribut "global" qui cherche toutes les occurences :

var e=new RegExp(/couvent/g);//la regexp est globale, la recherche aussi
var s="Les poules couvent au couvent.";//la phrase où on cherche un mot
Println(s.match(e));

La réponse est en fait un tableau, dont la longueur donne le nombre d’occurences du mot "couvent" dans la phrase :

var e=new RegExp(/couvent/g);//la regexp est globale, la recherche aussi
var s="Les poules couvent au couvent.";//la phrase où on cherche un mot
Println(s.match(e).length);

Mais le plus intéressant avec les RegExp, c’est la possibilité de remplacer des sous-chaînes, une fois trouvées, par d’autres, pas nécessairement de la même longueur. Ceci se fait par la méthode "replace". Par exemple pour mettre la phrase précédente au passé :

var e=new RegExp(/couvent/g);//la regexp est globale, la recherche aussi
var s="Les poules couvent au couvent.";//la phrase où on remplace un mot
Println(s.replace(e,"couvaient"));

La phrase obtenue est intéressante... Pour corriger l’erreur, il faut renoncer au remplacement global, et seulement mettre le premier "couvent" au passé :

var e=new RegExp(/couvent/);//la regexp n'est plus globale
var s="Les poules couvent au couvent.";//la phrase où on remplace un mot
Println(s.replace(e,"couvaient"));

Voilà, enfin les religieuses peuvent nourrir des poussins puisque les poules ont fini de couver !

Remarques

Seul l’aspect syntaxique de la théorie des langages a été abordé ici, la sémantique compliquant énormément les problèmes :

  1. L’exemple choisi pour illustrer les RegExp dans JavaScript montre que le même mot "couvent" peut avoir des sens bien différents selon le contexte (verbe au centre de la phrase, substantif à la fin de celle-ci). Il est connu que l’analyse syntaxique d’une phrase de langage parlé est indissociable de la sémantique, et de surcroît fortement dépendante du contexte. Dans le prochain article, on n’étudiera que les langages indépendants du contexte.
  2. Dans l’onglet sur les suites, l’usage des lettres "G" (comme "gauche") et "D" (comme "droite") n’était évidemment pas tout-à-fait innocent, et les langages définis dans cet onglet ont été créés avec l’idée d’une interprétation en tête.
  3. La numération est un langage plutôt simple, et évidemment il a une signification, en l’occurence basée sur la position. Les difficultés rencontrées par les enfants lorsqu’ils apprennent la numération peuvent donc in fine être considérées comme sémantiques.
  4. Le groupe décrit dans l’onglet "algèbre" par générateurs et relations est un groupe fondamental, auquel Poincaré avait trouvé une interprétation en terme de parcours de lacets.
  5. Si le décodage du génome est une activité essentiellement syntaxique, l’étude du repliement des protéines ressemble plus à de la sémantique, mais avec un niveau de complexité inimaginable...
  6. Enfin les langages de programmation réservent l’activité syntaxique à leur compilateur, l’aspect sémantique étant plutôt réservé à l’algorithmique ("que fait donc ce programme" ?)

Dans le prochain article, on se concentrera sur les langages les plus simples qui soient, et on leur cherchera des applications graphiques dans le troisième article, celui consacré aux grammaires L.


Commentaires