Ejemplo n.º 1
0
        public Semantica_DAL FILL(string Tipo, string Nombre, string valor, Semantica_DAL Anterior, Semantica_DAL Siguiente)
        {
            Semantica_DAL dTemp = new Semantica_DAL();

            dTemp.TIPO      = Tipo;
            dTemp.NOMBRE    = Nombre;
            dTemp.VALOR     = valor;
            dTemp.ANTERIOR  = Anterior;
            dTemp.SIGUIENTE = Siguiente;
            return(dTemp);
        }
Ejemplo n.º 2
0
 public Semantica_DAL PREVIOUS()
 {
     if (objTmp.ANTERIOR == null)
     {
         return(objTmp);
     }
     else
     {
         objTmp = objTmp.ANTERIOR;
         return(objTmp);
     }
 }
Ejemplo n.º 3
0
 public Semantica_DAL FOLLOWING()
 {
     if (objTmp.SIGUIENTE == null)
     {
         return(objTmp);
     }
     else
     {
         objTmp = objTmp.SIGUIENTE;
         return(objTmp);
     }
 }
Ejemplo n.º 4
0
 public void MODIFICAR(Semantica_DAL Oracion)
 {
     objTmp = objInitial;
     do
     {
         if (objTmp.NOMBRE.Equals(Oracion.NOMBRE))
         {
             objTmp.VALOR = Oracion.VALOR;
             break;
         }
         objTmp = objTmp.SIGUIENTE;
     } while (objTmp != objInitial);
 }
Ejemplo n.º 5
0
        public Semantica_DAL SEARCH_NOMBRE(Semantica_DAL Oracion)
        {
            objTmp = objInitial;
            Semantica_DAL dTemp = new Semantica_DAL();

            do
            {
                if (objTmp.NOMBRE.Equals(Oracion.NOMBRE))
                {
                    dTemp = objTmp;
                }
                objTmp = objTmp.SIGUIENTE;
            } while (objTmp != objInitial);
            return(dTemp);
        }
Ejemplo n.º 6
0
 public void SAVE(string Tipo, string Nombre, string valor)
 {
     if (objInitial == null)
     {
         objInitial = FILL(Tipo, Nombre, valor, null, null);
         objQueue   = objInitial;
         objTmp     = objInitial;
     }
     else
     {
         objQueue.SIGUIENTE  = FILL(Tipo, Nombre, valor, objQueue, objInitial);
         objQueue            = objQueue.SIGUIENTE;
         objInitial.ANTERIOR = objQueue;
     }
 }
Ejemplo n.º 7
0
        ///////////////////////////////////////////////////////////////////////////////////////////

        #region Analisis_Semantico
        public void Obtener_Valores()
        {
            Semantica_DAL objTmp_dal = new Semantica_DAL();

            char[] delimitador = { '\udddd', '\xA' }; //   \udddd \xA
            string Frase       = Panel_Codigo.Text;

            string[] Texto = Frase.Split(delimitador);

            foreach (var Lineas in Texto)
            {
                if (PatronSemantico.Valida_Declaracion(Lineas))
                {
                    var valores = Lineas.Trim().Split(' ');
                    if (!(valores.Equals("<") || valores.Equals(";")))
                    {
                        objTmp_dal.TIPO   = valores[0];
                        objTmp_dal.NOMBRE = valores[1];
                        objTmp_dal.VALOR  = valores[3];
                        obj_Sema_bll.SAVE(objTmp_dal.TIPO, objTmp_dal.NOMBRE, objTmp_dal.VALOR);
                    }
                }
            }
        }
Ejemplo n.º 8
0
        ///////////////////////////////////////////////////////////////////////////////////////////

        #region Cogigo_Intermedio
        public void Codigo_intermedio()
        {
            //LoadData();
            try
            {
                Semantica_DAL objSemantica_dal  = new Semantica_DAL();
                Semantica_DAL objSeamntica2_dal = new Semantica_DAL();
                Nimbus_DAL    obj_Dal           = new Nimbus_DAL();
                Nimbus_DAL    obj_temp          = new Nimbus_DAL();

                char[]   delimitador1 = { '\udddd', '\xA' };
                char[]   delimitador = { ' ', '\n' }; //  \udddd \xA
                string   Frase = Panel_Codigo.Text;
                string[] Palabras = Frase.Split(delimitador1);
                string   mensaje = "dd", cabecera = "jj", pie = "df", fin = "tg";
                Boolean  b_Suma = false, b_Resta = false, b_Multi = false, b_Div = false;

                if (!Directory.Exists(@"C:\Nimbus\Cod_Intermedio"))
                {
                    Directory.CreateDirectory(@"C:\Nimbus\Cod_Intermedio");
                }
                StreamWriter Cod_Intermedio = File.AppendText(@"C:\Nimbus\Cod_Intermedio\Cod_Intermedio.asm");
                #region Cabecera
                cabecera = "include \'emu8086.inc\'\r\n"
                           + "org 100h \r\n"
                           + ".data \r\n\n"
                           + "define_print_string \r\n"
                           + "define_print_num \r\n"
                           + "define_print_num_uns \r\n"
                           + "sum db 3 dup (?) \r\n"
                           + "rest db 3 dup (?) \r\n"
                           + "mult db 3 dup (?) \r\n"
                           + "divi db 3 dup (?) \r\n\n"
                           + ".code \r\n";
                Cod_Intermedio.WriteLine(cabecera);
                #endregion
                foreach (var palabra in Palabras)
                {
                    //MessageBox.Show(palabra);
                    string[] valores = palabra.Trim().Split(' ');

                    if (PatronSemantico.Validad_Variables(palabra))
                    {
                        #region Seccion_Suma
                        if (palabra.Contains("sum"))
                        {
                            b_Suma = true;
                            int i = 0;
                            foreach (var valor in valores)
                            {
                                objSemantica_dal.NOMBRE = valor.Trim();
                                objSeamntica2_dal       = obj_Sema_bll.SEARCH_NOMBRE(objSemantica_dal);
                                if (!(objSeamntica2_dal.NOMBRE == null))
                                {
                                    mensaje = "mov sum[" + i + "]," + objSeamntica2_dal.VALOR;
                                    i++;
                                    //MessageBox.Show(mensaje);
                                    Cod_Intermedio.WriteLine(mensaje);
                                }
                            }
                        }
                        #endregion

                        #region Seccion_Resta
                        if (palabra.Contains("res"))
                        {
                            b_Resta = true;
                            int i = 0;
                            foreach (var valor in valores)
                            {
                                objSemantica_dal.NOMBRE = valor.Trim();
                                objSeamntica2_dal       = obj_Sema_bll.SEARCH_NOMBRE(objSemantica_dal);
                                if (!(objSeamntica2_dal.NOMBRE == null))
                                {
                                    mensaje = "mov rest[" + i + "]," + objSeamntica2_dal.VALOR;
                                    i++;
                                    //MessageBox.Show(mensaje);
                                    Cod_Intermedio.WriteLine(mensaje);
                                }
                            }
                        }
                        #endregion

                        #region Seccion_Multiplicacion
                        if (palabra.Contains("mult"))
                        {
                            b_Multi = true;
                            int i = 0;
                            foreach (var valor in valores)
                            {
                                objSemantica_dal.NOMBRE = valor.Trim();
                                objSeamntica2_dal       = obj_Sema_bll.SEARCH_NOMBRE(objSemantica_dal);
                                if (!(objSeamntica2_dal.NOMBRE == null))
                                {
                                    mensaje = "mov mult[" + i + "]," + objSeamntica2_dal.VALOR;
                                    i++;
                                    //MessageBox.Show(mensaje);
                                    Cod_Intermedio.WriteLine(mensaje);
                                }
                            }
                        }
                        #endregion

                        #region Seccion_Division
                        if (palabra.Contains("div"))
                        {
                            b_Div = true;
                            int i = 0;
                            foreach (var valor in valores)
                            {
                                objSemantica_dal.NOMBRE = valor.Trim();
                                objSeamntica2_dal       = obj_Sema_bll.SEARCH_NOMBRE(objSemantica_dal);
                                if (!(objSeamntica2_dal.NOMBRE == null))
                                {
                                    mensaje = "mov divi[" + i + "]," + objSeamntica2_dal.VALOR;
                                    i++;
                                    //MessageBox.Show(mensaje);
                                    Cod_Intermedio.WriteLine(mensaje);
                                }
                            }
                        }
                        #endregion
                    }
                }

                #region Pie
                if (b_Suma)
                {
                    pie = "\r\nSumas proc\r\n"
                          + "printn \" \"\r\n"
                          + "xor ax,ax \r\n"
                          + "add al, sum[1] \r\n"
                          + "add al, sum[2] \r\n"
                          + "mov sum[0],al \r\n"
                          + "print \"La suma es: \" \r\n"
                          + "call print_num \r\n"
                          + "Sumas endp \r\n";
                    Cod_Intermedio.WriteLine(pie);
                }
                if (b_Resta)
                {
                    pie = "\r\nRestas proc\r\n"
                          + "printn \" \"\r\n"
                          + "xor ax,ax \r\n"
                          + "add al, rest[1] \r\n"
                          + "sub al, rest[2] \r\n"
                          + "mov rest[0],al \r\n"
                          + "print \"La resta es: \" \r\n"
                          + "call print_num \r\n"
                          + "Restas endp \r\n";
                    Cod_Intermedio.WriteLine(pie);
                }

                if (b_Multi)
                {
                    pie = "\r\nMultiplicaciones proc\r\n"
                          + "printn \" \"\r\n"
                          + "xor ax,ax \r\n"
                          + "add al, mult[1] \r\n"
                          + "mul mult[2] \r\n"
                          + "mov mult[0],al \r\n"
                          + "print \"La multiplicacion es: \" \r\n"
                          + "call print_num \r\n"
                          + "Multiplicaciones endp \r\n";
                    Cod_Intermedio.WriteLine(pie);
                }

                if (b_Div)
                {
                    pie = "\r\nDivisiones proc\r\n"
                          + "printn \" \"\r\n"
                          + "xor ax,ax \r\n"
                          + "add al, divi[1] \r\n"
                          + "div divi[2] \r\n"
                          + "mov divi[0],al \r\n"
                          + "print \"La division es: \" \r\n"
                          + "call print_num \r\n"
                          + "Divisiones endp \r\n";
                    Cod_Intermedio.WriteLine(pie);
                }
                #endregion

                #region Fin
                fin = "\r\nexit:\r\n"
                      + "mov ah,0 \r\n"
                      + "int 16h \r\n\n"
                      + "ret \r\n"
                      + "end \r\n";
                Cod_Intermedio.WriteLine(fin);
                #endregion
                Cod_Intermedio.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error en: " + ex);
            }
        }
Ejemplo n.º 9
0
        public void Analizar_Valores()
        {
            //LoadData();
            Semantica_DAL objSemantica_dal  = new Semantica_DAL();
            Semantica_DAL objSeamntica2_dal = new Semantica_DAL();
            Nimbus_DAL    obj_Dal           = new Nimbus_DAL();
            Nimbus_DAL    obj_temp          = new Nimbus_DAL();

            char[] delimitador1 = { '\udddd', '\xA' };
            char[] delimitador  = { ' ', '\n' }; //  \udddd \xA
            string Frase        = Panel_Codigo.Text;

            string[] Palabras    = Frase.Split(delimitador1);
            string   auxsema     = "dd";
            string   auxnimbus   = "dd";
            bool     compatibleN = false;
            bool     compatibleC = false;

            foreach (var palabra in Palabras)
            {
                //MessageBox.Show(palabra);
                string[] valores = palabra.Trim().Split(' ');

                if (PatronSemantico.Validad_Variables(palabra))
                {
                    foreach (var valor in valores)
                    {
                        //MessageBox.Show(valor);
                        obj_Dal.SIMBOLO = valor.Trim();
                        auxnimbus       = valor.Trim();

                        obj_temp  = obj_Bll.SEARCH_TOKEN(obj_Dal);
                        auxnimbus = obj_temp.SIMBOLO;

                        if (!(obj_temp.TIPO_TOKEN.Equals("Signo_de_Puntuacion") || obj_temp.TIPO_TOKEN.Equals("Constante") ||
                              obj_temp.TIPO_TOKEN.Equals("Concatenacion") || obj_temp.TIPO_TOKEN.Equals("Asignacion") ||
                              obj_temp.TIPO_TOKEN.Equals("Encapsulamiento") || obj_temp.TIPO_TOKEN.Equals("Palabra_Reservada") ||
                              obj_temp.TIPO_TOKEN.Equals("Funcion_Imprimir") || obj_temp.TIPO_TOKEN.Equals("Funcion_Capturar") ||
                              obj_temp.TIPO_TOKEN.Equals("Operador_Matematico") || obj_temp.TIPO_TOKEN.Equals("Expresion_Booleana") ||
                              obj_temp.TIPO_TOKEN.Equals("Operador_Logico") || obj_temp.TIPO_TOKEN.Equals("Condicional") ||
                              obj_temp.TIPO_TOKEN.Equals("Ciclo") || obj_temp.TIPO_TOKEN.Equals("Declarador_de_Funcion") ||
                              obj_temp.TIPO_TOKEN.Equals("Retorno_Funcion") || obj_temp.TIPO_TOKEN.Equals("Declarador_de_Procedimiento") ||
                              obj_temp.TIPO_TOKEN.Equals("Delimitador_de_Sentencia") || obj_temp.TIPO_TOKEN.Equals("Digito_Entero") ||
                              obj_temp.TIPO_TOKEN.Equals("Digito_Flotante") || obj_temp.TIPO_TOKEN.Equals("Caracter")))
                        {
                            objSemantica_dal.NOMBRE = obj_temp.SIMBOLO;
                            objSeamntica2_dal       = obj_Sema_bll.SEARCH_NOMBRE(objSemantica_dal);
                            auxsema = objSeamntica2_dal.NOMBRE;

                            if (auxsema != auxnimbus)
                            {
                                //MessageBox.Show("Variable " + auxnimbus + " no definida");
                                string error = "Error Semantico - Definición: " + auxnimbus + " - Error variable no definida - Posición: " + (lineapalabra - 1);
                                dataGridView2.Rows.Add(error);
                            }
                            else
                            {
                                List <Semantica_DAL> lista = new List <Semantica_DAL>();
                                Semantica_DAL        objSemantica_dal_temp = new Semantica_DAL();
                                objSemantica_dal_temp.NOMBRE = auxsema;
                                objSemantica_dal_temp        = obj_Sema_bll.SEARCH_NOMBRE(objSemantica_dal_temp);
                                lista.Add(objSemantica_dal_temp);

                                foreach (var objeto in lista)
                                {
                                    if (objeto.TIPO.Equals("flo") || objeto.TIPO.Equals("en"))
                                    {
                                        compatibleN = true;
                                    }
                                    if (objeto.TIPO.Equals("ca"))
                                    {
                                        compatibleC = true;
                                    }
                                }
                            }
                            if (compatibleN == true && compatibleC == true)
                            {
                                string error = "Error Semantico - Error de tipos en variables - Posición: " + (lineapalabra - 1);
                                dataGridView2.Rows.Add(error);
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 10
0
 public void DELETE_LIST()
 {
     objInitial = null;
     objQueue   = null;
     objTmp     = null;
 }