PDF de programación - INTEGRACIÓN DE PROGRAMAS ANTLR CON C++

Imágen de pdf INTEGRACIÓN DE PROGRAMAS ANTLR CON C++

INTEGRACIÓN DE PROGRAMAS ANTLR CON C++gráfica de visualizaciones

Publicado el 8 de Septiembre del 2017
966 visualizaciones desde el 8 de Septiembre del 2017
98,7 KB
5 paginas
Creado hace 14a (07/12/2009)
INTEGRACIÓN DE PROGRAMAS ANTLR CON C++

Jorge Mario Castro C.
[email protected]

Resumen: Como alternativa a la monolítica combinación FLEX/Bison
para la generación de analizadores léxicos y sintácticos, ANTLR brinda
una poderosa y amistosa herramienta de generación de compiladores.
Esta es también multilenguaje, pues tiene la capacidad de generar código
para diversos lenguajes populares de programación orientados a objetos,
como son Java, C#, C++, Python, Ruby, Javascript, entre otros. Debido a
estas características ANTLR resulta muy práctico, dado que además es
multiplataforma, pues está desarrollado en java.

Por otra parte, C++ es un lenguaje multiparadigma, que abarca tres
paradigmas de la programación: la programación estructurada, la
programación genérica y la programación orientada a objetos.

En este artículo se presenta y describe la forma en que se integran los
programas ANTLR con C++ dado que su combinación puede ser de gran
utilidad en el desarrollo de aplicaciones poderosas que requieran alguna
especie de intérprete o compilador.

Palabras Clave: Compiladores - ANTLR - Programas - C++ -
integración

1. Introducción
Hoy día los compiladores son elementos
fundamentales para el desarrollo y
construcción de bases de datos,
aplicaciones
empresariales,
navegadores web y entornos de
desarrollo, entre otros sistemas. Todo
compilador está hecho para traducir de
un lenguaje a otro, a partir de la
gramática definida para el lenguaje.



Existen diversas herramientas para la
generación de compiladores, ANTLR es
una de ellas. Esta proporciona un
marco de trabajo para la construcción de
reconocedores,
intérpretes,
compiladores y traductores de lenguajes
a partir de gramáticas enriquecidas con
acciones.
Entre sus principales



destacan:

la
funcionalidades
construcción de analizadores léxicos,
analizadores sintácticos, mecanismos
de construcción y recorrido de árboles
de sintaxis abstracta
(AST),
mecanismos de tratamiento de plantillas
y de detección y recuperación de errores
[1].

En cuanto a C++, es un exitoso lenguaje
imperativo y orientado a objetos. Este
nació a partir de C, solo que con nuevas
funcionalidades de las que C carecía,
como: clases, plantillas, sobrecarga de
operadores, entre otras.
Estas
características hacen de C++ un
lenguaje muy versátil, largo y complejo
[5].



respectiva

Debido a las anteriores características
de C++ y la amplia funcionalidad de
ANTLR, resulta útil su integración para
el desarrollo de aplicaciones con un
lenguaje propio o al menos utilización de
comandos complejos que requieren de
su
interpretación y
traducción. Tales programas gozarían
además de la poderosa gama de
posibilidades que brinda C++ para
programar. A pesar de esto, ANTLR es
una herramienta la cual aún no ha sido
ampliamente difundida. Prueba de esto,
son la cantidad tan limitada o nula de
artículos o publicaciones que describan
o al menos hagan referencia a esta
aplicación.

Por lo tanto, la intención del presente
artículo es brindar información útil sobre
ANTLR, en la cual se describa la forma
en que se logra la integración con C++ y
las ventajas o desventajas que se
pueden obtener. La integración de
ANTLRcon C++ se facilita a través del
entorno de desarrollo propio de ANTLR:
ANTLRWorks. Esta plataforma permite
la construcción de gramáticas
proporcionando
representaciones
gráficas de las expresiones y árboles
generados.
Además presenta una
opción en la barra de herramientas para
generar código C++, creando archivos .c
y .h. Estos archivos generados se
pueden agregar a proyectos C++ y
utilizar configurando ciertas opciones
que se discutirán luego más a fondo.



sección se explicará detalladamente el
procedimiento de integración con C++ a
través de un ejemplo sencillo. Los
posibles problemas o restricciones con
tal integración se especificarán en la
cuarta sección y
finalmente se
analizarán las principales ventajas o
desventajas de la integración en la
última sección de conclusiones.
2. Principales funcionalidades de
ANTLR

ANTLR es capaz de generar un
analizador léxico, sintáctico o semántico
en varios lenguajes, a partir de unos
ficheros escritos en un lenguaje propio.
Dicho lenguaje es básicamente una
serie de reglas de gramática y un
conjunto de construcciones auxiliares
[6].

Los ficheros con los que trabaja ANTLR
tienen la terminación *.g y se denominan
ficheros de gramática. Un fichero de
gramática contiene la definición de uno
o varios analizadores. Cada uno de
estos analizadores se puede traducir a
código nativo (java, C++ o C#) en forma
de clases. Es decir, por cada analizador
descrito en el fichero de gramáticas se
generará una clase [6].

En cuanto a los flujos de información, se
definen diferentes tipos entre los niveles
que permite ANTLR (léxico, sintáctico y
semántico). Para la entrada de datos
del exterior hasta la primera fase del
compilador, se maneja un flujo de
caracteres. Este generalmente proviene
de un fichero, opero pueden usarse
otras fuentes como una página web [6].

La distribución del artículo será la
siguiente: en la segunda sección se
describirán brevemente las distintas
funcionalidades de ANTLR, en la tercera

El flujo de información entre el
analizador léxico y sintáctico
es
denominado flujo de tokens. Estos
tokens se representan en ANTLR a

través de la súper clase antlr.Token que
declara los métodos y atributos, que
heredan otras sub clases como
ANTLR.CommonToken.
“De esta
forma, a pesar de ser casi una interfaz,
esta clase nos da una idea de cómo se
tratan los tokens en ANTLR: un token es
un “tipo” (un entero) un texto (una
cadena) y una línea y columna (sendos
Enteros)” [6]. Entonces, el analizador
sintáctico se comunica con el léxico
utilizando la función nextToken del
analizador léxico [6 ].
Los árboles de sintaxis abstracta (AST)
manejan la información semántica de un
código, de manera que pueden
especificar la relación jerárquica entre
los símbolos de una gramática. La
forma normal de representar un árbol en
ANTLR utiliza una notación basada en
LISP. Por ejemplo: #(A B C) representa
un árbol con A en la raíz y B y C como
hijos [6].

Finalmente, en cuanto al autómata
recursivo descendente en ANTLR, es
posible pasarle parámetros a los
métodos que representan las reglas. A
estas reglas se le añaden parámetros
utilizando los corchetes. Los parámetros
de una regla pueden utilizarse tanto en
las acciones como en los predicados
semánticos [6].

3. Procedimiento de integración de
ANTLR con C++
A continuación se describe el
procedimiento de integración de ANTLR
con C++ mediante un pequeño ejemplo
de una calculadora. La integración de
ANTLR con C++ se logra fácilmente con
el entorno de desarrollo ANTLRWorks.
Para descargarlo se accede a la página
principal de ANTLR:
www.antlr.org.
Hecho esto, se corre el programa y se
define el tipo de documento a crear, en

este caso se selecciona gramática.
Luego se escoge un nombre y un tipo
para la gramática que se quiere
producir. En el ejemplo actual, se
escogerá tipo lexer para poder generar
tokens a partir de lexemas.
ANTLR genera un archivo con varias
expresiones regulares que representan
los diferentes
lexemas para
identificadores, hileras, comentarios y
otros. Al hacer click en el lexema se
puede observar en la parte inferior de la
ventana la representación gráfica del
lexema. Entonces, una vez definidos los
lexemas, se puede generar código
utilizando la barra de herramientas
superior. Simplemente se hace click
sobre el botón Generate
y se
desplegarán varias opciones.
Se
escoge la opción de generar código C+
+, se especifica el nombre igual al de la
gramática declarada y se elije la carpeta
de destino.
Hecho esto, Se generan dos archivos en
la carpeta de destino, un .g que contiene
los lexemas y una carpeta que contiene
el código generado.
Dentro de la
carpeta se produce un .h y .c, en los
cuales se declaran los métodos
necesarios para trabajar sobre lo
deseado y además con documentación
interna para facilitar su uso.
Para la utilización de estos archivos se
puede usar cualquier IDE para C++, en
este caso se usará Code Blocks.
Entonces, se crea un proyecto y se
incluyen los archivos necesarios, o sea,
los que tienen las rutinas definidas
propias del
los
generados por ANTLR.
Sin embargo, para compilar el proyecto
son necesarias ciertas librerías. Estas
se encuentran disponibles en la página
principal de ANTLR. Para accederlas se

programador y

ingresa a Descargas y se buscan las
“runtime libraries” de C. Hecho esto se
agregan las carpetas include y source
del archivo comprimido descargado a la
carpeta de trabajo.
Luego se incluyen las dependencias de
las carpetas agregadas y se eliminan
tanto de la carpeta source como de la de
include los archivos de depuración. De
esta forma, ya se puede compilar de
manera correcta.
Es normal que
aparezcan muchas advertencias debido
a que se utiliza C con C++.
Para el caso actual de una calculadora,
se
  • Links de descarga
http://lwp-l.com/pdf6884

Comentarios de: INTEGRACIÓN DE PROGRAMAS ANTLR CON C++ (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad