Les lexèmes sont des unités lexicales ou syntaxiques (mots, phrases...).
Il faut pouvoir former avec les lexèmes un arbre de données.
Pour cela, la fonction globale Lexeme nous retourne un objet noeud pouvant réaliser cette tâche.
NB:
La création de ces noeuds et les opérations réalisées dessus prennent du temps.
Une structure adéquate nous permet de gagner du temps !
var oNode = Lexeme ( oLexeme )
Elle prend en argument l'objet oLexeme issu d'une analyse.
Pour l'analyse lexicale, il est de la forme :
oLexeme={
token:'INCREMENT_OPE', // nom du token (renommé si défini)
value:'++', // valeur du token, NB: la valeur d'un parent est égale à ''
css:'operator numeric', // classes css associées
rule:'JS', // Syntaxe qui à créé le lexème
// Position dans la source
index:12, // index du premier caractère
lineStart:2, // ligne du premier caractère
lineEnd:2, // ligne du dernier caractère
// Propriétés avancées
bParent:false, // Indique si il s'agit d'un lexème parent
bParentLimit:false, // Indique si il s'agit d'une limite d'un parent
bRescan:false // Indique si il s'agit d'un lexème parent issu d'un double scannage
}
Pour l'analyse syntaxique il est à définir...
Elle retourne un objet noeud pouvant former une structure arborescente.
A cet objet est ajouté l'attribut oValue, affecté avec la valeur oLexeme: oNode.oValue === oLexeme.
L'objet retourné est au choix :
var Lexeme =function( o ){
var m = document.createElement( o.token )
m.oValue = o
// Stylisation de l'élément
m.className = o.css
// Affichage en info bulle du lexème
m.title = JSON.stringify( o, null, '\n' )
// Contenu texte de l'élément
if( o.value ) m.innerHTML = o.value
return m
}