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++; } }
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; } } }
/// <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; } } }