afficher >><< masquer ]
SAMPI - Editeur structuré
1. Le Problème et la Proposition
2. Le Langage Primitif de Représentation Textuelle
2.1. Présentation de la Syntaxe Concrète
2.2. Notations
2.3. Exemple de structuration des données
2.4. Exemple de structuration des traitements
2.5. Exemple de structurations connexes
3. Le Langage Complété pour la Structuration des Textes
3.1. Présentation de la Syntaxe Complétée
3.2. Etude quantitative de l'évolution des programmes
3.3. L'édition syntaxique
3.4. étude de cas : le langage LTR3 et l'atelier ENTREPRISE
4. L'Enrichissement du Langage par de Nouveaux Concepts
4.1. Présentation de la Syntaxe Abstraite
4.2. Les difficultés
4.3. Compléter la Syntaxe
5. La Formalisation des Solutions Techniques
5.1. L'évaluation fonctionnelle
5.2. La structuration par les objets
5.3. Modèle sémantique comparé de l'évaluateur
5.4. Comparaison critique
5.5. Construction de la Syntaxe Abstraite
6. Les Comparaisons avec d'autres Approches
7. Les Perspectives
8. Les Editeurs
8.0. brisé sur la barrière de la complexité (une fois de plus)
8.1. L'éditeur ligne : Manuel de l'utilisateur
8.2. L'éditeur page : Guide de l'utilisateur
9. Les Aspects d'Implantation
9.1. Contexte d'évaluation
9.2. La Syntaxe Abstraite : Manuel du concepteur
9.3. L'éditeur page : Guide de l'implanteur
Références
Rubrique Perl-Javascript
P1. Syntaxe de l'éditeur structuré
P2. Fonction wsText
P3. Fonction defText
P4. Fonctions useText - evalText
P5. Fonction refText
P6. Fonction attrText

Rubrique Perl-Javascript

Pour les inconditionnels, cette section présente les fonctions Perl et Javascript qui implémentent la syntaxe présentée.

1. Syntaxe de l'éditeur structuré

2. Fonction wsText

3. Fonction defText

4. Fonctions useText - evalText

5. Fonction refText

6. Fonction attrText

4. Fonctions useText - evalText

 useText  Retourner la valeur de représentation d'un « texte »
Syntaxe useText(nom,TIN)
Paramètres 
nom  type  Description 
nom  IN Nom du « texte »
TIN  IN Hash des textes déclarés
Perl : hash passé par référence – JavaScript : tableau à 1 élément
retourne  OUT La valeur de représentation du « texte »
Fonctions util.  Néant.


 evalText  Retourner la valeur évaluée
Syntaxe evalText(val,TIN)
Paramètres 
nom  type  Description 
val  IN Valeur à évaluer
TIN  IN Hash des textes déclarés
Perl : hash passé par référence – JavaScript : tableau à 1 élément
retourne  OUT Valeur évaluée
Fonctions util.  Néant.


Code Perl 

sub useText {local($nom,$TIN) = @_;
 if (!(defined $$TIN{$nom})) {return ''}
 local $x = &useText2($$TIN{$nom},$TIN);
 $x =~ s/\[#me!\]/$nom/g;
 $x =~ s/\[#(\w+)!\]/\[#$1\]/g;
 return $x;
}

sub evalText {local($val,$TIN) = @_;
 local $x = &useText2($val,$TIN);
 $x =~ s/\[#(\w+)!\]/\[#$1\]/g;
 return $x;
}

sub useText2 {local($x,$TIN) = @_;
 local($x0,$k,$y,$y1,$y2);
 $x0 = "";
 if (($k=index($x,"/#"))!=-1) {$x0 = substr($x,$k); $x = substr($x,0,$k)}
while($x=~/\[#(\w+)\]/) {
 $y1 = $1;
if (!(defined $$TIN{$y1})) {
 $y2 = "\[#".$y1."!\]";
} else {
 $y2 = &useText2($$TIN{$y1},$TIN);
 $x = &useTextINT($x,$y1,$y2);
}
 $x =~ s/\[#$y1\]/$y2/g;
}
while($x0=~/(\/#\w+=)/) {
 $y = $1; $k = index($x0,$y); $x0 = substr($x0,$k+length($y));
 if (($k=index($x0,"/#"))==-1) {$k = length($x0)}
 $y=~/\/#(\w+)=/;
 $y1 = $1; $y2 = substr($x0,0,$k); $x0 = substr($x0,$k);
 $y2 =~ s/^\s*//; $y2 =~ s/\s*$//;
 $x = &useTextINT($x,$y1,$y2);
 $y2 = &useText2($y2,$TIN);
 $x =~ s/\[#$y1!?\]/$y2/g;
}
 $x =~ s/^\s*//; $x =~ s/\s*$//;
 return $x;
}

sub useTextINT {local($x,$y1,$y2) = @_;
 local($x1,$x2,$x3);
if ($y2 eq "") {
 $x =~ s/\[\?$y1:([^\?]*)\?\]//g;
} else {
 $x =~ s/\[\?$y1:([^\?]*)\?\]/$1/g;
if ($y2=~/^(\w+)\?/) {
 $x1 = $1; $x2 = substr($y2,length($x1)+1); $x3 = "";
 if ($x2=~/:([^:]*)$/) {$x3 = $1; $x2 = substr($x2,0,length($x2)-length($x3)-1); }
 $x =~ s/\[#$y1=$x1\]/$x2/g;
 $x =~ s/\[#$y1=\w+\]/$x3/g;
}
}
 return $x;
}
Code JavaScript 

function useText(nom,TIN) {
 if (typeof(TIN[0][nom])=="undefined") {return ''}
 var x = useText2(TIN[0][nom],TIN);
 x = x.replace(/\[#me!\]/g,nom);
 x = x.replace(/\[#(\w+)!\]/g,"\[#$1\]");
 return x;
}

function evalText(val,TIN) {
 var x = useText2(val,TIN);
 x = x.replace(/\[#(\w+)!\]/g,"\[#$1\]");
 return x;
}

function useText2(x,TIN) {
 var x0,k,y,y1,y2;
 x0 = "";
 if ((k=x.indexOf("/#"))!=-1) {x0 = x.substr(k); x = x.substr(0,k)}
while(x.match(/\[#(\w+)\]/)) {
 y1 = RegExp.$1;
if (typeof(TIN[0][y1])=="undefined") {
 y2 = "\[#"+y1+"!\]";
} else {
 y2 = useText2(TIN[0][y1],TIN);
 x = useTextINT(x,y1,y2);
}
 x = x.replace(new RegExp("\\\[#"+y1+"\\\]","g"),y2);
}
while(x0.match(/(\/#\w+=)/)) {
 y = RegExp.$1; k = x0.indexOf(y); x0 = x0.substr(k+y.length);
 if ((k=x0.indexOf("/#"))==-1) {k = x0.length}
 y.match(/\/#(\w+)=/);
 y1 = RegExp.$1; y2 = x0.substr(0,k); x0 = x0.substr(k);
 y2 = y2.replace(/^\s*/,""); y2 = y2.replace(/\s*$/,"");
 x = useTextINT(x,y1,y2);
 y2 = useText2(y2,TIN);
 x = x.replace(new RegExp("\\\[#"+y1+"!?\\\]","g"),y2);
}
 x = x.replace(/^\s*/,""); x = x.replace(/\s*$/,"");
 return x;
}

function useTextINT(x,y1,y2) {
 var x1,x2,x3;
if (y2=="") {
 x = x.replace(new RegExp("\\\[\\\?"+y1+":([^\\\?]*)\\\?\\\]","g"),"");
} else {
 x = x.replace(new RegExp("\\\[\\\?"+y1+":([^\\\?]*)\\\?\\\]","g"),"$1");
if (y2.match(/^(\w+)\?/)) {
 x1 = RegExp.$1; x2 = y2.substr(x1.length+1); x3 = "";
 if (x2.match(/:([^:]*)$/)) {x3 = RegExp.$1; x2 = x2.substr(0,x2.length-x3.length-1); }
 x = x.replace(new RegExp("\\\[#"+y1+"="+x1+"\\\]","g"),x2);
 x = x.replace(new RegExp("\\\[#"+y1+"=\\w+\\\]","g"),x3);
}
}
 return x;
}