当前位置: 首页>>代码示例>>C++>>正文


C++ Memory::addVariable方法代码示例

本文整理汇总了C++中Memory::addVariable方法的典型用法代码示例。如果您正苦于以下问题:C++ Memory::addVariable方法的具体用法?C++ Memory::addVariable怎么用?C++ Memory::addVariable使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Memory的用法示例。


在下文中一共展示了Memory::addVariable方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: execute

/**
 * Analyse sémantique
 * Pseudo algorithme :
 * Avec `programme`, faire l'analyse sémantique !
 *      -> Faire toutes les déclarations (utiliser les méthodes déjà codées)
 *      -> Faire toutes les instructions :
 *              ** read : s'assurer que la variable a bien été déclarée
 *              ** write : s'assurer que l'expression a bien été déclarée (& instanciée dans le cas d'une variable)
 *              ** opération = : s'assurer que le membre de gauche est bien une variable DECLAREE / s'assurer que tous les membres de droites sont soit des constantes, soit des variables déclarées et instanciées !!
 */
bool Semantique::execute(Memory& mem)
{
    #ifdef DEBUG
        cout << "------------------------------" << endl;

        cout << "\t###\tDébut de l'analyse sémantique (option -a)\t###" << endl;
    #endif

    vector<Declaration*> liste_declaration = mem.getDeclarations();
    vector<Instruction*> liste_instruction = mem.getInstructions();

    #ifdef DEBUG
        cout << "Parcours des déclarations (" << liste_declaration.size() << ") !" << endl;
    #endif


    // on parcourt toutes les déclarations
    for (auto const& it : liste_declaration)
    {
        DeclarationVar* declaVar = dynamic_cast<DeclarationVar*> (it);
        DeclarationConst* declaConst = dynamic_cast<DeclarationConst*> (it);

        if (declaVar != NULL)
        {
            // c'est une déclaration de variable(s)
            vector<Identificateur*> idents = declaVar->getIdents();

            for (auto const& itvar : idents)
            {
                string ident = *itvar;
                bool ok = mem.addVariable(itvar);
                if (!ok)
                {   
                    #ifdef DEBUG
                        cout << "# La variable " << ident << " a déjà été déclarée." << endl;
                    #endif
                    return false;
                }
            }

        }
        else if (declaConst != NULL)
        {
            // c'est une déclaration de constante(s)
            vector<constante> consts = declaConst->getConstantes();

            for (auto const& itconst : consts)
            {
                string ident = *(itconst.ident);
                int value = *(itconst.value);
                bool ok = mem.addConstante(ident, value);
                if (!ok)
                {
                    #ifdef DEBUG
                        cout << "# La constante " << ident << " (value=" << value << ") a déjà été déclarée." << endl;
                    #endif
                    return false;
                }
            }
        }
        else
        {
            // ???
        }
    }

    #ifdef DEBUG
        mem.displayMemory();

        cout << "------------------------------" << endl;

        cout << "Parcours des instructions (" << liste_instruction.size() << ") !" << endl;
    #endif

    // 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();
            
//.........这里部分代码省略.........
开发者ID:Salma-El-Alaoui,项目名称:GL,代码行数:101,代码来源:semantique.cpp


注:本文中的Memory::addVariable方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。