Tutorial ANTLR y Python I. Introducción e Instalación

Tutorial ANTLR y Python:

Parte I: Introducción e Instalación.

Parte II: Creacion de una gramática sencilla.

Parte III: Creacion e implementación de un AST.

Dada la poca información que hay respecto al tema en Internet en español, me imagino que quizás por la poca apreciación que tiene la Teoría de Compiladores no sólo en mi país (Guatemala) sino en quiza toda latinoamérica. he decidido hacer un tutorial para intentar llenar ese vacio, y demostrar que existen herramientas más amistosas para generar analizadores léxico y sintácticos que la monolítica combinación FLEX/Bison, y que además, se pueden hacer en otros lenguajes que no sea el legendario C/C++.

Pero antes de esto, una introducción (rapida para no aburrir) a las herramientas.

El lenguaje Python:

Lenguaje dinámico y de scripts completamente orientado a objetos, su simplicidad se basa en las pocas construcciones de lenguaje que posee, y su poder en la capacidad de enlazarse a muchísimas librerías hechas en C, lo cual garantiza la eficiencia, además de tener una sintaxis simple, sensible a las sangrías. . Existen varias implementaciones, aunque las más populares son CPyhton (la version normal) y JPython (la que corre sobre la VM de java).

Se estará utilizando la version 2.5 de python en los ejemplos que se hagan, y para los que no esten familiarizados con el lenguaje se les recomienda el siguiente tutorial (en inglés pero muy bueno)

ANTLR:

Herramienta de generación de compiladores, es multiplataforma por estar desarrollado en Java, y es multilenguaje por tener la capacidad de generar código para la mayoría de lenguajes orientados a objetos populares actualmente, incluyendo, pero no limitándose a Java, C#, C++, Python, Ruby, Javascript, entre otros. Su método de análisis se basa en el LL(k) por lo que soporta el uso de atributos heredados. Otra característica es la facilidad para generar AST, es decir representaciones intermedias que permiten crear compiladores o intérpretes de más de una pasada. y la integración con StringTemplates para transformaciones complejas.

Se estará usando la versión 3 de ANTLR para los ejemplos que se incluyan. para más información visitar la wiki de ANTLR

Dado que este tutorial se enfocará únicamente en la combinación ANTLR/Python, para comprender mejor lo descrito a continuación, el lector deberá tener alguna familiaridad con Teoría de Compiladores (Véase el libro del Dragon), esto incluye Expresiones regulares, métodos de análisis descendente LL(k) y descendente (LA|G|S)?LR(x), también de tener experiencia en alguna otra herramienta de generación de compiladores, como YACC, y, pues un poco de conocimiento en lenguajes como c/c++, y obviamente Python no vendrían nada mal.

I. Instalación:

Prerrequisitos.

– Ubuntu GNU/Linux (en este tutorial se estará utilizando esta versión por simplicidad, aunque si se desea se puede usar cualquier otra distribución), y los repositorios adicionales (universe, multiverse, etc) correctamente configurados en el APT.

1. Instalando Java Runtime Environment 1.5 y Python de un tirón.

En este paso se instalará la plataforma Python (que por default ya viene instalada) y el JRE de Java, ya que para el funcionamiento del IDE ANTLRWorks se requiere la JRE 1.5 o mayor,
por lo que si tenemos bien configurados los repositorios, desde consola (alt+f2 gnome-terminal) escribimos…

$ sudo apt-get install python openjdk-6-jre

fig 1. Instalacoin por APT

fig 1. Instalacoin por APT

…y le decimos que SI cuando nos pregunte si en realidad se desea instalar el paquete.

2. Bajando e instalando ANTLRWorks

ANTLRWorks es un IDE multiplataforma hecho en Java para que desde ahí podamos desarrollar las gramáticas de ANTLR en una interfaz gráfica amistosa, teniendo el típico resaltado de código, visualización de la gramática de manera gráfica, generación de código, e incluso hasta debugging de la gramatica que desarrollamos. No es necesario bajar otra cosa, el ANTLRWorks trae tanto el IDE como el generador ANTLR.

Para descargar ANTLRWorks damos clic en http://www.antlr.org/download/antlrworks-1.2.3.jar. y lo colocamos en cualquier directorio (le llamare DIRECTORIO DEL IDE de aqui en adelante) (en mi caso lo guardaré en mi directorio de inicio “home” [/home/kreig/antlr] ) y ya desde ahi podemos ejecutarlo.

Descarga de ANTLRWorks

Descarga de ANTLRWorks

3. Bajando e instalando el runtime de Python para ANTLR

El runtime de ANTLR es el conjunto de clases necesarias para que nuestro código python generado por ANTLR funcione, y pueda ser incluido dentro de nuestro script.

Para esto, bajamos el Runtime

http://www.antlr.org/download/Python/antlr_python_runtime-3.1.2.tar.gz

y lo colocamos en el DIRECTORIO DEL IDE

Descomprimimos el paquete


$ cd [DIRECTORIO DEL IDE]
$ tar -xvzf antlr_python_runtime-3.1.2.tar.gz

Instalacion de runtime

Desempaquetado del runtime

y ejecutamos el instalador


$ sudo python antlr_python_runtime-3.1.2/setup.py install

Instalación del runtime de ANTLR para python

Instalación del runtime de ANTLR para python

y listo, los runtimes de ANTLR fueron instalados con exito, con estos 3 sencillos pasos tendremos ya instalado nuestro entorno de desarrollo de gramáticas con ANTLR y Python.

(Nota: En caso de que nos de errores de referencia en el codigo de que no se encuentra antlr3, sera necesario copiar el directorio antlr3 del paquete de runtime, hacia el directorio de las librerias de python. en mi caso /usr/lib/python-2.5)

En la siguiente entrega elaboraremos nuestra primer gramática con ANTLR…

Siguiente ->

11 comentarios

  1. Excelente, buenisima onda, de gran ayuda…

    hoy por mi mañana por vos.🙂

    Vamos patria a caminar, yo te acompaño.

  2. […] ) Tutorial ANTLR y Pyt… en Tutorial ANTLR y Python III. C…Tutorial ANTLR y Pyt… en Tutorial ANTLR y Python […]

  3. Solo disculpa, es que cada vez que intento copiar el archivo Antlr3 en la carpeta /usr/lib/python-2.5 dice q no tengo los permisos nesesarios para hacer eso. Teniendo en cuenta que soy el unico usuario. Gracias

  4. Hice exactamente los pasos del tutorial con respecto al runtime de python pero no dejo de obtener el” error: package directory ‘antlr3’ does not exist ” ya tengo la carpeta antlr3 en /usr/lib/python-2.5 pero al volverle a dar $ sudo python antlr_python_runtime-3.1.2/setup.py install sigo obteneirndo el mismo error, no se si solo con poner la carpeta antlr3 en el directorio /usr/lib/python-2.5 basta? Saludos

  5. muchas gracias por tu aporte Erick, en realidad ANTLR es una herramienta super útil, tanto así, que estoy redactando un artículo basado en la integración de ANTLR con programas C++

  6. Muchas gracias, Erik, por tu tutorial de Antlr y Python.
    Estamos haciendo un DSL para controlar un brazo robótico (simulado con OpenRave) y nos está siendo de mucha ayuda tus anotaciones.
    ¡Saludos desde Tenerife!

    ps ¿Te gusta Dream Theater?

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: