1. CIS-IXB-002
UNIVERSIDAD
NACIONAL
DE LOJA
´Area de la Energ´ıa las Industrias y los Recursos Naturales No Renovables
Carrera de Ingenier´ıa en Sistemas
Compilador para convetir n´umeros
cardinales a ordinales en Ingl´es
Tarea- Extra Clase
Noveno B
Autor:
• Yandry Ren´e Ram´ırez Saritama
Docente: Ing. Henry-Paz,
Loja-Ecuador
2015
1
3. A. Introducci´on al desarrollo del Compilador
La construcci´on de un compilador es una de las tareas m´as gratas con las que un
inform´atico puede encontrarse a lo largo de su carrera profesional. Aunque no resulta sen-
sato pensar que una labor tal pueda formar parte de la actividad cotidiana de la mayor´ıa
de estos profesionales, s´ı es cierto que, con cierta frecuencia, suele aparecer la necesidad de
analizar un fichero de texto que contiene informaci´on distribuida seg´un alg´un patr´on re-
conocible: ficheros XML, ficheros de inicializaci´on .ini, ficheros con comandos del sistema
operativo, los propios programas fuente, etc. Es m´as, el concepto de an´alisis de un texto
puede ser ´util para ahorrar trabajo en situaciones que est´an fuera del ´ambito profesional
inform´atico, como por ejemplo la generaci´on de ´ındices anal´ıticos en archivos de texto
escritos con procesadores que no admiten esta opci´on.[1]
Pero a pesar de la indudable utilidad de los conceptos generales relacionados con la
teor´ıa y pr´actica de los an´alisis de textos, el crear un compilador introduce al inform´atico
en un nuevo mundo en el que el control sobre el ordenador es absoluto y le lleva al pa-
roxismo de la omnipotencia sobre la m´aquina. Y es que resulta imprescindible un pleno
conocimiento de todos los conceptos intr´ınsecos al ordenador: dispositivos de E/S, c´odigo
m´aquina utilizado por el microprocesador, comunicaci´on a bajo nivel entre ´este y el resto
de sus perif´ericos, distribuci´on de la memoria, mecanismos de uso de memoria virtual,
etc.[1]
Uno de los principales mecanismos de comunicaci´on entre un ordenador y una persona
viene dado por el env´ıo y recepci´on de mensajes de tipo textual: el usuario escribe una or-
den mediante el teclado, y el ordenador la ejecuta devolviendo como resultado un mensaje
informativo sobre las acciones llevadas a cabo. Aunque la evoluci´on de los ordenadores se
encuentra dirigida actualmente hacia el empleo de novedosas y ergon´omicas interfaces de
usuario (como el rat´on, las pantallas t´actiles, las tabletas gr´aficas, etc.), podemos decir
que casi todas las acciones que el usuario realiza sobre estas interfaces se traducen antes o
despu´es a secuencias de comandos que son ejecutadas como si hubieran sido introducidas
por teclado. Por otro lado, y desde el punto de vista del profesional de la Inform´atica, el
trabajo que ´este realiza sobre el ordenador se encuentra plagado de situaciones en las que
se produce una comunicaci´on textual directa con la m´aquina: utilizaci´on de un int´erprete
de comandos (shell), construcci´on de ficheros de trabajo por lotes, programaci´on mediante
diversos lenguajes, etc. Incluso los procesadores de texto como WordPerfect y MS Word
almacenan los documentos escritos por el usuario mediante una codificaci´on textual es-
tructurada que, cada vez que se abre el documento, es reconocida, recorrida y presentada
en pantalla. [1]
Es importante destacar la velocidad con la que hoy en d´ıa se puede construir un compi-
lador. El primer compilador de Fortran (Formula Translator), por ejemplo, necesit´o para
su implementaci´on el equivalente a 18 a˜nos de trabajo individual (realmente no se tard´o
tanto puesto que el trabajo se desarroll´o en equipo). Hasta que la teor´ıa de aut´omatas
y lenguajes formales no se aplic´o a la creaci´on de traductores, su desarrollo ha estado
plagado de problemas y errores. Sin embargo, hoy d´ıa un compilador b´asico puede ser el
proyecto fin de carrera de cualquier estudiante universitario de Inform´atica. [1]
3
4. 1 . Definici´on de Compilador
Un copilador es el proceso de traducci´on que convierte un programa fuente escrito en
un lenguaje de alto nivel a un programa objeto en c´odigo m´aquina y listo por tanto para
ejecutarse en el ordenador, con poca o ninguna preparaci´on adicional[2]
2 . ¿C´omo surgi´o el problema?
El presente proyecto se enfoca en dar soluci´on a los inconvenientes que se producen
al momento de utilizar los n´umeros ordinales en ingl´es ya que su escritura es similar a la
de los n´umeros cardinales por ende tienden a confundir su escritura y es ah´ı donde nace
el problema pudiendo solucionarlo al mismo realizando un compilador que nos permita
tener los n´umeros ordinales en ingl´es disponibles para su respectivo uso.
Figura 1: N´umeros Cardinales y Ordinales
3 . ¿Qu´e hace el Compilador?
B´asicamente el compilador interpreta y convierte n´umeros cardinales a n´umeros ordi-
nales en ingl´es. Como entrada de datos se ha creado un archivo de texto donde se almacena
los d´ıgitos del 1 al 10, dando como resultado estos mismos n´umeros pero transformados
a n´umeros ordinales en ingl´es respectivamente.
4
5. 4 . ¿Para qu´e sirve el Compilador?
La utilidad y provecho que se obtiene del compilador radica en la facilidad de obtener
una traducci´on correcta de los n´umeros ordinales en ingl´es, dando la oportunidad a ni˜nos
y j´ovenes de memorizar los diez primeros n´umeros para garantizar su correcta escritura.
5 . ¿C´omo se realiz´o el Compilador?
Para poder llevar a cabo el problema planteado se hizo uso del lenguaje de programa-
ci´on JAVA, adem´as se utiliz´o las librer´ıas JFLAP JCUP JFLEX las cuales permitieron el
desarrollo de un compilador que proporcione la soluci´on al problema planteado.
A continuaci´on se describe cada una de las herramientas utilizadas.
5 .1. JFLAP
JFlex es un generador de analizadores lexicogr´aficos desarrollado por Gerwin Klein
como extensi´on a la herramienta JLex desarrollada en la Universidad de Princeton. JFlex
est´a desarrollado en Java y genera c´odigo Java. Los programas escritos para JFlex tie-
nen un formato parecido a los escritos en PCLex; de hecho todos los patrones regulares
admisibles en Lex tambi´en son admitidos por JFlex, por lo que en este apartado nos cen-
traremos tan s´olo en las diferencias y extensiones, tanto de patrones como del esqueleto.
Figura 2: Dise˜no del Aut´omata en Jflap
5
6. 5 .2. JFLEX
JFlex es un generador de analizadores lexicogr´aficos desarrollado por Gerwin Klein
como extensi´on a la herramienta JLex desarrollada en la Universidad de Princeton. JFlex
est´a desarrollado en Java y genera c´odigo Java. Los programas escritos para JFlex tienen
un formato parecido a los escritos en PCLex; de hecho todos los patrones regulares admisi-
bles en Lex tambi´en son admitidos por JFlex, por lo que en este apartado nos centraremos
tan s´olo en las diferencias y extensiones, tanto de patrones como del esqueleto que debe
poseer el fichero de entrada a JFlex. La instalaci´on y ejecuci´on de JFlex es trivial. Una
vez descomprimido el fichero jflex-1.3.5.zip, dispondremos del fichero JFlex.jar que tan
s´olo es necesario en tiempo de meta-compilaci´on, siendo el analizador generado totalmen-
te independiente. La clase Main del paquete JFlex es la que se encarga de metacompilar
nuestro programa .jflex de entrada; de esta manera, una invocaci´on t´ıpica es de la for-
ma: java JFlex.Main fichero.jflex lo que generar´a un fichero Yylex.java que implementa
al analizador lexicogr´afico.
5 .3. CUP
Cup es un analizador sint´actico LALR desarrollado en el Instituto de Tecnolog´ıa de
Georgia (EE.UU.) que genera c´odigo Java y que permite introducir acciones sem´anticas
escritas en dicho lenguaje. Utiliza una notaci´on bastante parecida a la de PCYacc e igual-
mente basada en reglas de producci´on.
El archivo cup tiene las siguiente partes:
C´odigo del Usuario para el Parser
C´odigo del Usuario para las Acciones de la Gram´atica
Declaraci´on de Variables para la Gram´atica
Gram´atica.
Las especificaciones comienzan de forma opcional con las directivas package y import,
estas tienen la misma sintaxis y juegan el mismo rol que el package y el import de un
programa normal escrito en Java.
En general, CUP implementa las convenciones l´oxicas de Java, como por ejemplo, so-
porta los dos tipos de comentarios que soporta Java.
Despu´es de la declaraci´on opcional de package, luego se pueden importar cero o mas pa-
quetes Java.
Luego de la declaraci´on opcional de import y package, viene una serie de declaracio-
nes opcionales que permiten al usuario escribir c´odigo que luego har´a parte del analizador
generado como parte del archivo parser, pero separado en una clase no-p´ublica que con-
tendr´a todo el c´odigo escrito por el usuario.[3]
6
7. 6 . Analizador L´exico
Se encarga de buscar los componentes l´exicos o palabras que componen el programa
fuente, seg´un unas reglas o patrones. La entrada del analizador l´exico podemos definirla
como una secuencia de caracteres, que pueda hallarse codificada seg´un cualquier est´andar:
ASCII (American Standard Code for Information Interchange), EBCDIC (Extended Bi-
nary Coded Decimal Interchange Code), Unicode, etc. El analizador l´exico divide esta
secuencia en palabras con significado propio y despu´es las convierte a una secuencia de
terminales desde el punto de vista del analizador sint´actico. Dicha secuencia es el punto
de partida para que el analizador sint´actico construya el ´arbol sint´actico que reconoce las
sentencias de entrada.[1]
Figura 3: Declaraci´on de variables archivo JFlex
7
8. Figura 4: Expresions regulares archivo JFlex
7 . Analizador Sint´actico
Todo lenguaje de programaci´on obedece a unas reglas que describen la estructura
sint´actica de los programas bien formados que acepta. En Pascal, por ejemplo, un pro-
grama se compone de bloques; un bloque, de sentencias; una sentencia, de expresiones;
una expresi´on, de componentes l´exicos; y as´ı sucesivamente hasta llegar a los caracteres
b´asicos. Se puede describir la sintaxis de las construcciones de los lenguajes de programa-
ci´on por medio de gram´aticas de contexto libre o utilizando notaci´on BNF (Backus-Naur
Form).
Un analizador sint´actico es la fase del analizador que se encarga de chequear la secuen-
cia de tokens que representa al texto de entrada, en base a una gram´atica dada. En caso
de que el programa de entrada sea v´alido, suministra el ´arbol sint´actico que lo reconoce
en base a una representaci´on computacional. Este ´arbol es el punto de partida de la fase
posterior de la etapa de an´alisis: el analizador sem´antico.
Resulta evidente que los errores de correcci´on no pueden ser detectados por un com-
pilador, ya que en ellos interviene el concepto abstracto que el programador tiene sobre
el programa que construye, lo cual es desconocido, y probablemente incognoscible, por el
compilador. Por otro lado, la detecci´on de errores l´ogicos implica un esfuerzo computacio-
nal muy grande en tanto que el compilador debe ser capaz de averiguar los distintos flujos
que puede seguir un programa en ejecuci´on lo cual, en muchos casos, no s´olo es costoso,
sino tambi´en imposible. Por todo esto, los compiladores actuales se centran en el reco-
nocimiento de los tres primeros tipos de errores. En este tema hablaremos de los errores
de sintaxis, que son los que pueden impedir la correcta construcci´on de un ´arbol sint´actico.
8
9. El manejo de errores de sintaxis es el m´as complicado desde el punto de vista de la
creaci´on de compiladores. Nos interesa que cuando el compilador encuentre un error, no
cancele definitivamente la compilaci´on, sino que se recupere y siga buscando errores. Re-
cuperar un error no quiere decir corregirlo, sino ser capaz de seguir construyendo el ´arbol
sint´actico a pesar de los errores encontrados.[1]
Figura 5: M´etodo validar errores archivo CUP
Figura 6: S´ımbolos terminales y no terminales archivo CUP
9
10. Figura 7: Secci´on de la gram´atica archivo CUP
Figura 8: M´etodo principal de ejecuci´on
Figura 9: M´etodo para escribir el texto le´ıdo desde la interfaz
10
11. Figura 10: M´etodo traducir y obtener los valores dados
Figura 11: Interfaz gr´afica de usuario
8 . C´odigo disponible en Github:
https://github.com/yandry0007/CompiladorNumerosCardinalesIngles
11
12. B. BIBLIOGRAFIA
Referencias
[1] Traductores y Compiladores, EDICI´ON ELECTR´ONICA. Disponible en: http://
www.lcc.uma.es/˜galvez/ftp/libros/Compiladores.pdf
[2] Compiladores e Interpretes, Disponible en: http://www.giaa.inf.uc3m.es/
docencia/ITIG/introduccion.pdf
[3] Rafael Vega castro, disponible en : http://www.rafaelvega.info/wp-content/
uploads/Articulo.pdf
12
13. 1 . Licencia
Ensayo by Yandry Ram´ırez is licensed Under a Creative Commons Reconocimiento-
NoComercial-CompartirIgual 3.0 Unported License.
13