/////////////////////////////////////////////////////////////////////////////////////////// #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); } } } }
/////////////////////////////////////////////////////////////////////////////////////////// #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); } }
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); } } } } } }