Ejemplo n.º 1
0
        public Param(string paramType, string varName, int count, SymbolTable _st, List <Actions> program)
        {
            this.paramType = paramType;
            this.varName   = varName;
            this.dirVar    = _st.getDir(varName);
            this.count     = count;

            program.Add(this);

            int dims = 1;

            if (_st.getDim1(varName) != 0)
            {
                if (_st.getDim2(varName) != 0)
                {
                    dims = _st.getDim1(varName) * _st.getDim2(varName);
                }
                else
                {
                    dims = _st.getDim1(varName);
                }
            }

            int tmpDirVar = dirVar + 1;

            while (dims > 1)
            {
                program.Add(new Param(paramType, tmpDirVar, count));
                dims--;
                tmpDirVar++;
            }
        }
Ejemplo n.º 2
0
        public void countVars(SymbolTable st)
        {
            foreach (string key in st.symbols.Keys)
            {
                // TYPES:   t_int = 1, t_float = 2, t_char = 3, t_void = 4 ,t_obj = 5, t_string = 6
                // KINDS:   var = 0, func = 1, temporal = 2, pointer = 3

                int dims = 1;

                if (st.getDim1(key) != 0)
                {
                    if (st.getDim2(key) != 0)
                    {
                        dims = st.getDim1(key) * st.getDim2(key);
                    }
                    else
                    {
                        dims = st.getDim1(key);
                    }
                }

                switch (st.getType(key))
                {
                // INT
                case 1:
                    switch (st.getKind(key))
                    {
                    // VAR
                    case 0:
                    // FUNC
                    case 1:
                        intCount += dims;
                        break;

                    // VAR TEMP
                    case 2:
                        intTempCount += dims;
                        break;

                    // POINTER
                    case 3:
                        pointerCount += dims;
                        break;
                    }
                    break;

                // FLOAT
                case 2:
                    switch (st.getKind(key))
                    {
                    // VAR
                    case 0:
                    // FUNC
                    case 1:
                        floatCount += dims;
                        break;

                    // VAR TEMP
                    case 2:
                        floatTempCount += dims;
                        break;

                    // POINTER
                    case 3:
                        pointerCount += dims;
                        break;
                    }
                    break;

                // CHAR
                case 3:
                    switch (st.getKind(key))
                    {
                    // VAR
                    case 0:
                    // FUNC
                    case 1:
                        charCount += dims;
                        break;

                    // VAR TEMP
                    case 2:
                        charTempCount += dims;
                        break;

                    // POINTER
                    case 3:
                        pointerCount += dims;
                        break;
                    }
                    break;

                // STRING
                case 6:
                    switch (st.getKind(key))
                    {
                    // VAR
                    case 0:
                    // FUNC
                    case 1:
                        stringCount += dims;
                        break;

                    // VAR TEMP
                    case 2:
                        stringTempCount += dims;
                        break;

                    // POINTER
                    case 3:
                        pointerCount += dims;
                        break;
                    }
                    break;
                }
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Sets to the class in the dirClasse the values of the symbolTable
        /// </summary>
        /// <param name="st">The symbol table of the class</param>
        public void setClassVars(SymbolTable st)
        {
            foreach (string key in st.symbols.Keys)
            {
                // TYPES:   t_int = 1, t_float = 2, t_char = 3, t_void = 4 ,t_obj = 5, t_string = 6
                // KINDS:   var = 0, func = 1
                // ACCESS:  public = 1, private = -1
                //              [type, kind, dir, dim1?0, dim2?0, access:[-1|1]]

                symbolsClass[key] = st.getSymbol(key);

                // Omit func allocation
                if (st.symbols[key][1] == 1)
                {
                    continue;
                }

                int dims = 1;

                if (st.getDim1(key) != 0)
                {
                    if (st.getDim2(key) != 0)
                    {
                        dims = st.getDim1(key) * st.getDim2(key);
                    }
                    else
                    {
                        dims = st.getDim1(key);
                    }
                }



                switch (st.getType(key))
                {
                // INT
                case 1:
                    intCount += dims;
                    break;

                // FLOAT
                case 2:
                    floatCount += dims;
                    break;

                // CHAR
                case 3:
                    charCount += dims;
                    break;

                // VOID
                case 4:
                    break;

                // STRING
                case 6:
                    stringCount += dims;
                    break;
                }
            }
        }