* @return le noeud correspondant (avec son erreur éventuelle)
*/
public static Noeud parseNomDeVariable(String nom) {
String erreurId = "<html>Un nom de variables est composé d'une lettre (ou _) suivie de caractères ou lettres!</html>";
ArrayList<Noeud> liste = new ArrayList<>();
Noeud erreur = new Noeud(Sym.ERROR, "");
try {
Lexer lex = new Lexer(new java.io.StringReader(nom), liste);
lex.yylex();
} catch (Exception e) {
System.err.println("Erreur interne du lexer! : " + e.getMessage());
erreur.setTexteErreur("Erreur interne du lexer! Ne devrait pas survenir! : " + e.getMessage());
return erreur;
}
// il doit y avoir au moins un noeud
if (liste.isEmpty()) {
return null;
}
// il ne doit pas y avoir plus qu'un noeud
if (liste.size() > 1) {
liste.get(1).setType(Sym.ERROR);
liste.get(1).setTexteErreur(erreurId);
return liste.get(1);
}
// Maintenant il y a le bon compte de noeuds
// vérifions que c'est bien un id
if (liste.get(0).getType() != Sym.ID) {
erreur.setTexteErreur(erreurId);
return erreur;
}
return liste.get(0);
}