Compiladores informe final

12
CIS-IX-B UNIVERSIDAD NACIONAL DE LOJA ´ Area de la Energ´ ıa las Industrias y los Recursos Naturales No Renovables Carrera de Ingenier ´ ıa en Sistemas “Conversor de Enteros a Binarios” Informe Final oveno B Responsable: Morocho Morocho Priscila Beatriz Docente: Ing.: Henry Paz Loja - Ecuador 2015 1

Transcript of Compiladores informe final

CIS-IX-B

UNIVERSIDADNACIONALDE LOJA

Area de la Energıa las Industrias y los Recursos Naturales No Renovables

Carrera de Ingenierıa en Sistemas

ldquoConversor de Enteros a Binariosrdquo

Informe FinalNoveno B

Responsable

bull Morocho Morocho Priscila Beatriz

Docente

bull Ing Henry Paz

Loja - Ecuador2015

1

Indice general

A Compiladores 3B Descripcion del Problema 3C Automata del Compilador 3D Compilador 4

1 Analizador Lexico 42 Analizador Sintactico 63 Resultados 9

E Bibliografıa 12

2

Conversor de Enteros a Binarios

A CompiladoresLos compiladores como los interpretes son programas de gran complejidad Un compila-

dor no es mas que un traductor es decir un programa que nos permite pasar informacion deun lenguaje a otro Por ejemplo un compilador de C nos permite traducir ficheros escritosen lenguaje C a un lenguaje legible para la maquina

Al final tendremos un unico programa que serıa el traductor Este traductor tendrıa unanalizador sintactico y a su vez el analizador sintactico tendrıa un analizador lexico [1]

Analisis lexicoSe encarga de la division de la entrada en componentes lexicos

Analisis sintacticoSe encarga de encontrar las estructuras presentes en la entrada

Analisis semanticoSe encarga de comprobar que se cumplen las restricciones semanti-cas del lenguaje

B Descripcion del ProblemaEl siguiente compilador lo que va a resolver es la conversion de numeros enteros a bina-

rios para que se realice la operacion se debera ingresar el numero a convertir seguido de lapalabra reservada convertir por ejemplo 256 convertirEsto lo vamos a realizar en un archivo txt que posteriormente lo leeremos con nuestro compi-lador en el caso de que se ingrese de forma incorrecta saldran los debidos errores del archivo

Para realizar la codificacion del compilador se necesita de las librerias JFLEX y CUP almismo se lo realiza con el lenguaje java por medio del IDE Netbeans

C Automata del CompiladorEste compilador tendra la estructura que se muestra a continuacion

Figura 1 Automata del conversor

3

D Compilador

1 Analizador LexicoJFlex es un generador de analizador lexico para Java esta disenado para trabajar junto

con el generador de analizador LALR CUP Tambien se puede utilizar junto con otros gene-radores de analizadores sintacticos como antlr o como una herramienta independiente[2]Este generador toma una cadena de caracteres como entrada y lo convierte en una secuenciade tokens consta de 3 partes principales en su estructura que son opciones y declaracionescodigo de usuario y reglas lexicas

Opciones y declaraciones En esta seccion van los paquetes que se van a utilizaraquı se declaran las directivas y macros se indica el nombre de la clase en este casoAnalizadorlexico se habilita line y column para obtener la lınea y columna de laposicion actual del compilador y cup para realizar la integracion con el archivo cup enesta seccion van las siguientes lıneas de codigo

bull package ejemplocup Esto nos indica el paquete en el cual nuestra clase seencuentrabull import javacupruntime Esta importacion permitira hacer la implementacion

con cupbull import javaioReader Io Reader nos permitira leer nuestro archivo en el que

estara el numero a convertirbull class AnalizadorLexico Nombre de nuestra clase javabull line Indica la posicion de la lıneabull column Indica la posicion de la columnabull cup Nos permitira realizar la compatibilidad con Cup

Figura 2 Opciones y Declaraciones

4

Codigo de usuario En esta seccion van las directivas o especificaciones para obtenerla salida deseada Tambien se encuentra aqui los metodos para encontrar los tokensdeseados

Estos 2 metodos van a permitir trabajar con la clase symbol la cual sera de ayudapara que al momento de analizar la expresion nos devuelva los tokens encontrados enla misma

Figura 3 Metodos

En esta seccion especificamos nuestro codigo creando tres variables la variable salto queindica que se ignorara los saltos de lınea retorno de carro o salto de linea y retorno decarro la variable espacio que indica que se ignora lo declarado en la variable anterioro tabulador y fin de linea y por ultimo una variable entero donde vamos a aceptarenteros del 0 al 9 y todas sus combinaciones

Figura 4 Codigo de Usuario

Reglas lexicas En esta seccion del archivo JFlex es donde se definen las reglas paraobtener los tokens de la cadena que se esta leyendoDonde

bull convertir return symbol(symFINALyylineyycolumn) Es el operadorque me permitira hacer la transformacion de un entero decimal a binario a esteToken se lo llamara FINALbull Entero return symbol(symENTERO new Integer(yytext())yylineyycolumn)

Me indica que se va a ingresar un entero al cual lo vamos a transformor el nombrepara este token es el de ENTERO

En la imagen siguiente se puede ver lo que se ha explicado

5

Figura 5 Reglas lexicas

Aquı tambien encontramos el siguiente codigo que nos lanzara informacion acercade la posicion de algun error encontrado en caso de haberlo

Figura 6 Reglas lexicas - captura errores

2 Analizador SintacticoLuego de realizar el analizador lexico se realiza el analizador sintactico para el cual vamos

a emplear la libreria CUP Cup esta escrito en Java utiliza especificaciones incluyendo codigoJava embebido y produce programas de analisis que se implementan en Java Nuestro archivocup esta conformado por [3]

Definicion de paquete y sentencias import

bull package ejemplocup Esto nos indica el paquete en el cual nuestra clase seencuentrabull import javacupruntime Esta importacion permitira hacer la implementa-

cion con cupbull import javaioReader Io Reader nos permitira leer nuestro archivo en el que

estara el numero a convertir

Figura 7 Paquetes e importaciones

6

Seccion del parser code aquı estaran los metodos que nos permitiran capturar loserrores encontrados los mismos que los describiremos a continuacion

bull report error Este metodo recibe un mensaje de tipo string y info de tipo objectAquı se crea un objeto m de tipo StringBuilder a la cual se la inciara con el valorde Error luego creo un objeto de tipo Symbol que se lo denomino s el cual meservira para econtrar la fila y la columna donde se muestre el errorEl metodoString var=infotoString()+String[] varres=varsplit(rdquordquo)if (IntegerparseInt(varres[1])==symEOF) Systemerrprintln(rdquoFalta Ingresar el operador convertir rdquo) elseif (IntegerparseInt(varres[1])==symFINAL) Systemerrprintln(Error con la palabra reservadaconvertir o Error falta ingresar entero a convertirrdquo)mappend(rdquo -message) Systemerrprintln(m) Me permitira primero crear una variable de tipo String a que le denominamosvar luego en el paso posteior se crea un arreglo de cadenas en donde se va a irguardando las variables ingresadasLuego pregunta si la posicion 1 del arreglo es igual al token de Fin de archivvosi ese fuera el caso me arroja el mensajeFalta ingresar el operador convertirDe darse el caso contrario ahı quiere decir que el arreglo de cadenas de posicion 1sea igual al token FINAL que hace referencia al operador Convertir del proyectose emite el mensaje Error ingresar convertirbull report fatal error Este metodo funcionara en caso que se encuentre un error

en el cual el sistema no pueda recuperarse lanzando un mensaje de informacion

7

Figura 8 Metodos de Errores Encontrados

En esta seccion tambien encontramos el metodo main que permitira garantizar laejecucion del analizador lexico y sintactico

Figura 9 Metodo Main

Declaracion de sımbolos terminales y no terminalesSe declaran dos teminales el uno un entero y el otro final y dos no terminales el unode tipo object imprime y el otro de tipo string codigo

Figura 10 Terminales y No terminales

Seccion de la gramatica

8

Las gramaticas sirven para armar las expresiones aceptadas en el compilador Todos losterminos no terminales deben tener su gramatica declarada para determinar su valorEl codigo Java que se requiera usar debe ser colocado entre codigo La gramatica propuesta para este proyecto debe seguir la siguiente estructura

bull ENTERO FINAL

Ejemplo

bull 12324 convertir

En la imagen que veran a continuacion indico la gramatica en donde se vera la formaque tendra la sentencia para realizar la conversion de decimal a binario declarandopara ellos los terminos terminales de acuerdo a la forma que el analizador sintacticoaceptara

Figura 11 Metodo para convertir

3 ResultadosPara poder realizar las conversiones con nuestro compilador vamos a tener un archivo

txt en el cual este el numero a convertir con el siguiente formato

(numero) Operador

Por lo tanto si el numero al que queremos transformar a binario es el 400 lo vamos aguardar en el txt para que el compilador pueda leer y convertir al numero deseado

Ejemplos

Entrada 400 convertir

Salida RESULTADO BINARIO 110010000

Si se ingresa de forma incorrecta nos puede presentar las siguientes salidas

Entrada convertir

9

Salida Error con la palabra reservada convertir o Error falta ingresar entero a con-vertir

Entrada 34 vertir

Salida

bull El caracter ingresado no es valido (v)posicion(0 5)bull El caracter ingresado no es valido (e)posicion(0 6)bull El caracter ingresado no es valido (r)posicion(0 7)bull El caracter ingresado no es valido (t)posicion(0 8)bull El caracter ingresado no es valido (i)posicion(0 9)bull El caracter ingresado no es valido (r)posicion(0 10)bull Falta Ingresar el operador convertir

Entrada 27 convertirdd

Salida

bull RESULTADO BINARIO 11011bull El caracter ingresado no es valido (d)posicion(0 12)bull El caracter ingresado no es valido (d)posicion(0 13)

La siguiente figura muestra el archivo txt en el cual se ingresa el numero a convertir

Figura 12 Archivo texto

10

Y finalmente presentamos la salida por pantalla de nuestro compilador

Figura 13 Resultado de la conversion

Para una mejor comprension se puede descargar el codigo del compilador desde el reposi-torio de google code en el siguiente enlace httpscodegooglecompconversor-enteros-binariossourcebrowsesvn2Ftrunk2FConvertirEnterosBinarios

11

E Bibliografıa1 Sistemas Inteligentes en Ingenierıa Civıl ldquoIntroduccion a las Redes Neuronales Artifi-

cialesrdquo [En lınea] Disponible en httpoptimizacionheuristicablogsupvesfiles201304IntroducciC3B3n-Redes-Neuronales-ArtificialesMFMpdf

2 Introduccion a Las Redes Neuronales (Neurales) CO-6612 ldquoAcerca de la Funcion de Ac-tivacionrdquo [En lınea] Disponible en httpprofusbvemvillasaredesIntroduccion-vlpdf

3 Introduccion a Las Redes Neuronales Artificiales ldquoFunciones de Activacion y de Salidardquo[En lınea] Disponible en httphugo-inccomRNAUnidad20116html

12

  • Compiladores
  • Descripcioacuten del Problema
  • Autoacutemata del Compilador
  • Compilador
    • Analizador Lexico
    • Analizador Sintaacutectico
    • Resultados
      • Bibliografiacutea

Indice general

A Compiladores 3B Descripcion del Problema 3C Automata del Compilador 3D Compilador 4

1 Analizador Lexico 42 Analizador Sintactico 63 Resultados 9

E Bibliografıa 12

2

Conversor de Enteros a Binarios

A CompiladoresLos compiladores como los interpretes son programas de gran complejidad Un compila-

dor no es mas que un traductor es decir un programa que nos permite pasar informacion deun lenguaje a otro Por ejemplo un compilador de C nos permite traducir ficheros escritosen lenguaje C a un lenguaje legible para la maquina

Al final tendremos un unico programa que serıa el traductor Este traductor tendrıa unanalizador sintactico y a su vez el analizador sintactico tendrıa un analizador lexico [1]

Analisis lexicoSe encarga de la division de la entrada en componentes lexicos

Analisis sintacticoSe encarga de encontrar las estructuras presentes en la entrada

Analisis semanticoSe encarga de comprobar que se cumplen las restricciones semanti-cas del lenguaje

B Descripcion del ProblemaEl siguiente compilador lo que va a resolver es la conversion de numeros enteros a bina-

rios para que se realice la operacion se debera ingresar el numero a convertir seguido de lapalabra reservada convertir por ejemplo 256 convertirEsto lo vamos a realizar en un archivo txt que posteriormente lo leeremos con nuestro compi-lador en el caso de que se ingrese de forma incorrecta saldran los debidos errores del archivo

Para realizar la codificacion del compilador se necesita de las librerias JFLEX y CUP almismo se lo realiza con el lenguaje java por medio del IDE Netbeans

C Automata del CompiladorEste compilador tendra la estructura que se muestra a continuacion

Figura 1 Automata del conversor

3

D Compilador

1 Analizador LexicoJFlex es un generador de analizador lexico para Java esta disenado para trabajar junto

con el generador de analizador LALR CUP Tambien se puede utilizar junto con otros gene-radores de analizadores sintacticos como antlr o como una herramienta independiente[2]Este generador toma una cadena de caracteres como entrada y lo convierte en una secuenciade tokens consta de 3 partes principales en su estructura que son opciones y declaracionescodigo de usuario y reglas lexicas

Opciones y declaraciones En esta seccion van los paquetes que se van a utilizaraquı se declaran las directivas y macros se indica el nombre de la clase en este casoAnalizadorlexico se habilita line y column para obtener la lınea y columna de laposicion actual del compilador y cup para realizar la integracion con el archivo cup enesta seccion van las siguientes lıneas de codigo

bull package ejemplocup Esto nos indica el paquete en el cual nuestra clase seencuentrabull import javacupruntime Esta importacion permitira hacer la implementacion

con cupbull import javaioReader Io Reader nos permitira leer nuestro archivo en el que

estara el numero a convertirbull class AnalizadorLexico Nombre de nuestra clase javabull line Indica la posicion de la lıneabull column Indica la posicion de la columnabull cup Nos permitira realizar la compatibilidad con Cup

Figura 2 Opciones y Declaraciones

4

Codigo de usuario En esta seccion van las directivas o especificaciones para obtenerla salida deseada Tambien se encuentra aqui los metodos para encontrar los tokensdeseados

Estos 2 metodos van a permitir trabajar con la clase symbol la cual sera de ayudapara que al momento de analizar la expresion nos devuelva los tokens encontrados enla misma

Figura 3 Metodos

En esta seccion especificamos nuestro codigo creando tres variables la variable salto queindica que se ignorara los saltos de lınea retorno de carro o salto de linea y retorno decarro la variable espacio que indica que se ignora lo declarado en la variable anterioro tabulador y fin de linea y por ultimo una variable entero donde vamos a aceptarenteros del 0 al 9 y todas sus combinaciones

Figura 4 Codigo de Usuario

Reglas lexicas En esta seccion del archivo JFlex es donde se definen las reglas paraobtener los tokens de la cadena que se esta leyendoDonde

bull convertir return symbol(symFINALyylineyycolumn) Es el operadorque me permitira hacer la transformacion de un entero decimal a binario a esteToken se lo llamara FINALbull Entero return symbol(symENTERO new Integer(yytext())yylineyycolumn)

Me indica que se va a ingresar un entero al cual lo vamos a transformor el nombrepara este token es el de ENTERO

En la imagen siguiente se puede ver lo que se ha explicado

5

Figura 5 Reglas lexicas

Aquı tambien encontramos el siguiente codigo que nos lanzara informacion acercade la posicion de algun error encontrado en caso de haberlo

Figura 6 Reglas lexicas - captura errores

2 Analizador SintacticoLuego de realizar el analizador lexico se realiza el analizador sintactico para el cual vamos

a emplear la libreria CUP Cup esta escrito en Java utiliza especificaciones incluyendo codigoJava embebido y produce programas de analisis que se implementan en Java Nuestro archivocup esta conformado por [3]

Definicion de paquete y sentencias import

bull package ejemplocup Esto nos indica el paquete en el cual nuestra clase seencuentrabull import javacupruntime Esta importacion permitira hacer la implementa-

cion con cupbull import javaioReader Io Reader nos permitira leer nuestro archivo en el que

estara el numero a convertir

Figura 7 Paquetes e importaciones

6

Seccion del parser code aquı estaran los metodos que nos permitiran capturar loserrores encontrados los mismos que los describiremos a continuacion

bull report error Este metodo recibe un mensaje de tipo string y info de tipo objectAquı se crea un objeto m de tipo StringBuilder a la cual se la inciara con el valorde Error luego creo un objeto de tipo Symbol que se lo denomino s el cual meservira para econtrar la fila y la columna donde se muestre el errorEl metodoString var=infotoString()+String[] varres=varsplit(rdquordquo)if (IntegerparseInt(varres[1])==symEOF) Systemerrprintln(rdquoFalta Ingresar el operador convertir rdquo) elseif (IntegerparseInt(varres[1])==symFINAL) Systemerrprintln(Error con la palabra reservadaconvertir o Error falta ingresar entero a convertirrdquo)mappend(rdquo -message) Systemerrprintln(m) Me permitira primero crear una variable de tipo String a que le denominamosvar luego en el paso posteior se crea un arreglo de cadenas en donde se va a irguardando las variables ingresadasLuego pregunta si la posicion 1 del arreglo es igual al token de Fin de archivvosi ese fuera el caso me arroja el mensajeFalta ingresar el operador convertirDe darse el caso contrario ahı quiere decir que el arreglo de cadenas de posicion 1sea igual al token FINAL que hace referencia al operador Convertir del proyectose emite el mensaje Error ingresar convertirbull report fatal error Este metodo funcionara en caso que se encuentre un error

en el cual el sistema no pueda recuperarse lanzando un mensaje de informacion

7

Figura 8 Metodos de Errores Encontrados

En esta seccion tambien encontramos el metodo main que permitira garantizar laejecucion del analizador lexico y sintactico

Figura 9 Metodo Main

Declaracion de sımbolos terminales y no terminalesSe declaran dos teminales el uno un entero y el otro final y dos no terminales el unode tipo object imprime y el otro de tipo string codigo

Figura 10 Terminales y No terminales

Seccion de la gramatica

8

Las gramaticas sirven para armar las expresiones aceptadas en el compilador Todos losterminos no terminales deben tener su gramatica declarada para determinar su valorEl codigo Java que se requiera usar debe ser colocado entre codigo La gramatica propuesta para este proyecto debe seguir la siguiente estructura

bull ENTERO FINAL

Ejemplo

bull 12324 convertir

En la imagen que veran a continuacion indico la gramatica en donde se vera la formaque tendra la sentencia para realizar la conversion de decimal a binario declarandopara ellos los terminos terminales de acuerdo a la forma que el analizador sintacticoaceptara

Figura 11 Metodo para convertir

3 ResultadosPara poder realizar las conversiones con nuestro compilador vamos a tener un archivo

txt en el cual este el numero a convertir con el siguiente formato

(numero) Operador

Por lo tanto si el numero al que queremos transformar a binario es el 400 lo vamos aguardar en el txt para que el compilador pueda leer y convertir al numero deseado

Ejemplos

Entrada 400 convertir

Salida RESULTADO BINARIO 110010000

Si se ingresa de forma incorrecta nos puede presentar las siguientes salidas

Entrada convertir

9

Salida Error con la palabra reservada convertir o Error falta ingresar entero a con-vertir

Entrada 34 vertir

Salida

bull El caracter ingresado no es valido (v)posicion(0 5)bull El caracter ingresado no es valido (e)posicion(0 6)bull El caracter ingresado no es valido (r)posicion(0 7)bull El caracter ingresado no es valido (t)posicion(0 8)bull El caracter ingresado no es valido (i)posicion(0 9)bull El caracter ingresado no es valido (r)posicion(0 10)bull Falta Ingresar el operador convertir

Entrada 27 convertirdd

Salida

bull RESULTADO BINARIO 11011bull El caracter ingresado no es valido (d)posicion(0 12)bull El caracter ingresado no es valido (d)posicion(0 13)

La siguiente figura muestra el archivo txt en el cual se ingresa el numero a convertir

Figura 12 Archivo texto

10

Y finalmente presentamos la salida por pantalla de nuestro compilador

Figura 13 Resultado de la conversion

Para una mejor comprension se puede descargar el codigo del compilador desde el reposi-torio de google code en el siguiente enlace httpscodegooglecompconversor-enteros-binariossourcebrowsesvn2Ftrunk2FConvertirEnterosBinarios

11

E Bibliografıa1 Sistemas Inteligentes en Ingenierıa Civıl ldquoIntroduccion a las Redes Neuronales Artifi-

cialesrdquo [En lınea] Disponible en httpoptimizacionheuristicablogsupvesfiles201304IntroducciC3B3n-Redes-Neuronales-ArtificialesMFMpdf

2 Introduccion a Las Redes Neuronales (Neurales) CO-6612 ldquoAcerca de la Funcion de Ac-tivacionrdquo [En lınea] Disponible en httpprofusbvemvillasaredesIntroduccion-vlpdf

3 Introduccion a Las Redes Neuronales Artificiales ldquoFunciones de Activacion y de Salidardquo[En lınea] Disponible en httphugo-inccomRNAUnidad20116html

12

  • Compiladores
  • Descripcioacuten del Problema
  • Autoacutemata del Compilador
  • Compilador
    • Analizador Lexico
    • Analizador Sintaacutectico
    • Resultados
      • Bibliografiacutea

Conversor de Enteros a Binarios

A CompiladoresLos compiladores como los interpretes son programas de gran complejidad Un compila-

dor no es mas que un traductor es decir un programa que nos permite pasar informacion deun lenguaje a otro Por ejemplo un compilador de C nos permite traducir ficheros escritosen lenguaje C a un lenguaje legible para la maquina

Al final tendremos un unico programa que serıa el traductor Este traductor tendrıa unanalizador sintactico y a su vez el analizador sintactico tendrıa un analizador lexico [1]

Analisis lexicoSe encarga de la division de la entrada en componentes lexicos

Analisis sintacticoSe encarga de encontrar las estructuras presentes en la entrada

Analisis semanticoSe encarga de comprobar que se cumplen las restricciones semanti-cas del lenguaje

B Descripcion del ProblemaEl siguiente compilador lo que va a resolver es la conversion de numeros enteros a bina-

rios para que se realice la operacion se debera ingresar el numero a convertir seguido de lapalabra reservada convertir por ejemplo 256 convertirEsto lo vamos a realizar en un archivo txt que posteriormente lo leeremos con nuestro compi-lador en el caso de que se ingrese de forma incorrecta saldran los debidos errores del archivo

Para realizar la codificacion del compilador se necesita de las librerias JFLEX y CUP almismo se lo realiza con el lenguaje java por medio del IDE Netbeans

C Automata del CompiladorEste compilador tendra la estructura que se muestra a continuacion

Figura 1 Automata del conversor

3

D Compilador

1 Analizador LexicoJFlex es un generador de analizador lexico para Java esta disenado para trabajar junto

con el generador de analizador LALR CUP Tambien se puede utilizar junto con otros gene-radores de analizadores sintacticos como antlr o como una herramienta independiente[2]Este generador toma una cadena de caracteres como entrada y lo convierte en una secuenciade tokens consta de 3 partes principales en su estructura que son opciones y declaracionescodigo de usuario y reglas lexicas

Opciones y declaraciones En esta seccion van los paquetes que se van a utilizaraquı se declaran las directivas y macros se indica el nombre de la clase en este casoAnalizadorlexico se habilita line y column para obtener la lınea y columna de laposicion actual del compilador y cup para realizar la integracion con el archivo cup enesta seccion van las siguientes lıneas de codigo

bull package ejemplocup Esto nos indica el paquete en el cual nuestra clase seencuentrabull import javacupruntime Esta importacion permitira hacer la implementacion

con cupbull import javaioReader Io Reader nos permitira leer nuestro archivo en el que

estara el numero a convertirbull class AnalizadorLexico Nombre de nuestra clase javabull line Indica la posicion de la lıneabull column Indica la posicion de la columnabull cup Nos permitira realizar la compatibilidad con Cup

Figura 2 Opciones y Declaraciones

4

Codigo de usuario En esta seccion van las directivas o especificaciones para obtenerla salida deseada Tambien se encuentra aqui los metodos para encontrar los tokensdeseados

Estos 2 metodos van a permitir trabajar con la clase symbol la cual sera de ayudapara que al momento de analizar la expresion nos devuelva los tokens encontrados enla misma

Figura 3 Metodos

En esta seccion especificamos nuestro codigo creando tres variables la variable salto queindica que se ignorara los saltos de lınea retorno de carro o salto de linea y retorno decarro la variable espacio que indica que se ignora lo declarado en la variable anterioro tabulador y fin de linea y por ultimo una variable entero donde vamos a aceptarenteros del 0 al 9 y todas sus combinaciones

Figura 4 Codigo de Usuario

Reglas lexicas En esta seccion del archivo JFlex es donde se definen las reglas paraobtener los tokens de la cadena que se esta leyendoDonde

bull convertir return symbol(symFINALyylineyycolumn) Es el operadorque me permitira hacer la transformacion de un entero decimal a binario a esteToken se lo llamara FINALbull Entero return symbol(symENTERO new Integer(yytext())yylineyycolumn)

Me indica que se va a ingresar un entero al cual lo vamos a transformor el nombrepara este token es el de ENTERO

En la imagen siguiente se puede ver lo que se ha explicado

5

Figura 5 Reglas lexicas

Aquı tambien encontramos el siguiente codigo que nos lanzara informacion acercade la posicion de algun error encontrado en caso de haberlo

Figura 6 Reglas lexicas - captura errores

2 Analizador SintacticoLuego de realizar el analizador lexico se realiza el analizador sintactico para el cual vamos

a emplear la libreria CUP Cup esta escrito en Java utiliza especificaciones incluyendo codigoJava embebido y produce programas de analisis que se implementan en Java Nuestro archivocup esta conformado por [3]

Definicion de paquete y sentencias import

bull package ejemplocup Esto nos indica el paquete en el cual nuestra clase seencuentrabull import javacupruntime Esta importacion permitira hacer la implementa-

cion con cupbull import javaioReader Io Reader nos permitira leer nuestro archivo en el que

estara el numero a convertir

Figura 7 Paquetes e importaciones

6

Seccion del parser code aquı estaran los metodos que nos permitiran capturar loserrores encontrados los mismos que los describiremos a continuacion

bull report error Este metodo recibe un mensaje de tipo string y info de tipo objectAquı se crea un objeto m de tipo StringBuilder a la cual se la inciara con el valorde Error luego creo un objeto de tipo Symbol que se lo denomino s el cual meservira para econtrar la fila y la columna donde se muestre el errorEl metodoString var=infotoString()+String[] varres=varsplit(rdquordquo)if (IntegerparseInt(varres[1])==symEOF) Systemerrprintln(rdquoFalta Ingresar el operador convertir rdquo) elseif (IntegerparseInt(varres[1])==symFINAL) Systemerrprintln(Error con la palabra reservadaconvertir o Error falta ingresar entero a convertirrdquo)mappend(rdquo -message) Systemerrprintln(m) Me permitira primero crear una variable de tipo String a que le denominamosvar luego en el paso posteior se crea un arreglo de cadenas en donde se va a irguardando las variables ingresadasLuego pregunta si la posicion 1 del arreglo es igual al token de Fin de archivvosi ese fuera el caso me arroja el mensajeFalta ingresar el operador convertirDe darse el caso contrario ahı quiere decir que el arreglo de cadenas de posicion 1sea igual al token FINAL que hace referencia al operador Convertir del proyectose emite el mensaje Error ingresar convertirbull report fatal error Este metodo funcionara en caso que se encuentre un error

en el cual el sistema no pueda recuperarse lanzando un mensaje de informacion

7

Figura 8 Metodos de Errores Encontrados

En esta seccion tambien encontramos el metodo main que permitira garantizar laejecucion del analizador lexico y sintactico

Figura 9 Metodo Main

Declaracion de sımbolos terminales y no terminalesSe declaran dos teminales el uno un entero y el otro final y dos no terminales el unode tipo object imprime y el otro de tipo string codigo

Figura 10 Terminales y No terminales

Seccion de la gramatica

8

Las gramaticas sirven para armar las expresiones aceptadas en el compilador Todos losterminos no terminales deben tener su gramatica declarada para determinar su valorEl codigo Java que se requiera usar debe ser colocado entre codigo La gramatica propuesta para este proyecto debe seguir la siguiente estructura

bull ENTERO FINAL

Ejemplo

bull 12324 convertir

En la imagen que veran a continuacion indico la gramatica en donde se vera la formaque tendra la sentencia para realizar la conversion de decimal a binario declarandopara ellos los terminos terminales de acuerdo a la forma que el analizador sintacticoaceptara

Figura 11 Metodo para convertir

3 ResultadosPara poder realizar las conversiones con nuestro compilador vamos a tener un archivo

txt en el cual este el numero a convertir con el siguiente formato

(numero) Operador

Por lo tanto si el numero al que queremos transformar a binario es el 400 lo vamos aguardar en el txt para que el compilador pueda leer y convertir al numero deseado

Ejemplos

Entrada 400 convertir

Salida RESULTADO BINARIO 110010000

Si se ingresa de forma incorrecta nos puede presentar las siguientes salidas

Entrada convertir

9

Salida Error con la palabra reservada convertir o Error falta ingresar entero a con-vertir

Entrada 34 vertir

Salida

bull El caracter ingresado no es valido (v)posicion(0 5)bull El caracter ingresado no es valido (e)posicion(0 6)bull El caracter ingresado no es valido (r)posicion(0 7)bull El caracter ingresado no es valido (t)posicion(0 8)bull El caracter ingresado no es valido (i)posicion(0 9)bull El caracter ingresado no es valido (r)posicion(0 10)bull Falta Ingresar el operador convertir

Entrada 27 convertirdd

Salida

bull RESULTADO BINARIO 11011bull El caracter ingresado no es valido (d)posicion(0 12)bull El caracter ingresado no es valido (d)posicion(0 13)

La siguiente figura muestra el archivo txt en el cual se ingresa el numero a convertir

Figura 12 Archivo texto

10

Y finalmente presentamos la salida por pantalla de nuestro compilador

Figura 13 Resultado de la conversion

Para una mejor comprension se puede descargar el codigo del compilador desde el reposi-torio de google code en el siguiente enlace httpscodegooglecompconversor-enteros-binariossourcebrowsesvn2Ftrunk2FConvertirEnterosBinarios

11

E Bibliografıa1 Sistemas Inteligentes en Ingenierıa Civıl ldquoIntroduccion a las Redes Neuronales Artifi-

cialesrdquo [En lınea] Disponible en httpoptimizacionheuristicablogsupvesfiles201304IntroducciC3B3n-Redes-Neuronales-ArtificialesMFMpdf

2 Introduccion a Las Redes Neuronales (Neurales) CO-6612 ldquoAcerca de la Funcion de Ac-tivacionrdquo [En lınea] Disponible en httpprofusbvemvillasaredesIntroduccion-vlpdf

3 Introduccion a Las Redes Neuronales Artificiales ldquoFunciones de Activacion y de Salidardquo[En lınea] Disponible en httphugo-inccomRNAUnidad20116html

12

  • Compiladores
  • Descripcioacuten del Problema
  • Autoacutemata del Compilador
  • Compilador
    • Analizador Lexico
    • Analizador Sintaacutectico
    • Resultados
      • Bibliografiacutea

D Compilador

1 Analizador LexicoJFlex es un generador de analizador lexico para Java esta disenado para trabajar junto

con el generador de analizador LALR CUP Tambien se puede utilizar junto con otros gene-radores de analizadores sintacticos como antlr o como una herramienta independiente[2]Este generador toma una cadena de caracteres como entrada y lo convierte en una secuenciade tokens consta de 3 partes principales en su estructura que son opciones y declaracionescodigo de usuario y reglas lexicas

Opciones y declaraciones En esta seccion van los paquetes que se van a utilizaraquı se declaran las directivas y macros se indica el nombre de la clase en este casoAnalizadorlexico se habilita line y column para obtener la lınea y columna de laposicion actual del compilador y cup para realizar la integracion con el archivo cup enesta seccion van las siguientes lıneas de codigo

bull package ejemplocup Esto nos indica el paquete en el cual nuestra clase seencuentrabull import javacupruntime Esta importacion permitira hacer la implementacion

con cupbull import javaioReader Io Reader nos permitira leer nuestro archivo en el que

estara el numero a convertirbull class AnalizadorLexico Nombre de nuestra clase javabull line Indica la posicion de la lıneabull column Indica la posicion de la columnabull cup Nos permitira realizar la compatibilidad con Cup

Figura 2 Opciones y Declaraciones

4

Codigo de usuario En esta seccion van las directivas o especificaciones para obtenerla salida deseada Tambien se encuentra aqui los metodos para encontrar los tokensdeseados

Estos 2 metodos van a permitir trabajar con la clase symbol la cual sera de ayudapara que al momento de analizar la expresion nos devuelva los tokens encontrados enla misma

Figura 3 Metodos

En esta seccion especificamos nuestro codigo creando tres variables la variable salto queindica que se ignorara los saltos de lınea retorno de carro o salto de linea y retorno decarro la variable espacio que indica que se ignora lo declarado en la variable anterioro tabulador y fin de linea y por ultimo una variable entero donde vamos a aceptarenteros del 0 al 9 y todas sus combinaciones

Figura 4 Codigo de Usuario

Reglas lexicas En esta seccion del archivo JFlex es donde se definen las reglas paraobtener los tokens de la cadena que se esta leyendoDonde

bull convertir return symbol(symFINALyylineyycolumn) Es el operadorque me permitira hacer la transformacion de un entero decimal a binario a esteToken se lo llamara FINALbull Entero return symbol(symENTERO new Integer(yytext())yylineyycolumn)

Me indica que se va a ingresar un entero al cual lo vamos a transformor el nombrepara este token es el de ENTERO

En la imagen siguiente se puede ver lo que se ha explicado

5

Figura 5 Reglas lexicas

Aquı tambien encontramos el siguiente codigo que nos lanzara informacion acercade la posicion de algun error encontrado en caso de haberlo

Figura 6 Reglas lexicas - captura errores

2 Analizador SintacticoLuego de realizar el analizador lexico se realiza el analizador sintactico para el cual vamos

a emplear la libreria CUP Cup esta escrito en Java utiliza especificaciones incluyendo codigoJava embebido y produce programas de analisis que se implementan en Java Nuestro archivocup esta conformado por [3]

Definicion de paquete y sentencias import

bull package ejemplocup Esto nos indica el paquete en el cual nuestra clase seencuentrabull import javacupruntime Esta importacion permitira hacer la implementa-

cion con cupbull import javaioReader Io Reader nos permitira leer nuestro archivo en el que

estara el numero a convertir

Figura 7 Paquetes e importaciones

6

Seccion del parser code aquı estaran los metodos que nos permitiran capturar loserrores encontrados los mismos que los describiremos a continuacion

bull report error Este metodo recibe un mensaje de tipo string y info de tipo objectAquı se crea un objeto m de tipo StringBuilder a la cual se la inciara con el valorde Error luego creo un objeto de tipo Symbol que se lo denomino s el cual meservira para econtrar la fila y la columna donde se muestre el errorEl metodoString var=infotoString()+String[] varres=varsplit(rdquordquo)if (IntegerparseInt(varres[1])==symEOF) Systemerrprintln(rdquoFalta Ingresar el operador convertir rdquo) elseif (IntegerparseInt(varres[1])==symFINAL) Systemerrprintln(Error con la palabra reservadaconvertir o Error falta ingresar entero a convertirrdquo)mappend(rdquo -message) Systemerrprintln(m) Me permitira primero crear una variable de tipo String a que le denominamosvar luego en el paso posteior se crea un arreglo de cadenas en donde se va a irguardando las variables ingresadasLuego pregunta si la posicion 1 del arreglo es igual al token de Fin de archivvosi ese fuera el caso me arroja el mensajeFalta ingresar el operador convertirDe darse el caso contrario ahı quiere decir que el arreglo de cadenas de posicion 1sea igual al token FINAL que hace referencia al operador Convertir del proyectose emite el mensaje Error ingresar convertirbull report fatal error Este metodo funcionara en caso que se encuentre un error

en el cual el sistema no pueda recuperarse lanzando un mensaje de informacion

7

Figura 8 Metodos de Errores Encontrados

En esta seccion tambien encontramos el metodo main que permitira garantizar laejecucion del analizador lexico y sintactico

Figura 9 Metodo Main

Declaracion de sımbolos terminales y no terminalesSe declaran dos teminales el uno un entero y el otro final y dos no terminales el unode tipo object imprime y el otro de tipo string codigo

Figura 10 Terminales y No terminales

Seccion de la gramatica

8

Las gramaticas sirven para armar las expresiones aceptadas en el compilador Todos losterminos no terminales deben tener su gramatica declarada para determinar su valorEl codigo Java que se requiera usar debe ser colocado entre codigo La gramatica propuesta para este proyecto debe seguir la siguiente estructura

bull ENTERO FINAL

Ejemplo

bull 12324 convertir

En la imagen que veran a continuacion indico la gramatica en donde se vera la formaque tendra la sentencia para realizar la conversion de decimal a binario declarandopara ellos los terminos terminales de acuerdo a la forma que el analizador sintacticoaceptara

Figura 11 Metodo para convertir

3 ResultadosPara poder realizar las conversiones con nuestro compilador vamos a tener un archivo

txt en el cual este el numero a convertir con el siguiente formato

(numero) Operador

Por lo tanto si el numero al que queremos transformar a binario es el 400 lo vamos aguardar en el txt para que el compilador pueda leer y convertir al numero deseado

Ejemplos

Entrada 400 convertir

Salida RESULTADO BINARIO 110010000

Si se ingresa de forma incorrecta nos puede presentar las siguientes salidas

Entrada convertir

9

Salida Error con la palabra reservada convertir o Error falta ingresar entero a con-vertir

Entrada 34 vertir

Salida

bull El caracter ingresado no es valido (v)posicion(0 5)bull El caracter ingresado no es valido (e)posicion(0 6)bull El caracter ingresado no es valido (r)posicion(0 7)bull El caracter ingresado no es valido (t)posicion(0 8)bull El caracter ingresado no es valido (i)posicion(0 9)bull El caracter ingresado no es valido (r)posicion(0 10)bull Falta Ingresar el operador convertir

Entrada 27 convertirdd

Salida

bull RESULTADO BINARIO 11011bull El caracter ingresado no es valido (d)posicion(0 12)bull El caracter ingresado no es valido (d)posicion(0 13)

La siguiente figura muestra el archivo txt en el cual se ingresa el numero a convertir

Figura 12 Archivo texto

10

Y finalmente presentamos la salida por pantalla de nuestro compilador

Figura 13 Resultado de la conversion

Para una mejor comprension se puede descargar el codigo del compilador desde el reposi-torio de google code en el siguiente enlace httpscodegooglecompconversor-enteros-binariossourcebrowsesvn2Ftrunk2FConvertirEnterosBinarios

11

E Bibliografıa1 Sistemas Inteligentes en Ingenierıa Civıl ldquoIntroduccion a las Redes Neuronales Artifi-

cialesrdquo [En lınea] Disponible en httpoptimizacionheuristicablogsupvesfiles201304IntroducciC3B3n-Redes-Neuronales-ArtificialesMFMpdf

2 Introduccion a Las Redes Neuronales (Neurales) CO-6612 ldquoAcerca de la Funcion de Ac-tivacionrdquo [En lınea] Disponible en httpprofusbvemvillasaredesIntroduccion-vlpdf

3 Introduccion a Las Redes Neuronales Artificiales ldquoFunciones de Activacion y de Salidardquo[En lınea] Disponible en httphugo-inccomRNAUnidad20116html

12

  • Compiladores
  • Descripcioacuten del Problema
  • Autoacutemata del Compilador
  • Compilador
    • Analizador Lexico
    • Analizador Sintaacutectico
    • Resultados
      • Bibliografiacutea

Codigo de usuario En esta seccion van las directivas o especificaciones para obtenerla salida deseada Tambien se encuentra aqui los metodos para encontrar los tokensdeseados

Estos 2 metodos van a permitir trabajar con la clase symbol la cual sera de ayudapara que al momento de analizar la expresion nos devuelva los tokens encontrados enla misma

Figura 3 Metodos

En esta seccion especificamos nuestro codigo creando tres variables la variable salto queindica que se ignorara los saltos de lınea retorno de carro o salto de linea y retorno decarro la variable espacio que indica que se ignora lo declarado en la variable anterioro tabulador y fin de linea y por ultimo una variable entero donde vamos a aceptarenteros del 0 al 9 y todas sus combinaciones

Figura 4 Codigo de Usuario

Reglas lexicas En esta seccion del archivo JFlex es donde se definen las reglas paraobtener los tokens de la cadena que se esta leyendoDonde

bull convertir return symbol(symFINALyylineyycolumn) Es el operadorque me permitira hacer la transformacion de un entero decimal a binario a esteToken se lo llamara FINALbull Entero return symbol(symENTERO new Integer(yytext())yylineyycolumn)

Me indica que se va a ingresar un entero al cual lo vamos a transformor el nombrepara este token es el de ENTERO

En la imagen siguiente se puede ver lo que se ha explicado

5

Figura 5 Reglas lexicas

Aquı tambien encontramos el siguiente codigo que nos lanzara informacion acercade la posicion de algun error encontrado en caso de haberlo

Figura 6 Reglas lexicas - captura errores

2 Analizador SintacticoLuego de realizar el analizador lexico se realiza el analizador sintactico para el cual vamos

a emplear la libreria CUP Cup esta escrito en Java utiliza especificaciones incluyendo codigoJava embebido y produce programas de analisis que se implementan en Java Nuestro archivocup esta conformado por [3]

Definicion de paquete y sentencias import

bull package ejemplocup Esto nos indica el paquete en el cual nuestra clase seencuentrabull import javacupruntime Esta importacion permitira hacer la implementa-

cion con cupbull import javaioReader Io Reader nos permitira leer nuestro archivo en el que

estara el numero a convertir

Figura 7 Paquetes e importaciones

6

Seccion del parser code aquı estaran los metodos que nos permitiran capturar loserrores encontrados los mismos que los describiremos a continuacion

bull report error Este metodo recibe un mensaje de tipo string y info de tipo objectAquı se crea un objeto m de tipo StringBuilder a la cual se la inciara con el valorde Error luego creo un objeto de tipo Symbol que se lo denomino s el cual meservira para econtrar la fila y la columna donde se muestre el errorEl metodoString var=infotoString()+String[] varres=varsplit(rdquordquo)if (IntegerparseInt(varres[1])==symEOF) Systemerrprintln(rdquoFalta Ingresar el operador convertir rdquo) elseif (IntegerparseInt(varres[1])==symFINAL) Systemerrprintln(Error con la palabra reservadaconvertir o Error falta ingresar entero a convertirrdquo)mappend(rdquo -message) Systemerrprintln(m) Me permitira primero crear una variable de tipo String a que le denominamosvar luego en el paso posteior se crea un arreglo de cadenas en donde se va a irguardando las variables ingresadasLuego pregunta si la posicion 1 del arreglo es igual al token de Fin de archivvosi ese fuera el caso me arroja el mensajeFalta ingresar el operador convertirDe darse el caso contrario ahı quiere decir que el arreglo de cadenas de posicion 1sea igual al token FINAL que hace referencia al operador Convertir del proyectose emite el mensaje Error ingresar convertirbull report fatal error Este metodo funcionara en caso que se encuentre un error

en el cual el sistema no pueda recuperarse lanzando un mensaje de informacion

7

Figura 8 Metodos de Errores Encontrados

En esta seccion tambien encontramos el metodo main que permitira garantizar laejecucion del analizador lexico y sintactico

Figura 9 Metodo Main

Declaracion de sımbolos terminales y no terminalesSe declaran dos teminales el uno un entero y el otro final y dos no terminales el unode tipo object imprime y el otro de tipo string codigo

Figura 10 Terminales y No terminales

Seccion de la gramatica

8

Las gramaticas sirven para armar las expresiones aceptadas en el compilador Todos losterminos no terminales deben tener su gramatica declarada para determinar su valorEl codigo Java que se requiera usar debe ser colocado entre codigo La gramatica propuesta para este proyecto debe seguir la siguiente estructura

bull ENTERO FINAL

Ejemplo

bull 12324 convertir

En la imagen que veran a continuacion indico la gramatica en donde se vera la formaque tendra la sentencia para realizar la conversion de decimal a binario declarandopara ellos los terminos terminales de acuerdo a la forma que el analizador sintacticoaceptara

Figura 11 Metodo para convertir

3 ResultadosPara poder realizar las conversiones con nuestro compilador vamos a tener un archivo

txt en el cual este el numero a convertir con el siguiente formato

(numero) Operador

Por lo tanto si el numero al que queremos transformar a binario es el 400 lo vamos aguardar en el txt para que el compilador pueda leer y convertir al numero deseado

Ejemplos

Entrada 400 convertir

Salida RESULTADO BINARIO 110010000

Si se ingresa de forma incorrecta nos puede presentar las siguientes salidas

Entrada convertir

9

Salida Error con la palabra reservada convertir o Error falta ingresar entero a con-vertir

Entrada 34 vertir

Salida

bull El caracter ingresado no es valido (v)posicion(0 5)bull El caracter ingresado no es valido (e)posicion(0 6)bull El caracter ingresado no es valido (r)posicion(0 7)bull El caracter ingresado no es valido (t)posicion(0 8)bull El caracter ingresado no es valido (i)posicion(0 9)bull El caracter ingresado no es valido (r)posicion(0 10)bull Falta Ingresar el operador convertir

Entrada 27 convertirdd

Salida

bull RESULTADO BINARIO 11011bull El caracter ingresado no es valido (d)posicion(0 12)bull El caracter ingresado no es valido (d)posicion(0 13)

La siguiente figura muestra el archivo txt en el cual se ingresa el numero a convertir

Figura 12 Archivo texto

10

Y finalmente presentamos la salida por pantalla de nuestro compilador

Figura 13 Resultado de la conversion

Para una mejor comprension se puede descargar el codigo del compilador desde el reposi-torio de google code en el siguiente enlace httpscodegooglecompconversor-enteros-binariossourcebrowsesvn2Ftrunk2FConvertirEnterosBinarios

11

E Bibliografıa1 Sistemas Inteligentes en Ingenierıa Civıl ldquoIntroduccion a las Redes Neuronales Artifi-

cialesrdquo [En lınea] Disponible en httpoptimizacionheuristicablogsupvesfiles201304IntroducciC3B3n-Redes-Neuronales-ArtificialesMFMpdf

2 Introduccion a Las Redes Neuronales (Neurales) CO-6612 ldquoAcerca de la Funcion de Ac-tivacionrdquo [En lınea] Disponible en httpprofusbvemvillasaredesIntroduccion-vlpdf

3 Introduccion a Las Redes Neuronales Artificiales ldquoFunciones de Activacion y de Salidardquo[En lınea] Disponible en httphugo-inccomRNAUnidad20116html

12

  • Compiladores
  • Descripcioacuten del Problema
  • Autoacutemata del Compilador
  • Compilador
    • Analizador Lexico
    • Analizador Sintaacutectico
    • Resultados
      • Bibliografiacutea

Figura 5 Reglas lexicas

Aquı tambien encontramos el siguiente codigo que nos lanzara informacion acercade la posicion de algun error encontrado en caso de haberlo

Figura 6 Reglas lexicas - captura errores

2 Analizador SintacticoLuego de realizar el analizador lexico se realiza el analizador sintactico para el cual vamos

a emplear la libreria CUP Cup esta escrito en Java utiliza especificaciones incluyendo codigoJava embebido y produce programas de analisis que se implementan en Java Nuestro archivocup esta conformado por [3]

Definicion de paquete y sentencias import

bull package ejemplocup Esto nos indica el paquete en el cual nuestra clase seencuentrabull import javacupruntime Esta importacion permitira hacer la implementa-

cion con cupbull import javaioReader Io Reader nos permitira leer nuestro archivo en el que

estara el numero a convertir

Figura 7 Paquetes e importaciones

6

Seccion del parser code aquı estaran los metodos que nos permitiran capturar loserrores encontrados los mismos que los describiremos a continuacion

bull report error Este metodo recibe un mensaje de tipo string y info de tipo objectAquı se crea un objeto m de tipo StringBuilder a la cual se la inciara con el valorde Error luego creo un objeto de tipo Symbol que se lo denomino s el cual meservira para econtrar la fila y la columna donde se muestre el errorEl metodoString var=infotoString()+String[] varres=varsplit(rdquordquo)if (IntegerparseInt(varres[1])==symEOF) Systemerrprintln(rdquoFalta Ingresar el operador convertir rdquo) elseif (IntegerparseInt(varres[1])==symFINAL) Systemerrprintln(Error con la palabra reservadaconvertir o Error falta ingresar entero a convertirrdquo)mappend(rdquo -message) Systemerrprintln(m) Me permitira primero crear una variable de tipo String a que le denominamosvar luego en el paso posteior se crea un arreglo de cadenas en donde se va a irguardando las variables ingresadasLuego pregunta si la posicion 1 del arreglo es igual al token de Fin de archivvosi ese fuera el caso me arroja el mensajeFalta ingresar el operador convertirDe darse el caso contrario ahı quiere decir que el arreglo de cadenas de posicion 1sea igual al token FINAL que hace referencia al operador Convertir del proyectose emite el mensaje Error ingresar convertirbull report fatal error Este metodo funcionara en caso que se encuentre un error

en el cual el sistema no pueda recuperarse lanzando un mensaje de informacion

7

Figura 8 Metodos de Errores Encontrados

En esta seccion tambien encontramos el metodo main que permitira garantizar laejecucion del analizador lexico y sintactico

Figura 9 Metodo Main

Declaracion de sımbolos terminales y no terminalesSe declaran dos teminales el uno un entero y el otro final y dos no terminales el unode tipo object imprime y el otro de tipo string codigo

Figura 10 Terminales y No terminales

Seccion de la gramatica

8

Las gramaticas sirven para armar las expresiones aceptadas en el compilador Todos losterminos no terminales deben tener su gramatica declarada para determinar su valorEl codigo Java que se requiera usar debe ser colocado entre codigo La gramatica propuesta para este proyecto debe seguir la siguiente estructura

bull ENTERO FINAL

Ejemplo

bull 12324 convertir

En la imagen que veran a continuacion indico la gramatica en donde se vera la formaque tendra la sentencia para realizar la conversion de decimal a binario declarandopara ellos los terminos terminales de acuerdo a la forma que el analizador sintacticoaceptara

Figura 11 Metodo para convertir

3 ResultadosPara poder realizar las conversiones con nuestro compilador vamos a tener un archivo

txt en el cual este el numero a convertir con el siguiente formato

(numero) Operador

Por lo tanto si el numero al que queremos transformar a binario es el 400 lo vamos aguardar en el txt para que el compilador pueda leer y convertir al numero deseado

Ejemplos

Entrada 400 convertir

Salida RESULTADO BINARIO 110010000

Si se ingresa de forma incorrecta nos puede presentar las siguientes salidas

Entrada convertir

9

Salida Error con la palabra reservada convertir o Error falta ingresar entero a con-vertir

Entrada 34 vertir

Salida

bull El caracter ingresado no es valido (v)posicion(0 5)bull El caracter ingresado no es valido (e)posicion(0 6)bull El caracter ingresado no es valido (r)posicion(0 7)bull El caracter ingresado no es valido (t)posicion(0 8)bull El caracter ingresado no es valido (i)posicion(0 9)bull El caracter ingresado no es valido (r)posicion(0 10)bull Falta Ingresar el operador convertir

Entrada 27 convertirdd

Salida

bull RESULTADO BINARIO 11011bull El caracter ingresado no es valido (d)posicion(0 12)bull El caracter ingresado no es valido (d)posicion(0 13)

La siguiente figura muestra el archivo txt en el cual se ingresa el numero a convertir

Figura 12 Archivo texto

10

Y finalmente presentamos la salida por pantalla de nuestro compilador

Figura 13 Resultado de la conversion

Para una mejor comprension se puede descargar el codigo del compilador desde el reposi-torio de google code en el siguiente enlace httpscodegooglecompconversor-enteros-binariossourcebrowsesvn2Ftrunk2FConvertirEnterosBinarios

11

E Bibliografıa1 Sistemas Inteligentes en Ingenierıa Civıl ldquoIntroduccion a las Redes Neuronales Artifi-

cialesrdquo [En lınea] Disponible en httpoptimizacionheuristicablogsupvesfiles201304IntroducciC3B3n-Redes-Neuronales-ArtificialesMFMpdf

2 Introduccion a Las Redes Neuronales (Neurales) CO-6612 ldquoAcerca de la Funcion de Ac-tivacionrdquo [En lınea] Disponible en httpprofusbvemvillasaredesIntroduccion-vlpdf

3 Introduccion a Las Redes Neuronales Artificiales ldquoFunciones de Activacion y de Salidardquo[En lınea] Disponible en httphugo-inccomRNAUnidad20116html

12

  • Compiladores
  • Descripcioacuten del Problema
  • Autoacutemata del Compilador
  • Compilador
    • Analizador Lexico
    • Analizador Sintaacutectico
    • Resultados
      • Bibliografiacutea

Seccion del parser code aquı estaran los metodos que nos permitiran capturar loserrores encontrados los mismos que los describiremos a continuacion

bull report error Este metodo recibe un mensaje de tipo string y info de tipo objectAquı se crea un objeto m de tipo StringBuilder a la cual se la inciara con el valorde Error luego creo un objeto de tipo Symbol que se lo denomino s el cual meservira para econtrar la fila y la columna donde se muestre el errorEl metodoString var=infotoString()+String[] varres=varsplit(rdquordquo)if (IntegerparseInt(varres[1])==symEOF) Systemerrprintln(rdquoFalta Ingresar el operador convertir rdquo) elseif (IntegerparseInt(varres[1])==symFINAL) Systemerrprintln(Error con la palabra reservadaconvertir o Error falta ingresar entero a convertirrdquo)mappend(rdquo -message) Systemerrprintln(m) Me permitira primero crear una variable de tipo String a que le denominamosvar luego en el paso posteior se crea un arreglo de cadenas en donde se va a irguardando las variables ingresadasLuego pregunta si la posicion 1 del arreglo es igual al token de Fin de archivvosi ese fuera el caso me arroja el mensajeFalta ingresar el operador convertirDe darse el caso contrario ahı quiere decir que el arreglo de cadenas de posicion 1sea igual al token FINAL que hace referencia al operador Convertir del proyectose emite el mensaje Error ingresar convertirbull report fatal error Este metodo funcionara en caso que se encuentre un error

en el cual el sistema no pueda recuperarse lanzando un mensaje de informacion

7

Figura 8 Metodos de Errores Encontrados

En esta seccion tambien encontramos el metodo main que permitira garantizar laejecucion del analizador lexico y sintactico

Figura 9 Metodo Main

Declaracion de sımbolos terminales y no terminalesSe declaran dos teminales el uno un entero y el otro final y dos no terminales el unode tipo object imprime y el otro de tipo string codigo

Figura 10 Terminales y No terminales

Seccion de la gramatica

8

Las gramaticas sirven para armar las expresiones aceptadas en el compilador Todos losterminos no terminales deben tener su gramatica declarada para determinar su valorEl codigo Java que se requiera usar debe ser colocado entre codigo La gramatica propuesta para este proyecto debe seguir la siguiente estructura

bull ENTERO FINAL

Ejemplo

bull 12324 convertir

En la imagen que veran a continuacion indico la gramatica en donde se vera la formaque tendra la sentencia para realizar la conversion de decimal a binario declarandopara ellos los terminos terminales de acuerdo a la forma que el analizador sintacticoaceptara

Figura 11 Metodo para convertir

3 ResultadosPara poder realizar las conversiones con nuestro compilador vamos a tener un archivo

txt en el cual este el numero a convertir con el siguiente formato

(numero) Operador

Por lo tanto si el numero al que queremos transformar a binario es el 400 lo vamos aguardar en el txt para que el compilador pueda leer y convertir al numero deseado

Ejemplos

Entrada 400 convertir

Salida RESULTADO BINARIO 110010000

Si se ingresa de forma incorrecta nos puede presentar las siguientes salidas

Entrada convertir

9

Salida Error con la palabra reservada convertir o Error falta ingresar entero a con-vertir

Entrada 34 vertir

Salida

bull El caracter ingresado no es valido (v)posicion(0 5)bull El caracter ingresado no es valido (e)posicion(0 6)bull El caracter ingresado no es valido (r)posicion(0 7)bull El caracter ingresado no es valido (t)posicion(0 8)bull El caracter ingresado no es valido (i)posicion(0 9)bull El caracter ingresado no es valido (r)posicion(0 10)bull Falta Ingresar el operador convertir

Entrada 27 convertirdd

Salida

bull RESULTADO BINARIO 11011bull El caracter ingresado no es valido (d)posicion(0 12)bull El caracter ingresado no es valido (d)posicion(0 13)

La siguiente figura muestra el archivo txt en el cual se ingresa el numero a convertir

Figura 12 Archivo texto

10

Y finalmente presentamos la salida por pantalla de nuestro compilador

Figura 13 Resultado de la conversion

Para una mejor comprension se puede descargar el codigo del compilador desde el reposi-torio de google code en el siguiente enlace httpscodegooglecompconversor-enteros-binariossourcebrowsesvn2Ftrunk2FConvertirEnterosBinarios

11

E Bibliografıa1 Sistemas Inteligentes en Ingenierıa Civıl ldquoIntroduccion a las Redes Neuronales Artifi-

cialesrdquo [En lınea] Disponible en httpoptimizacionheuristicablogsupvesfiles201304IntroducciC3B3n-Redes-Neuronales-ArtificialesMFMpdf

2 Introduccion a Las Redes Neuronales (Neurales) CO-6612 ldquoAcerca de la Funcion de Ac-tivacionrdquo [En lınea] Disponible en httpprofusbvemvillasaredesIntroduccion-vlpdf

3 Introduccion a Las Redes Neuronales Artificiales ldquoFunciones de Activacion y de Salidardquo[En lınea] Disponible en httphugo-inccomRNAUnidad20116html

12

  • Compiladores
  • Descripcioacuten del Problema
  • Autoacutemata del Compilador
  • Compilador
    • Analizador Lexico
    • Analizador Sintaacutectico
    • Resultados
      • Bibliografiacutea

Figura 8 Metodos de Errores Encontrados

En esta seccion tambien encontramos el metodo main que permitira garantizar laejecucion del analizador lexico y sintactico

Figura 9 Metodo Main

Declaracion de sımbolos terminales y no terminalesSe declaran dos teminales el uno un entero y el otro final y dos no terminales el unode tipo object imprime y el otro de tipo string codigo

Figura 10 Terminales y No terminales

Seccion de la gramatica

8

Las gramaticas sirven para armar las expresiones aceptadas en el compilador Todos losterminos no terminales deben tener su gramatica declarada para determinar su valorEl codigo Java que se requiera usar debe ser colocado entre codigo La gramatica propuesta para este proyecto debe seguir la siguiente estructura

bull ENTERO FINAL

Ejemplo

bull 12324 convertir

En la imagen que veran a continuacion indico la gramatica en donde se vera la formaque tendra la sentencia para realizar la conversion de decimal a binario declarandopara ellos los terminos terminales de acuerdo a la forma que el analizador sintacticoaceptara

Figura 11 Metodo para convertir

3 ResultadosPara poder realizar las conversiones con nuestro compilador vamos a tener un archivo

txt en el cual este el numero a convertir con el siguiente formato

(numero) Operador

Por lo tanto si el numero al que queremos transformar a binario es el 400 lo vamos aguardar en el txt para que el compilador pueda leer y convertir al numero deseado

Ejemplos

Entrada 400 convertir

Salida RESULTADO BINARIO 110010000

Si se ingresa de forma incorrecta nos puede presentar las siguientes salidas

Entrada convertir

9

Salida Error con la palabra reservada convertir o Error falta ingresar entero a con-vertir

Entrada 34 vertir

Salida

bull El caracter ingresado no es valido (v)posicion(0 5)bull El caracter ingresado no es valido (e)posicion(0 6)bull El caracter ingresado no es valido (r)posicion(0 7)bull El caracter ingresado no es valido (t)posicion(0 8)bull El caracter ingresado no es valido (i)posicion(0 9)bull El caracter ingresado no es valido (r)posicion(0 10)bull Falta Ingresar el operador convertir

Entrada 27 convertirdd

Salida

bull RESULTADO BINARIO 11011bull El caracter ingresado no es valido (d)posicion(0 12)bull El caracter ingresado no es valido (d)posicion(0 13)

La siguiente figura muestra el archivo txt en el cual se ingresa el numero a convertir

Figura 12 Archivo texto

10

Y finalmente presentamos la salida por pantalla de nuestro compilador

Figura 13 Resultado de la conversion

Para una mejor comprension se puede descargar el codigo del compilador desde el reposi-torio de google code en el siguiente enlace httpscodegooglecompconversor-enteros-binariossourcebrowsesvn2Ftrunk2FConvertirEnterosBinarios

11

E Bibliografıa1 Sistemas Inteligentes en Ingenierıa Civıl ldquoIntroduccion a las Redes Neuronales Artifi-

cialesrdquo [En lınea] Disponible en httpoptimizacionheuristicablogsupvesfiles201304IntroducciC3B3n-Redes-Neuronales-ArtificialesMFMpdf

2 Introduccion a Las Redes Neuronales (Neurales) CO-6612 ldquoAcerca de la Funcion de Ac-tivacionrdquo [En lınea] Disponible en httpprofusbvemvillasaredesIntroduccion-vlpdf

3 Introduccion a Las Redes Neuronales Artificiales ldquoFunciones de Activacion y de Salidardquo[En lınea] Disponible en httphugo-inccomRNAUnidad20116html

12

  • Compiladores
  • Descripcioacuten del Problema
  • Autoacutemata del Compilador
  • Compilador
    • Analizador Lexico
    • Analizador Sintaacutectico
    • Resultados
      • Bibliografiacutea

Las gramaticas sirven para armar las expresiones aceptadas en el compilador Todos losterminos no terminales deben tener su gramatica declarada para determinar su valorEl codigo Java que se requiera usar debe ser colocado entre codigo La gramatica propuesta para este proyecto debe seguir la siguiente estructura

bull ENTERO FINAL

Ejemplo

bull 12324 convertir

En la imagen que veran a continuacion indico la gramatica en donde se vera la formaque tendra la sentencia para realizar la conversion de decimal a binario declarandopara ellos los terminos terminales de acuerdo a la forma que el analizador sintacticoaceptara

Figura 11 Metodo para convertir

3 ResultadosPara poder realizar las conversiones con nuestro compilador vamos a tener un archivo

txt en el cual este el numero a convertir con el siguiente formato

(numero) Operador

Por lo tanto si el numero al que queremos transformar a binario es el 400 lo vamos aguardar en el txt para que el compilador pueda leer y convertir al numero deseado

Ejemplos

Entrada 400 convertir

Salida RESULTADO BINARIO 110010000

Si se ingresa de forma incorrecta nos puede presentar las siguientes salidas

Entrada convertir

9

Salida Error con la palabra reservada convertir o Error falta ingresar entero a con-vertir

Entrada 34 vertir

Salida

bull El caracter ingresado no es valido (v)posicion(0 5)bull El caracter ingresado no es valido (e)posicion(0 6)bull El caracter ingresado no es valido (r)posicion(0 7)bull El caracter ingresado no es valido (t)posicion(0 8)bull El caracter ingresado no es valido (i)posicion(0 9)bull El caracter ingresado no es valido (r)posicion(0 10)bull Falta Ingresar el operador convertir

Entrada 27 convertirdd

Salida

bull RESULTADO BINARIO 11011bull El caracter ingresado no es valido (d)posicion(0 12)bull El caracter ingresado no es valido (d)posicion(0 13)

La siguiente figura muestra el archivo txt en el cual se ingresa el numero a convertir

Figura 12 Archivo texto

10

Y finalmente presentamos la salida por pantalla de nuestro compilador

Figura 13 Resultado de la conversion

Para una mejor comprension se puede descargar el codigo del compilador desde el reposi-torio de google code en el siguiente enlace httpscodegooglecompconversor-enteros-binariossourcebrowsesvn2Ftrunk2FConvertirEnterosBinarios

11

E Bibliografıa1 Sistemas Inteligentes en Ingenierıa Civıl ldquoIntroduccion a las Redes Neuronales Artifi-

cialesrdquo [En lınea] Disponible en httpoptimizacionheuristicablogsupvesfiles201304IntroducciC3B3n-Redes-Neuronales-ArtificialesMFMpdf

2 Introduccion a Las Redes Neuronales (Neurales) CO-6612 ldquoAcerca de la Funcion de Ac-tivacionrdquo [En lınea] Disponible en httpprofusbvemvillasaredesIntroduccion-vlpdf

3 Introduccion a Las Redes Neuronales Artificiales ldquoFunciones de Activacion y de Salidardquo[En lınea] Disponible en httphugo-inccomRNAUnidad20116html

12

  • Compiladores
  • Descripcioacuten del Problema
  • Autoacutemata del Compilador
  • Compilador
    • Analizador Lexico
    • Analizador Sintaacutectico
    • Resultados
      • Bibliografiacutea

Salida Error con la palabra reservada convertir o Error falta ingresar entero a con-vertir

Entrada 34 vertir

Salida

bull El caracter ingresado no es valido (v)posicion(0 5)bull El caracter ingresado no es valido (e)posicion(0 6)bull El caracter ingresado no es valido (r)posicion(0 7)bull El caracter ingresado no es valido (t)posicion(0 8)bull El caracter ingresado no es valido (i)posicion(0 9)bull El caracter ingresado no es valido (r)posicion(0 10)bull Falta Ingresar el operador convertir

Entrada 27 convertirdd

Salida

bull RESULTADO BINARIO 11011bull El caracter ingresado no es valido (d)posicion(0 12)bull El caracter ingresado no es valido (d)posicion(0 13)

La siguiente figura muestra el archivo txt en el cual se ingresa el numero a convertir

Figura 12 Archivo texto

10

Y finalmente presentamos la salida por pantalla de nuestro compilador

Figura 13 Resultado de la conversion

Para una mejor comprension se puede descargar el codigo del compilador desde el reposi-torio de google code en el siguiente enlace httpscodegooglecompconversor-enteros-binariossourcebrowsesvn2Ftrunk2FConvertirEnterosBinarios

11

E Bibliografıa1 Sistemas Inteligentes en Ingenierıa Civıl ldquoIntroduccion a las Redes Neuronales Artifi-

cialesrdquo [En lınea] Disponible en httpoptimizacionheuristicablogsupvesfiles201304IntroducciC3B3n-Redes-Neuronales-ArtificialesMFMpdf

2 Introduccion a Las Redes Neuronales (Neurales) CO-6612 ldquoAcerca de la Funcion de Ac-tivacionrdquo [En lınea] Disponible en httpprofusbvemvillasaredesIntroduccion-vlpdf

3 Introduccion a Las Redes Neuronales Artificiales ldquoFunciones de Activacion y de Salidardquo[En lınea] Disponible en httphugo-inccomRNAUnidad20116html

12

  • Compiladores
  • Descripcioacuten del Problema
  • Autoacutemata del Compilador
  • Compilador
    • Analizador Lexico
    • Analizador Sintaacutectico
    • Resultados
      • Bibliografiacutea

Y finalmente presentamos la salida por pantalla de nuestro compilador

Figura 13 Resultado de la conversion

Para una mejor comprension se puede descargar el codigo del compilador desde el reposi-torio de google code en el siguiente enlace httpscodegooglecompconversor-enteros-binariossourcebrowsesvn2Ftrunk2FConvertirEnterosBinarios

11

E Bibliografıa1 Sistemas Inteligentes en Ingenierıa Civıl ldquoIntroduccion a las Redes Neuronales Artifi-

cialesrdquo [En lınea] Disponible en httpoptimizacionheuristicablogsupvesfiles201304IntroducciC3B3n-Redes-Neuronales-ArtificialesMFMpdf

2 Introduccion a Las Redes Neuronales (Neurales) CO-6612 ldquoAcerca de la Funcion de Ac-tivacionrdquo [En lınea] Disponible en httpprofusbvemvillasaredesIntroduccion-vlpdf

3 Introduccion a Las Redes Neuronales Artificiales ldquoFunciones de Activacion y de Salidardquo[En lınea] Disponible en httphugo-inccomRNAUnidad20116html

12

  • Compiladores
  • Descripcioacuten del Problema
  • Autoacutemata del Compilador
  • Compilador
    • Analizador Lexico
    • Analizador Sintaacutectico
    • Resultados
      • Bibliografiacutea

E Bibliografıa1 Sistemas Inteligentes en Ingenierıa Civıl ldquoIntroduccion a las Redes Neuronales Artifi-

cialesrdquo [En lınea] Disponible en httpoptimizacionheuristicablogsupvesfiles201304IntroducciC3B3n-Redes-Neuronales-ArtificialesMFMpdf

2 Introduccion a Las Redes Neuronales (Neurales) CO-6612 ldquoAcerca de la Funcion de Ac-tivacionrdquo [En lınea] Disponible en httpprofusbvemvillasaredesIntroduccion-vlpdf

3 Introduccion a Las Redes Neuronales Artificiales ldquoFunciones de Activacion y de Salidardquo[En lınea] Disponible en httphugo-inccomRNAUnidad20116html

12

  • Compiladores
  • Descripcioacuten del Problema
  • Autoacutemata del Compilador
  • Compilador
    • Analizador Lexico
    • Analizador Sintaacutectico
    • Resultados
      • Bibliografiacutea