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 }