You are on page 1of 40

Instituto Tecnolgico de Mazatln

MANUAL TECNICO
Simulador de un compilador
Ana Rosa Corpus Pastrano

Instituto Tecnolgico de Mazatln Departamento de Ingenieras Ingeniera en Sistemas Computacionales


MANUAL TECNICO Alumno: Corpus Pastrano Ana Rosa Materia: Lenguajes Autmatas II Docente: Silva Hernndez Iliana Amabely
Mazatln, Sinaloa, Octubre 2013 2

ndice

Introduccin ............................................................................................................................................................................ 5 Estilo Libre ............................................................................................................................................................................... 6 Anlisis Lxico ..................................................................................................................................................................... 7 Anlisis Sintctico................................................................................................................................................................ 8 Diagramas de Regla sintctica .......................................................................................................................................... 10 Estilo Oraciones y Palabras ................................................................................................................................................... 11 Estilo Palabras ................................................................................................................................................................... 12 Diagramas de regla semntica de palabra .................................................................................................................... 15 Estilo Oraciones................................................................................................................................................................. 17 Diagramas de la regla semntica de oracin. ............................................................................................................... 20 Estilo Numrico ..................................................................................................................................................................... 22 Diagramas de la regla semntica ...................................................................................................................................... 24 Estilo Opcional ...................................................................................................................................................................... 26 Detalles de la interfaz ........................................................................................................................................................... 32 Pestaa Estilo libre ............................................................................................................................................................ 32 Pestaa Estilo Oraciones y Palabras ................................................................................................................................. 33 Pestaa Estilo Numrico ................................................................................................................................................... 34

Mtricas de Halstead ............................................................................................................................................................ 36 Conclusin ............................................................................................................................................................................. 39

Introduccin
El programa simula de una manera simple, la lgica y funcionamiento de un compilador. El programa cumple con: el anlisis lxico, que es la primera fase del compilador, este toma el cdigo fuente y es separado en Tokens (unidad ms pequea de informacin), de esta manera pasa a la siguiente fase que es el anlisis sintctico el cual convierte el texto de entrada en otras estructuras (comnmente rboles), que son ms tiles para el posterior anlisis y capturan la jerarqua implcita de la entrada, posteriormente pasamos al anlisis semntico para encontrarle un significado a lo que hemos introducido y comprobar que los argumentos que tienen algn operador pertenecen al conjunto de operadores posibles. El programa es muy sencillo y se basa en su mayora en excepciones.

Figura 1.- Interface del programa.

Como podemos observar en la figura 1, se muestra la interfaz del programa. Este se divide en tres estilos: Estilo libre, donde solo existe una regla sintctica. Estilo Oraciones y Palabras, el cual se divide en dos comparaciones, una es la comparacin de palabras y la segunda la comparacin de oraciones ya establecidas como regla semntica y por ltimo el Estilo numrico, que es una calculadora muy simple, solo cumple con las operaciones de sumar, restar y dividir. Adems de tener una regla semntica.

Estilo Libre
En este estilo, prcticamente no existen reglas semnticas, es decir no est establecida una comparacin, pero si se encuentra una regla sintctica, la cual es de no aceptar ms de 50 caracteres incluyendo espacios en el primer recuadro. A continuacin se explica cada uno de los elementos de este estilo.

Figura 2.- Estilo libre

Anlisis Lxico Este estilo cuenta con dos recuadros blancos, para ser ms especfico, dos richTexbox y un botn (llamando conteo). Al primer richTexbox se le es ingresado cualquier palabra ( AaZz), numero (09) o smbolo (*/ $%). Al seleccionar el botn, toma la cadena ingresada en el primer richTebox y es analizado por el cdigo de la figura 3. Simula la fase lxica, por medio del mtodo Split, el cual toma en este caso el espacio para dividir la cadena en palabras, consecuentemente en el richTexbox se imprime la cadena separada por el smbolo --- que representan el espacio.
//Este cdigo simula la accin del analizador lxico, separando palabra por palabra los datos ingresados. private void button1_Click(object sender, EventArgs e) { string texto =richTexbox1.Text; char[] delimitantes = {' '}; richTexbox2.Clear(); string[] words = texto.Split(delimitantes); foreach (string s in words){richTexbox2.Text += "----" + s +"----";}
Figura 3.- Cdigo del analizador lxico.

//Compara La cadena, tranformando a char, para comparar caracteres. int let = 0; int num = 0; int sym = 0; //Tranformando el string a char char[] lala = richTexbox1.Text.ToCharArray(); // ciclo que compara el largo de la string for (int i = 0; i < lala.Length; i++) { //If que permite el uso del espacio no como simbolo if (lala[i] == ' ') { i++; } // if que compara los caracteres con letras, si es as la variable let se le sumara 1

if (char.IsLetter(lala[i])) { let++; } // if que compara los caracteres con numeros, si es as la variable num se le sumara 1 else if (char.IsNumber(lala[i])) { num++;} // else, sino es letra ni numero, ser simbolos else { sym++ } } // Muestra en pantaa las variables. textBox3.Text = let.ToString(); textBox4.Text = num.ToString(); textBox5.Text = sym.ToString();
Figura 4.- Cdigo del analizador sintctico.

Anlisis Sintctico Una vez concluida la fase, pasa al cdigo de la figura 4, donde se observa que la cadena es ingresada a una matriz y seguidamente comparada para determinar si se encuentra alguna letra, numero o smbolo dentro de la cadena ingresada. Los mtodos IsLetter() y IsNumber identifican (comparan de manera binaria a cada smbolo de la cadena) s es una letra o un numero, en caso de que sea cierto, se va incrementando la cantidad en 1 en 1 en sus respectivas variables: num nmeros y let letras como podemos observar en la figura 5, en el recuadro de conteo.

Figura 5.- Resultado del estilo libre.

La cantidad de los espacios no se cuantifican, pero si son tomados en cuenta al momento de analizar la cantidad de caracteres permitidos. El richTexbox puede aceptar ms de 2000 caracteres, pero podemos reducirle esa cantidad cambiando su propiedad, implemen tando el mtodo MaxLength de la siguiente manera: richTextBox1.MaxLength = 60.

Diagramas de Regla sintctica

Cadena 10

Letra

Numero

Simbolo

AaZz

09

#$%&/()=0{} +*]_-.:;,|\ ~

Figura 6.- rbol sintctico

Inicio

Oracin

Separa

Letra 2 Numero Smbolo E* 3

Compara

Figura 7.- Diagrama Transicin.

N Nodos 0 1 2 3 4

Arista oracin X Err Err Err Err

Arista separa Err X Err Err Err

Arista Letra Err Err X Err Err

Arista numero Err Err X Err Err

Arista smbolo Err Err X Err Err

Arista compara Err Err Err X Err

11

Figura 8.- Tabla de transicin.

Estilo Oraciones y Palabras


Este estilo se inicia por defecto al ejecutar el programa. El anlisis lxico y sintctico es el mismo cdigo, pero en lugar de ser richTextbox, se agregaron Textbox. Adems de que se cambio la regla sintctica, solo se permite letras y smbolos (figura 9). Se lleva a cabo con el evento KeyPress, es un evento relacionado con el bloqueo de entrada del teclado.
private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { // en este evento asignado en el textbox, nos permito denegar //el ingreso de numeros. if (char.IsNumber(e.KeyChar)) { e.Handled = true; } else if (char.IsControl(e.KeyChar)) { e.Handled = false; } else if (char.IsSeparator(e.KeyChar)) { e.Handled = false; } else if (char.IsLetter(e.KeyChar)) { e.Handled = false; }

12
Figura 9.- Cdigo para no permitir nmeros.

Se divide en dos comparaciones. Estilo Palabras En este estilo es donde encuentra una regla semntica, la cual consta de que solo se permite el ingreso de una cadena (palabra) igual a una palabra que haya declarado dentro del programa. El cdigo de la figura 11 muestra las palabras permitidas, y en la figura 10 estas palabras pasan a compararse con el uso de if y else. Si la palabra es correcta muestra un mensaje palabra correcta en caso contrario, muestra un error en el textbox2 como se ve en la figura 12.
if (textBox1.Text.Equals(palabra1)) { label17.Text = "Palabra Correcta"; } else if (textBox1.Text.Equals(palabra2)) { label17.Text = "Palabra Correcta"; } else if (textBox1.Text.Equals(palabra3)) { label17.Text = "Palabra Correcta"; } else if (textBox1.Text.Equals(palabra4)) { label17.Text = "Palabra Correcta"; } else if (textBox1.Text.Equals(palabra5)) { label17.Text = "Palabra Correcta"; } else if (textBox1.Text.Equals(palabra6)) { label17.Text = "Palabra Correcta"; } else if (textBox1.Text.Equals(palabra7)) { label17.Text = "Palabra Correcta"; } else if (textBox1.Text.Equals(palabra8)) { label17.Text = "Palabra Correcta"; } else if (textBox1.Text.Equals(palabra9)) { label17.Text = "Palabra Correcta"; } else if (textBox1.Text.Equals(palabra10)) { label17.Text = "Palabra Correcta"; } else if (textBox1.Text.Equals(palabra11)) { label17.Text = "Palabra Correcta"; } else if (textBox1.Text.Equals(palabra12)) { label17.Text = "Palabra Correcta"; } else if (textBox1.Text.Equals(palabra13)) { label17.Text = "Palabra Correcta"; } else if (textBox1.Text.Equals(palabra14)) { label17.Text = "Palabra Correcta"; } else if (textBox1.Text.Equals(palabra15)) { label17.Text = "Palabra Correcta"; } else if (textBox1.Text.Equals(palabra16)) { label17.Text = "Palabra Correcta"; }

else else else else else else else else else

if if if if if if if if if

(textBox1.Text.Equals(palabra17)) (textBox1.Text.Equals(palabra18)) (textBox1.Text.Equals(palabra19)) (textBox1.Text.Equals(palabra20)) (textBox1.Text.Equals(palabra21)) (textBox1.Text.Equals(palabra22)) (textBox1.Text.Equals(palabra23)) (textBox1.Text.Equals(palabra24)) (textBox1.Text.Equals(palabra25))

{ { { { { { { { {

label17.Text label17.Text label17.Text label17.Text label17.Text label17.Text label17.Text label17.Text label17.Text

= = = = = = = = =

"Palabra "Palabra "Palabra "Palabra "Palabra "Palabra "Palabra "Palabra "Palabra

Correcta"; Correcta"; Correcta"; Correcta"; Correcta"; Correcta"; Correcta"; Correcta"; Correcta";

} } } } } } } } }

13

Figura 10.- Comparacin de las palabras.

private void Palabras() { string palabra1 = "Ana"; string palabra2 = "Roberto"; string palabra3 = "Luis"; string palabra4 = "Isabel"; string palabra5 = "Carlos"; string palabra6 = "Arturo"; string palabra7 = "Laura"; string palabra8 = "Comer"; string palabra9 = "Jugar"; string palabra10 = "Jugar"; string palabra11 = "Tener"; string palabra12 = "Querer"; string palabra13 = "Gustar"; string palabra14 = "Saltar"; string palabra15 = "Estar"; string palabra16 = "Manzana"; string palabra17 = "Melon"; string palabra18 = "Futbol"; string palabra19 = "Ping-Pong"; string palabra20 = "Feliz"; string palabra21 = "Triste"; string palabra22 = "Enojado"; string palabra23 = "Gato"; string palabra24 = "Perro";

string palabra25 = "Hombre"; string palabra26 = "Mujer"; string palabra27 = "Nio"; string palabra28 = "Nia"; string palabra29 = "Blanco"; string palabra30 = "Rojo";

Figura 11.- Palabras permitidas.

14

Se puede corregir el error, borrando la palabra e ingresando la palabra correctamente. Para evitar este tipo de errores se facilita un diccionario de las palabras permitidas en recuadro izquierdo inferior del programa (figura 13).

Figura 12.- Error al ingresar la palabra.

Si nos presenta el error fcilmente podemos recurrir al diccionario y verificar como est escrita la palabra.

15

Figura 13.- Diccionario de palabras.

Otro punto muy importante es, que los nombres siempre inician con mayscula, en cambio en las dems palabras se tomo ms flexible y pueden iniciar con minscula, la regla semntica solo se aplica a los nombres.

Diagramas de regla semntica de palabra

Cadena

Letra

Simbolo

16

AaZz

#$%&/()=0{} +*]_-.:;,|\ ~

Figura 14.- rbol sintctico solo letras y nmeros.

Inicio

Oracin

Separa

Letra Smbolo E*

Compara

Figura 15.- Diagrama de transicin

Arista

Arista

Arista

Arista

Arista

Nodos 0 1 2 3 4

oracin X Err Err Err Err

separa Err X Err Err Err

Letra Err Err X Err Err

smbolo Err Err X Err Err

compara Err Err Err X Err

17

Figura 16.- Tabla de transicin

Estilo Oraciones En la figura 17, estn declaradas las oraciones permitidas, en este estilo se implementan otras reglas semnticas: Todas las oraciones terminan en punto final. Todas las oraciones inician con mayscula. Los nombres inician con mayscula.
string oracion1 = "Ana es bonita."; string oracion2 = "Isabel tiene sed."; string oracion3 = "La Laura tiene hambre."; string oracion4 = "La Ana juega futbol."; string oracion5 = "Roberto quiere un gato."; string oracion6 = "A Luis le gusta correr."; string oracion7 = "Los nios juegan futbol."; string oracion8 = "El perro salta la silla."; string oracion9 = "La nia est feliz.";
Figura 17.- Oraciones permitidas.

Dado que se implican mas reglas, se agregan ms comparaciones, de posibles errores. Por ejemplo en la figura 18, se muestra un error de puntuacin. Y el mismo programa da el aviso.

18

Figura 18.- error de puntuacin

Tambin cuenta con su diccionario, pero en este caso de oraciones (figura 20). El cdigo de comparaciones es muy extenso y abarca muchas excepciones por posibles de inconvenientes errores. Las reglas bien definidas se encuentran en la pestaa de Reglas.

19

Figura 19.- Reglas estilo oraciones.

Al darle click, emerge una ventana, en la pestaa superior muestra 4 opciones. En la pestaa de Estilo oraciones y palabras se encuentran 2 subindices, oraciones y palabras. En cada una se contempla sus respectivas reglas.

Las oraciones y palabras, no pueden ser modificadas.

20

Figura 20.- Oraciones permitidas

Diagramas de la regla semntica de oracin.


Oracin Cadena Inicio mayscula
Smbolo

Nombre

Punto

Letras

Aazz
Figura 21.- rbol sintctico oracin.

Inicio

Oracin

Separa

Letras Smbolo E*

Compara

21

Figura 22.- Diagrama de transicin de oracin

N Nodos 0 1 2 3 4

Arista oracin X Err Err Err Err

Arista separa Err X Err Err Err

Arista Letra Err Err X Err Err

Arista smbolo Err Err X Err Err

Arista compara Err Err Err X Err

Figura 23.- Tabla de transicin oracin

Estilo Numrico
En este estilo aplicamos la regla sintctica de solo permitir nmeros, se aplica el mismo cdigo de la figura 9, pero en IsLetter al e.Handled se cambia el valor a verdadero y en IsNumber se cambia a falso. De este modo no se ingresan letras ni smbolos. Solo nmeros.

22

Figura 24.- Operacin en estilo numrico.

Como ejemplo, en la figura 24 se realiza la operacin suma; se puede seleccionar cualquiera de las tres opciones para realizar una operacin, posteriormente se muestra en la figura 25 el cdigo d cada operacin.
private void suma_CheckedChanged(object sender, EventArgs e) { num1 = Convert.ToDouble(uno.Text);//convierte de valor string a double. num2 = Convert.ToDouble(dos.Text); textBox2.Clear(); label7.Text = "+"; re = num1 + num2; Convert.ToString(re); //convierte de double a string. textBox2.Text = "__" + Convert.ToString(num1) + "__" + "+" + "__" + Convert.ToString(num2) + "__" + " = " + "__" + re; //se imprime el resultado. }

//---------------------------------------------------------------------------------------------------private void resta_CheckedChanged(object sender, EventArgs e) { textBox2.Clear(); label7.Text = "-"; num1 = double.Parse(uno.Text); num2 = double.Parse(dos.Text);

23

double re = num1 - num2; Convert.ToString(re); textBox2.Text = "__" + Convert.ToString(num1) + "__" + "-" + "__" + Convert.ToString(num2) + "__" + " = " + "__" + re; } //---------------------------------------------------------------------------------------------------private void divicion_CheckedChanged(object sender, EventArgs e) { textBox2.Clear(); uno.Text = "0"; dos.Text = "0"; label7.Text = "/"; num1 = double.Parse(uno.Text); num2 = double.Parse(dos.Text); double re = num1 / num2; Convert.ToString(re); textBox2.Text = "__" + Convert.ToString(num1) + "__" + "/" + "__" + Convert.ToString(num2) + "__" + " = " + "__" + re; }
Figura 25.- cdigo de operaciones.

Diagramas de la regla semntica


Cadena 24

Numero

09
Figura 26.- rbol sintctico.

Inicio

Oracin

Separa

Numero

Compara

E*
Figura 27.- Diagrama de transicin

N Nodos 0 1 2 3 4

Arista oracin X Err Err Err Err

Arista separa Err X Err Err Err

Arista Numero Err Err X Err Err

Arista compara Err Err Err X Err

25

Figura 28.- Tabla de transicin

Estilo Opcional

Este estilo, se puede encontrar dentro del estilo de oraciones y palabras (figura 29).

26

Figura 29.- ubicacin del estilo opcional

Este estilo es similar al estilo libre (figura 2), pero sus elementos son distintos, los cuales son: un textBox (textBox6), donde se ingresa la oracin o palabra que se desee ingresar, puede ser cualquier letra, nmero y carcter. Tambin se encuentra un button (button3), que al darle click agrega la oracin o palabra a la tabla, una vez agregada esta aparece en la tabla y puede ser comparada posteriormente (figura 30). La tabla tiene un lmite de almacenamiento, solo puede cargar 5 palabras u oraciones. Si se insiste en agregar ms de su capacidad, despliega un mensaje LA TABLA ESTA LLENA (figura 31).

27

Figura 30.- Ingresar una palabra u oracin.

Para ingresar otras palabras, se debe borrar la tabla, dando click en el botn clear. Despus de ingresar las oraciones y las palabras, posteriormente se pueden comparar, de la misma manera que en los estilos anteriores (figura 32).

28

Figura 31.- La tabla ya est llena.

En s, este estilo te da la libertad de ingresar cualquier palabra al diccionario (tabla), no hay lmites de caracteres, ni de letras y nmeros. rbol sintctico (figura 6), diagrama de transicin (figura 7), tabla de transicin (figura 9).

Figura 32.- Comparacin.

El presente estilo, da la libertad de agregar cualquier palabra u oracin a una pequea tabla para compararla. Es un estilo libre ya que no cuenta con reglas sintcticas ni lxicas, pero fue agregado en el estilo de palabras y oraciones por su caracterstica de comparacin, que permite el ahorro de cdigo duplicado.

Optimizacin de Cdigo
La optimizacin es el proceso de ajuste del rendimiento de un archivo ejecutable con el fin de obtener el mejor rendimiento y el menor tamao del cdigo. Como la optimizacin modifica el cdigo creado por el compilador, es mejor optimizar el cdigo despus de haberlo probado y depurado completamente. De esta manera, puede depurar cdigo muy parecido al cdigo fuente escrito y olvidarse de los efectos de la optimizacin. Como ejemplo, en la figura 33 se puede observar el cdigo del botn clear. Su propsito es limpiar la tabla, para permitir agregar ms palabras. Adems tambin evita posibles errores en los textboxs y limpiar las comparaciones errneas.

29

Figura 33.-Codigo del botn clear.

Pero dentro de todo el cdigo del programa, se encuentra un mtodo que cumple una funcin similar (figura 34), en limpiar los textboxs. Para optimizar este pequeo cdigo, borramos los mtodos de los textboxs que se encuentran dentro del botn clear, y solo mandamos a llamar el mtodo clean.

30

Figura 34.-Codigo del mtodo Clean.

El resultado del cdigo queda de la siguiente manera

Figura 35.- cdigo final del botn clear.

El botn hace la misma funcin, incluso se le ha agregado ms, ahora no solo limpia la tabla y los textbox 1 y 2, sino limpia 3, 4 y 5, los cuales muestran el conteo de caracteres.

Generacin de Cdigo
La generacin de cdigo es una de las fases mediante el cual un compilador convierte un programa sintcticamente correcto en una serie de instrucciones a ser interpretadas por una mquina, es decir, convertir un lenguaje de alto nivel a lenguaje ensamblador. La entrada en esta fase viene representada, tpicamente, por un rbol Sintctico, un rbol de Sintaxis Abstracta, o una Representacin Intermedia. El lenguaje ensamblador o assembler, es un lenguaje de programacin de bajo nivel para los computadores, microprocesadores, microcontroladores, y otros circuitos integrados programables. Implementa una representacin simblica de los cdigos de mquina binarios y otras constantes necesarias para programar una arquitectura dada de CPU y constituye la representacin ms directa del cdigo mquina especfico para cada arquitectura legible por un programador. Con la utilidad de un programa de ensamblador, traduce las sentencias del lenguaje ensamblador al cdigo maquina del computador. El programa lee el fichero escrito en lenguaje ensamblador y sustituye cada uno de los cdigos nemotcnicos que aparecen por su cdigo de operacin correspondiente en sistema binario para la plataforma que se eligi como destino en las opciones especficas del ensamblador. Como ejemplo; el desplegar o imprimir una cadena en un lenguaje de alto nivel, en este caso es C#, se escribe el siguiente cdigo: label4.Text = Ingresa una Palabra; (La lnea de cdigo se localiza en la figura 38). Al seleccionar la opcin de palabras, el label cambia de propiedad y despliega el determinado mensaje. En ensamblador se determina una variable la cual contenga la cadena a imprimir msg db 10,13, Ingresa una Palabra$ , consecutivamente se le asigna una direccin en la memoria. Ahora se manda a llamar la variable que contiene la cadena e imprimirla, en la figura 36 se muestra la comparacin del cdigo ensamblador con el lenguaje de alto nivel de C#.

31

C# Label4.Text = Ingresa una Palabra;

Ensamblador Msg db 10,13 Ingresa una Palabra$ Cv db 16 dup ($) Mov ah,09h Mov dx,offset msg Int 21h

32

Figura 36.- Conversin de cdigo C# a ensamblador.

Detalles de la interfaz
Cada estilo tiene sus propios elementos y caractersticas. Y se muestran al seleccionar la pestaa correspondiente. Las propiedades de los textbox, labels, buttons, cambia su visibilidad ya sea falsa o verdadera, dependiendo del estilo seleccionado. Pestaa Estilo libre Al seleccionar este estilo, se deshabilitan varios textobx y a habilitan richTexbox, tambin aparece un botn, y varios label cambian de propiedades en texto.
Figura 37.- Cdigo validacin de elementos de estilo libre
private void estiloLibreToolStripMenuItem_Click_1(object sender, EventArgs e) { uno.Clear(); dos.Clear(); label17.Text = ""; errorProvider1.SetError(textBox2, null);

chekpalabra = false; chekoracion = false; cheknumero = false; groupBox3.Visible = false; groupBox2.Visible = true; Diccionario.Visible = false; radiooraciones.Visible = false; radiopalabras.Visible = false; richTextBox1.Visible = true; richTextBox2.Visible = true; button2.Visible = true; label5.Visible = true; richTextBox1.MaxLength = 50; label2.Visible = false; textBox2.Clear(); label7.Visible = false; label8.Visible = true; label8.Text = " Puedes ingresar cualquier tipo de simbolo y digito nmerico, solo hay una limitacin\n no puedes ingresar mas de 60 caracteres.\n\n Intenta escribir un cuento, si puedes"; }

33

Pestaa Estilo Oraciones y Palabras Al regresar al estilo de oraciones y palabras, los textbox, reaparecen junto con los grupos de diccionario y conteo. Los richTextbox se deshabilitan temporalmente hasta volver ser llamados, al igual que sus propiedades.
private void estiloPorOracionesYPalabrasToolStripMenuItem_Click(object sender, EventArgs e) { uno.Clear(); dos.Clear(); chekpalabra = true; chekoracion = false; cheknumero = false; groupBox3.Visible = true; groupBox2.Visible = true; Diccionario.Visible = true; radiooraciones.Visible = true; radiopalabras.Visible = true; richTextBox1.Visible = false; richTextBox2.Visible = false;

button2.Visible = false; label5.Visible = false; label2.Visible = true; uno.Visible = false; dos.Visible = false; suma.Visible = false; resta.Visible = false; divicion.Visible = false; textBox1.Visible = true; label4.Text = "Ingresa una Palabra"; label4.Visible = true; numerouno.Visible = false; label7.Visible = false; label17.Text = ""; errorProvider1.SetError(textBox2, null); label8.Visible = false; label2.Text = "Estilo Oraciones y Palabras"; button1.Visible = true; }

34

Figura 38.-Cdigo de validacin de elementos de estilo oraciones y palabras.

Pestaa Estilo Numrico Las operaciones se habilitan junto con los radioCheckBox. El textbox2 no cambia sus propiedades.
private void estiloNumericoToolStripMenuItem_Click(object sender, EventArgs e) { uno.Clear(); dos.Clear(); label2.Text = "Estilo Nmerico"; label4.Text = "Ingresa dos numeros"; label4.Visible = true; numerouno.Visible = true; cheknumero = true; chekoracion = false; chekpalabra = false; suma.Visible = true; resta.Visible = true; divicion.Visible = true; button1.Visible = false; textBox1.Visible = false; uno.Visible = true; dos.Visible = true; groupBox2.Visible = false;

Diccionario.Visible = false; radiooraciones.Visible = false; radiopalabras.Visible = false; textBox2.Clear(); groupBox3.Visible = true; label8.Visible = false; label17.Text = ""; errorProvider1.SetError(textBox2, null); richTextBox1.Visible = false; richTextBox2.Visible = false; button2.Visible = false; label5.Visible = false; label2.Visible = true; }

35

Figura 39.-Cdigo de validacin de elementos de estilo oraciones y palabras.

Los textboxs agregados en este estilo, son llamados uno (es izquierdo) y dos (en derecho). Los dos poseen las mismas propiedades y el mismo evento.
/----------------------------------------------------------------------------------------------private void uno_KeyPress_1(object sender, KeyPressEventArgs e) { if (char.IsNumber(e.KeyChar)) { e.Handled = false; } else if (char.IsControl(e.KeyChar)) { e.Handled = false; } else if (char.IsSeparator(e.KeyChar)) { e.Handled = false; } else if (char.IsLetter(e.KeyChar)) { e.Handled = true; } } //--------------------------------------------------------------------------------------------private void dos_KeyPress_1(object sender, KeyPressEventArgs e) { if (char.IsNumber(e.KeyChar)) { e.Handled = false; } else if (char.IsControl(e.KeyChar)) { e.Handled = false; } else if (char.IsSeparator(e.KeyChar)) { e.Handled = false; } else if (char.IsLetter(e.KeyChar)) { e.Handled = true; } }

Figura 40.-Cdigo de validacin de elementos de estilo oraciones y palabras.

Mtricas de Halstead
Las mtricas de Halstead estn basadas en el clculo de palabras clave (reservadas) y variables escritas en el cdigo de un programa. A Continuacin, se aplica estas mtricas en el cdigo de las figuras 3 y 4. Operando 1 2 3 4 5 6 7 8 9 10 11 Texto Delimitantes Words Let Num Sym Lala I Richtextbox Textbox 0 Cuenta 2 2 2 2 2 2 2 5 3 4 1
36

Figura 41.- Tabla de operandos incluidos en el cdigo de las figuras 3 y 4.

En la tabla de la figura 41 se observa, los operandos que se encuentran en el cdigo de la figura 3, en la columna cuenta las veces que se repite cada operando; En la tabla de la figura 42, su pueden observar los operadores del mismo cdigo y el nuero de veces que se repiten. Operadores 1 = cuenta 11

2 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

+= + Foreach For == ++ If Else To string( ) Int String String [ ] Char[ ] Split ( ) Is letter ( ) Is Number ( ) < Else if

1 2 1 1 1 5 2 1 3 3 1 1 2 1 1 1 1 1

37

Figura 42.- Tabla de operadores del cdigo de las figura 3 y 4.

Halstead propone las siguientes mtricas: N1 = nmero total de las veces que aparece el operador. = 41 N2 = nmero total de las veces que aparece el operando. = 35

n1 = nmeros de operadores diferentes que aparecen en un programa. = 19 n2 = nmeros de operandos diferentes que aparecen en un programa. = 14 N = N1 + N2 =76 n = n1 + n2 = 39 Longitud = N1 . log2 . n1 + N2 . log2 . n2 = 41 . log2 . 19 + 35 . log2 . 14 = 382.08 Tamao = N1 + N2 = 41 + 35 = 76 Volumen = Log2 n = log2 39 = 11.740 Esfuerzo de Implementacin E = ( n1 . N2 . N . log2 . n) / (2 . n2) = ( 19 . 35 .76 . log2 . 11.740) / (2. 14) = 178613.017 / 28 = 6379.036 Tiempo de desarrollo de un programa T = E / B = 6379.036 / 18 = 354.390
38

Conclusin
39

La base del compilador son las comparaciones, el cdigo debe estar estructurado de manera en que si pasa algo sepa que hacer, si es correcto o no, y guiar al programador a corregir su error. Hoy encontrar un error lxico y sintctico es sencillo. Los compiladores ayudan al programador a encontrar sus errores gracias a la amistosa interfaz que van desarrollando con el paso del tiempo. Los errores que an persisten son los errores lgicos estos solo ejecutando el programa se pueden reconocer. Un buen programa debe cubrir los ms mnimos detalles posibles y al comprender los anlisis lxicos y sintcticos, son de gran ayuda en la lgica del programador y cubrir todos los posibles errores que podran surgir. Optimizar el cdigo, es recomendable hacerlo uno mismo, de esa manera se actualiza como programador y reduce el cdigo y lograr una mejor eficiencia en el programa, la optimizacin puede ser desde remplazar una ecuacin con una sustitucin o reducir el cdigo duplicado. Adems de ser mucho ms fcil identificar los mtodos en el programa por estar ms organizado.

40

You might also like