예제 #1
0
파일: Elem.cs 프로젝트: Erikhht/tuassembler
        public void CompararValor( EscritorC escritor, string variable )
        {
            //(!this.EsDeSalidaOEntradaSalida);
            string diferencia = "AUX" + variable;
            string varPrecision = "PR" + variable;
            string iterador = "IT" + variable;

            switch( Definicion.Tipo )
            {
                case Tipo.UInt8:
                case Tipo.UInt16:
                case Tipo.UInt32:
                case Tipo.UInt64:
                case Tipo.Int8:
                case Tipo.Int16:
                case Tipo.Int32:
                case Tipo.Int64:
                    escritor.If( variable + " != " + Valor );
                    escritor.PrintfValorDistintoConDiferencia( variable, Valor );
                    escritor.WriteLine( "cantErrores++;" );
                    escritor.FinIf();
                    break;
                case Tipo.Char:
                    escritor.If( variable + " != " + "'" + Valor + "'" );
                    escritor.PrintfValorDistintoChar( variable, Valor );
                    escritor.WriteLine( "cantErrores++;" );
                    escritor.FinIf();
                    break;
                case Tipo.Booleano:
                    escritor.If( "(" + variable + " == " + "0 && " + Valor + "!=0)||(" + variable + " != " +
                        "0 && " + Valor + "==0)" );
                    escritor.PrintfValorDistinto( variable, Valor );
                    escritor.WriteLine( "cantErrores++;" );
                    escritor.FinIf();
                    break;
                case Tipo.Float32:
                    // Realiza la resta entre ambos operandos y si la misma dio un resultado menor que
                    // 10^precision entonces los considera iguales
                    MA.EliminarAsteriscos( ref diferencia );
                    MA.EliminarCorchetes( ref diferencia );
                    MA.EliminarAsteriscos( ref varPrecision );
                    MA.EliminarCorchetes( ref varPrecision );

                    escritor.WriteLine( "float " + diferencia + " = (" + variable + ") - (" + Valor + ");" );
                    escritor.WriteLine( diferencia + " = (" + diferencia + " >= 0) ? " + diferencia + " : -" +
                        diferencia + ";" );
                    escritor.WriteLine( "float " + varPrecision + " = pow((float)10, -" + Definicion.Precision + ");" );
                    escritor.If( diferencia + " >= " + varPrecision );
                    escritor.PrintfValorDistintoFloatConDiferencia( variable, Valor, diferencia );
                    escritor.WriteLine( "cantErrores++;" );
                    escritor.FinIf();
                    break;
                case Tipo.Float64:
                    MA.EliminarAsteriscos( ref diferencia );
                    MA.EliminarCorchetes( ref diferencia );
                    MA.EliminarAsteriscos( ref varPrecision );
                    MA.EliminarCorchetes( ref varPrecision );

                    escritor.WriteLine( "float " + diferencia + " = (" + variable + ") - (" + Valor + ");" );
                    escritor.WriteLine( diferencia + " = (" + diferencia + " >= 0) ? " + diferencia + " : -" +
                        diferencia + ";" );
                    escritor.WriteLine( "double " + varPrecision + " = pow((double)10, -" + Definicion.Precision + ");" );
                    escritor.If( diferencia + " >= " + varPrecision );
                    escritor.PrintfValorDistintoFloatConDiferencia( variable, Valor, diferencia );
                    escritor.WriteLine( "cantErrores++;" );
                    escritor.FinIf();
                    break;
                case Tipo.CadenaC:
                    escritor.WriteLine( "char " + diferencia + "[] = \"" + Valor + "\";" );
                    escritor.WriteLine( "int " + iterador + ";" );
                    escritor.For( iterador + "=0", diferencia + "[" + iterador + "]!=0 && " +
                        variable + "[" + iterador + "]!=0", iterador + "++" );
                    escritor.If( variable + "[" + iterador + "] != " + diferencia + "[" +
                        iterador + "]" );
                    escritor.PrintfValorDeStringDistintos( variable, iterador, diferencia );
                    escritor.WriteLine( "cantErrores++;" );
                    escritor.FinIf();
                    escritor.FinFor();
                    break;
                case Tipo.CadenaPascal:
                    break;
            }
        }