View
76
Download
0
Category
Preview:
Citation preview
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
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
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
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
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
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
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
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
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
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
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
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
Recommended