本文整理汇总了C++中Memory::areVariablesAllInstanciated方法的典型用法代码示例。如果您正苦于以下问题:C++ Memory::areVariablesAllInstanciated方法的具体用法?C++ Memory::areVariablesAllInstanciated怎么用?C++ Memory::areVariablesAllInstanciated使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Memory
的用法示例。
在下文中一共展示了Memory::areVariablesAllInstanciated方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: execute
//.........这里部分代码省略.........
// on parcourt toutes les instructions
for (auto const& it : liste_instruction)
{
Affectation* affectation = dynamic_cast<Affectation*> (it);
Lecture* lecture = dynamic_cast<Lecture*> (it);
Ecriture* ecriture = dynamic_cast<Ecriture*> (it);
// expression -> faire une fonction récursive (ou itérative, osef) pour récupérer tous les identificateurs d'une expression !
if (affectation != NULL)
{
// c'est une affectation
// get expression -> récupérer tous les identificateurs (get idents) de l'expression et checker s'ils existent (déclarées) et si pour les variables ils ont bien été instanciés
Expression* expr = affectation->getExpression();
if (!this->checkExpression(mem, expr))
{
return false;
}
// get identificateur -> checker que c'est bien une variable et qu'elle a été déclarée
Identificateur* id = affectation->getIdentificateur();
string name = (string)(*id);
if (!mem.isVariableDeclared(name))
{
#ifdef DEBUG
cout << "# La partie gauche `" << name << "` au sein de l'instruction `" << *affectation << "` n'a pas été déclarée comme variable." << endl;
#endif
cerr << "l'identificateur " << name << " n'a pas ete declaree (comme variable)." << endl;
return false;
}
// on n'attribue pas la valeur à l'expression, par contre on check le bool comme quoi elle a été affectée
mem.semanticInstanciation(name);
}
else if (lecture != NULL)
{
// c'est une lecture
// get identificateur -> checker que c'est bien une variable et qu'elle a été déclarée
Identificateur* id = lecture->getIdentificateur();
string name = (string)(*id);
// #ifdef DEBUG
// cout << "L'identificateur associé à la lecture est : " << *id << endl;
// #endif
if (!mem.isVariableDeclared(name))
{
#ifdef DEBUG
cout << "# Le paramètre `" << name << "` au sein de l'instruction `" << *lecture << "` n'a pas été déclaré comme variable." << endl;
#endif
cerr << "la variable " << name << " n'a pas ete declaree." << endl;
return false;
}
// la variable a été utilisée et instanciée avec la lecture, on le sauvegarde
mem.semanticInstanciation(name);
mem.setUsed(name);
}
else if (ecriture != NULL)
{
// c'est une écriture
// get expression -> récupérer tous les identificateurs de l'expression et checker s'ils existent et si pour les variables ils ont bien été instanciés
Expression* expr = ecriture->getExpression();
if (!this->checkExpression(mem, expr))
{
return false;
}
}
else
{
// ???
}
}
// checker que toutes les variables sont bien utilisées
if (!mem.areVariablesAllInstanciated())
{
#ifdef DEBUG
cout << "# Certaines variables déclarées n'ont pas été instanciées." << endl;
#endif
}
if (!mem.areIdentificateursAllUsed())
{
#ifdef DEBUG
cout << "# Certaines variables déclarées sont inutilisées." << endl;
#endif
}
return true;
}