Instruction* Analyseur::ToInstruction(QString s) const { if (EstOperateurBinaire(s)) { return ToOperateurBinaire(s); } if (EstOperateurUnaire(s)) { return ToOperateurUnaire(s); } if (EstOperateurPile(s)) { return ToOperateurPile(s); } if (EstConstante(s)) { return ToConstante(s); } throw Exception("Ce n'est pas une instruction !"); }
//Imprime le type d'une operation dans une chaine void SprintTypeOp(char buf[], Operation op) { if (EstOperateurBinaire(op)) strncpy(buf, "Binaire", MAX_EXPR-1); else if (EstOperateurUD(op)) strncpy(buf, "Unaire droite", MAX_EXPR-1); else if (EstOperateurUG(op)) strncpy(buf, "Unaire gauche", MAX_EXPR-1); else strncpy(buf, "Inconnu", MAX_EXPR-1); }
bool Analyseur::EstOperateur(QString s) const { if (EstOperateurBinaire(s) || EstOperateurUnaire(s) || EstOperateurPile(s)) { return true; } else { return false; } }
OperateurBinaire* Analyseur::ToOperateurBinaire(QString s) const { if (EstOperateurBinaire(s)) { return new OperateurBinaire(s); } else { throw Exception("Ce n'est pas une instruction !"); } }