AMBITOS DE APLICACIÓN DE LOS LENGUAJES...

12
AMBITOS DE APLICACIÓN DE LOS LENGUAJES FORMALES CON ANTLR APPLICATION SCOPES OF THE FORMAL LANGUAGES WITH ANTLR Eric Jeltsch F. 1 Luis Cuello A. 2 Gonzalo Santander P. 3 RESUMEN En informe se presenta un conjunto de actividades realizadas en el curso de Teoría de Autómatas y Lenguajes Formales, a medida que se avanzó en el curso, el profesor guía solicitó realizar tres actividades, la primera actividad es una introducción a las herramientas Lex/Yacc y ANTLR para el conocimiento y practica en las mismas, luego se continuo con una guía de ejercicios y finalmente una breve introducción al proyecto final del curso, una actualización de un proyecto DSL (Domain Specific Language: Lenguaje específico del dominio) desde un listado de proyectos obtenidos desde la Universidad de Columbia, proyectos a cargo del profesor guía Stephen A. Edward, algunos de los proyectos son: HML: Homosapien Modeling Language, TML: Text Manipulation Language, CATALOG: Digital Media Organization Language, entre otros, todos ellos están implementados en ANTLR (ANother Tool for Language Recognition), y que pueden ser trabajadas con el editor ANTLRWorks2 de Tunnel Vision Laboratories. En el proceso de desarrollo de las actividades se comprobó el potencial y efectividad de las herramientas en el contexto de los analizadores lexicográficos y sintácticos. Finalmente, se puede concluir que el uso, manejo e incorporación de este tipo de herramientas es recomendable, oportuna y factible para el curso de Teoría de Autómatas y lenguajes formales para estudiantes de pregrado en Ingeniería en Computación. Palabras clave: antlr; dsl; lenguajes formales; automatas. ABSTRACT In the report a set of activities undertaken in the course Theory of Automata and Formal Languages, as we move forward in the course we were asked to perform three activities show, the first activity is an introduction to Lex / yacc and ANTLR tools knowledge and practice in them, then continue with a guide of exercises and finally a brief introduction to the final draft of course, an update of a project DSL (Domain Specific Language: Domain Specific Language) from a list of projects obtained from the Columbia University project by Professor Stephen A. Edward guide, some of the projects are: HML: Homosapien Modeling Language, TML: Text Manipulation Language, CATALOG: Digital Media Organization Language, among others, all of them are implemented in ANTLR ( ANother Tool for Language Recognition), and can be worked with editor ANTLRWorks2 Tunnel Vision Laboratories. In the process of development of activities and the potential effectiveness of the tools in the context of the lexical and syntactic analyzers it is checked. Finally, it can be concluded that the use, handling and incorporation of these tools is recommended, timely and feasible for the course Theory of Automata and formal languages for undergraduate students in Computer Engineering. Keywords: antlr, dsl, formal languages, automaton. 1 Departamento de Matemáticas. Universidad de La Serena / Cisternas 1200. La Serena, Chile. [email protected] 2 Escuela Ingeniería en Computación. Universidad de La Serena / Cisternas 1200. La Serena, Chile. [email protected] 3 Escuela Ingeniería en Computación. Universidad de La Serena / Cisternas 1200. La Serena, Chile. [email protected] INTRODUCCIÓN La presente propuesta se inserta dentro de las actividades docentes del curso de Teoría de autómatas y lenguajes formales (TALF). Los conceptos que se propusieron en el curso se relacionaron con el estudio de los DSL (Domain- Specific Languages), [3], junto con la aplicación y manejo de las herramientas ANTLR (ANother Tool for Language Recognition) [1], y ANTLRWorks2 [2]. En términos formales o curriculares, el tema de los DSL está soportada por las asignaturas de Teoría de Autómatas y Lenguajes Formales (Teórico-Práctico, 4 horas, 4º Año, 7º Nivel), la cual es abordada con una estructura y herramientas clásicas, tales como, Lex/Yacc, Flex/Bison, en el entorno del lenguaje C, y JLex/CUP en el entorno Java, y cuyo objetivo es el dotar al alumno de las competencias y habilidades básicas para la descripción sistemática de lenguajes formales y el desarrollo sistemático de intérpretes, filtros y transformaciones en los lenguajes formales según la jerarquía de Chomsky, y el uso de técnicas estándares que se ponen en práctica en los Laboratorios. Al mismo tiempo, los Laboratorios se sustentan en la asignatura de Programación Orientada a Objetos (Teórico-Práctico, 4 horas, 2º Año, 4º Nivel) y Diseño y Análisis de Algoritmos (Teórico-Práctico, 4 horas, 3º Año, 5º Nivel), en donde las actividades prácticas se enfocan al lenguaje Java, con uso intensivo de las librerías, Generic, Collections y Swing, entre otras.

Transcript of AMBITOS DE APLICACIÓN DE LOS LENGUAJES...

Page 1: AMBITOS DE APLICACIÓN DE LOS LENGUAJES ...dns.uls.cl/~ej/web_talf_2020/CATALOG-2-TALF-FINAL.pdflenguajes formales y el desarrollo sistemático de intérpretes, filtros y transformaciones

AMBITOS DE APLICACIÓN DE LOS LENGUAJES FORMALES CON ANTLR

APPLICATION SCOPES OF THE FORMAL LANGUAGES WITH ANTLR

Eric Jeltsch F.1 Luis Cuello A.2 Gonzalo Santander P. 3

RESUMEN

En informe se presenta un conjunto de actividades realizadas en el curso de Teoría de Autómatas y Lenguajes Formales,

a medida que se avanzó en el curso, el profesor guía solicitó realizar tres actividades, la primera actividad es una

introducción a las herramientas Lex/Yacc y ANTLR para el conocimiento y practica en las mismas, luego se continuo

con una guía de ejercicios y finalmente una breve introducción al proyecto final del curso, una actualización de un

proyecto DSL (Domain Specific Language: Lenguaje específico del dominio) desde un listado de proyectos obtenidos

desde la Universidad de Columbia, proyectos a cargo del profesor guía Stephen A. Edward, algunos de los proyectos

son: HML: Homosapien Modeling Language, TML: Text Manipulation Language, CATALOG: Digital Media

Organization Language, entre otros, todos ellos están implementados en ANTLR (ANother Tool for Language

Recognition), y que pueden ser trabajadas con el editor ANTLRWorks2 de Tunnel Vision Laboratories. En el proceso

de desarrollo de las actividades se comprobó el potencial y efectividad de las herramientas en el contexto de los

analizadores lexicográficos y sintácticos. Finalmente, se puede concluir que el uso, manejo e incorporación de este tipo

de herramientas es recomendable, oportuna y factible para el curso de Teoría de Autómatas y lenguajes formales para

estudiantes de pregrado en Ingeniería en Computación.

Palabras clave: antlr; dsl; lenguajes formales; automatas.

ABSTRACT

In the report a set of activities undertaken in the course Theory of Automata and Formal Languages, as we move

forward in the course we were asked to perform three activities show, the first activity is an introduction to Lex / yacc

and ANTLR tools knowledge and practice in them, then continue with a guide of exercises and finally a brief

introduction to the final draft of course, an update of a project DSL (Domain Specific Language: Domain Specific

Language) from a list of projects obtained from the Columbia University project by Professor Stephen A. Edward guide,

some of the projects are: HML: Homosapien Modeling Language, TML: Text Manipulation Language, CATALOG:

Digital Media Organization Language, among others, all of them are implemented in ANTLR ( ANother Tool for

Language Recognition), and can be worked with editor ANTLRWorks2 Tunnel Vision Laboratories. In the process of

development of activities and the potential effectiveness of the tools in the context of the lexical and syntactic analyzers

it is checked. Finally, it can be concluded that the use, handling and incorporation of these tools is recommended,

timely and feasible for the course Theory of Automata and formal languages for undergraduate students in Computer

Engineering.

Keywords: antlr, dsl, formal languages, automaton.

1 Departamento de Matemáticas. Universidad de La Serena / Cisternas 1200. La Serena, Chile. [email protected] 2 Escuela Ingeniería en Computación. Universidad de La Serena / Cisternas 1200. La Serena, Chile. [email protected] 3 Escuela Ingeniería en Computación. Universidad de La Serena / Cisternas 1200. La Serena, Chile. [email protected]

INTRODUCCIÓN

La presente propuesta se inserta dentro de las actividades

docentes del curso de Teoría de autómatas y lenguajes

formales (TALF). Los conceptos que se propusieron en el

curso se relacionaron con el estudio de los DSL (Domain-

Specific Languages), [3], junto con la aplicación y manejo

de las herramientas ANTLR (ANother Tool for Language

Recognition) [1], y ANTLRWorks2 [2]. En términos

formales o curriculares, el tema de los DSL está soportada

por las asignaturas de Teoría de Autómatas y Lenguajes

Formales (Teórico-Práctico, 4 horas, 4º Año, 7º Nivel), la

cual es abordada con una estructura y herramientas

clásicas, tales como, Lex/Yacc, Flex/Bison, en el entorno

del lenguaje C, y JLex/CUP en el entorno Java, y cuyo

objetivo es el dotar al alumno de las competencias y

habilidades básicas para la descripción sistemática de

lenguajes formales y el desarrollo sistemático de

intérpretes, filtros y transformaciones en los lenguajes

formales según la jerarquía de Chomsky, y el uso de

técnicas estándares que se ponen en práctica en los

Laboratorios. Al mismo tiempo, los Laboratorios se

sustentan en la asignatura de Programación Orientada a

Objetos (Teórico-Práctico, 4 horas, 2º Año, 4º Nivel) y

Diseño y Análisis de Algoritmos (Teórico-Práctico, 4

horas, 3º Año, 5º Nivel), en donde las actividades

prácticas se enfocan al lenguaje Java, con uso intensivo de

las librerías, Generic, Collections y Swing, entre otras.

Page 2: AMBITOS DE APLICACIÓN DE LOS LENGUAJES ...dns.uls.cl/~ej/web_talf_2020/CATALOG-2-TALF-FINAL.pdflenguajes formales y el desarrollo sistemático de intérpretes, filtros y transformaciones

Cabe hacer notar que todas estas asignaturas de la carrera

procura cumplir con las recomendaciones de la

ACM/IEEE-CS Curriculum Joint Task-Force, [6] y

referentes universales, en el sentido de que las materias y

conocimientos entregados se encuadran dentro del área

del conocimiento respectivo (Software Engineering). La

propuesta actualiza un DSL externo, que incorpora la

programación orientada a objetos y el uso de la

arquitectura Modelo-Vista-Controlador, todo ello

realizado por alumnos de la carrera que cursa la

asignatura TALF. Gracias a las horas de teoría del curso,

conociendo los distintos tipos de autómatas, gramáticas y

lenguajes, han sido útil para entender cómo funcionan a

nivel más profundo el tema de cómo se trabajan con los

códigos fuente y como se crear el programa interpretando

ese código fuente a través de un compilador (e incluso con

un poco más de habilidad la creación del mismo). Además

los conocimientos obtenidos nos permiten la creación de

un DSL (Lenguaje de dominio especifico) utilizando las

herramientas de código abierto, tales como, ANTLR y

ANTLRWorks2.

DESCRIPCION DEL CURSO

Es un curso del Ciclo Superior teórico- práctico, (7º

Nivel) que entrega los fundamentos teóricos de la

programación, combinando la teoría con la práctica a

través de numerosos ejemplos. Se muestra la clasificación

de Chomsky, se exponen las gramáticas regulares y los

autómatas finitos, las máquinas secuenciales, las

gramáticas independientes del contexto los autómatas a

pila y las máquinas de Turing, junto con aplicaciones

prácticas en diversas disciplinas. Los tópicos recopilados

para las aplicaciones incluyen en general, la construcción

de un lenguaje de propósito específico, DSL, y el manejo

de herramientas que coadyuven a la consecución de ellos.

En los Laboratorios, se continua aprendiendo y aplicando

el lenguaje Java como herramienta y la Programación

Orientada a Objeto como metodología para implementar

algoritmos o proyectos que se deriven de los contenidos.

Dejando el contexto abierto para incursionar en algún

campo de interés, por ejemplo, telemedicina, creación de

lenguajes, Interoperabilidad semántica u otros.

FUNDAMENTOS

La importancia de los DSL radica en que son lenguajes de

programación que están diseñados para utilizarse en

dominios o problemas específicos, a diferencia de los

lenguajes de programación de propósito general (Java, C,

C++ u otros). Martin Fowler y Debasish Ghosh hacen una

introducción y clasificación muy interesante de los

mismos en [4,5]. En general, son numerosos los proyectos

en donde ANTLR ha intervenido, entre ellos, Apache

Camel, Apache Lucene, Groovy, Hibernate. Por ejemplo,

Hibernate usa ANTLR para el parser en el lenguaje de

consulta HQL, EJB-QL y Criteria Query. En Drools

(Business Logic Integration Platform), uno de los

productos más importantes en la plataforma JBoss-SOA

es el lenguaje DRL, el cual relaciona reglas de negocio

definidas a alto nivel dentro de un motor de procesos. Es

decir, una cantidad importante de proyectos han visto lo

apropiado de usar los DSL en pequeñas aplicaciones y la

importancia que le cabe a ANTLR en este aspecto.

HERRAMIENTA ANTLR

ANTLR (ANother Tool for Language Recognition; en

español "otra herramienta para reconocimiento de

lenguajes") es una herramienta creada principalmente por

Terence Parr, que opera sobre lenguajes, proporcionando

un marco para construir reconocedores (parsers),

intérpretes, compiladores y traductores de lenguajes a

partir de las descripciones gramaticales de los mismos

(conteniendo acciones semánticas a realizarse en varios

lenguajes de programación).

INSTALACION DE ANTLR

Previamente se debe tener instalado Java en el equipo, se

requiere la versión 1.8 y es posible descargarla desde el

siguiente link: https://www.java.com/es/download/.

Para instalar ANTLR se debe descargar desde la página

oficial: http://www.antlr.org/download.html se descarga el

archivo antlr-4.5.1-complete.jar. Una vez descargado este

jar y junto con gramática con extensión g4 (ambos

archivos en el mismo directorio), se procede a ejecutar el

archivo .jar para generar el lexer, parser y demás clases

java para trabajar en el proyecto.

Para generar las clases java y los demás archivos

utilizados por ANTLR es necesario escribir el siguiente

comando en la consola de Windows:

“java –cp (jar ANTLR) org.antlr.v4.Tool

(gramatica.g4)” generando los siguientes archivos en el

ejemplo para la gramática “ArrayInit.g4”

Además existen otros comandos para mostrar las pruebas

en la gramática creada, para la gramática Hello a

continuación se hizo el test con “Hello parrt” obteniendo:

Page 3: AMBITOS DE APLICACIÓN DE LOS LENGUAJES ...dns.uls.cl/~ej/web_talf_2020/CATALOG-2-TALF-FINAL.pdflenguajes formales y el desarrollo sistemático de intérpretes, filtros y transformaciones

Para realizar esto se utilizará: “java –jar (jar ANTLR)

org.antlr.v4.runtime.misc.TestRig (gramatica.g4)

(regla inicio) -(tree o gui) (test para la gramática)”. Tambien es posible crear un alias para evitar escribir el

comando completo para: “org.antlr.v4.Tool”y

“org.antlr.v4.runtime.misc.TestRig”.

Estos se llamarán ANTLR y GRUN respectivamente.

Para comenzar es necesario guardar el jar de ANTLR en

una carpeta específica y luego añadir la ruta de esta

carpeta como variable de entorno en PATH al sistema

operativo, luego se deben crear 2 archivos con la

extensión bat con el nombre del alias que se desea asignar

a los comandos dentro del mismo directorio donde se

encuentra el archivo jar de ANTLR.

Se crea el archivo ANTLR.bat y dentro de él se escribe

“java org.antlr.v4.Tool %*” y finalmente el archivo

GRUN.bat y dentro de él se escribe “java

org.antlr.v4.gui.TestRig %*”. Con esto se finaliza el

proceso de instalación y prueba de ANTLR por consola.

Existen además 2 maneras de trabajar con ANTLR de

forma más simple descritas a continuación.

Plugin de ANTLR para Eclipse

En el editor se selecciona Help -> Install New Software y

se agrega en el apartado Work With el siguiente link:

https://marketplace.eclipse.org/content/antlr-4-ide.

Una vez instalado, este plugin permite editar la

gramática, ver el diagrama de la misma y crear las clases

correspondientes para crear un proyecto.

Para configurar otras opciones para generar los archivos

java es necesario ir a “Windows->Preferences-

>ANTLR4->Tool”

ANTLR WORKS es un entorno de desarrollo novedoso

para ANTLR3/4. Combina un redactor de gramática

consciente, excelente, con un intérprete para prototipado

rápido y un depurador independiente del idioma para

aislar errores gramaticales.

Actualmente se encuentra disponible la versión 2.1 que

puede ser descargada de su página oficial desde aquí:

http://tunnelvisionlabs.com/products/demo/antlrworks

Con este editor se puede comprobar la correcta sintaxis de

la gramática a crear y además de ver las transiciones de la

misma seleccionando una regla y presionando sobre el

botón “syntax diagram”.

Page 4: AMBITOS DE APLICACIÓN DE LOS LENGUAJES ...dns.uls.cl/~ej/web_talf_2020/CATALOG-2-TALF-FINAL.pdflenguajes formales y el desarrollo sistemático de intérpretes, filtros y transformaciones

Además se puede testear la gramática y ver el AST con la

opción “Run -> Run in TestRig...”

Luego de comprobar la correcta sintaxis de la gramática

creada, es posible generar el código en Java desde el

menú: “Run -> Generate Recognizer”.

EXPERIENCIA 1

En esta actividad introductoria al curso TALF se solicita

una demostración del uso de Lex/Yacc y ANTLR.

Lex/Yacc

Para comenzar se crea el Lexer (.flex) y el Parser (.y), se

utilizarán los archivos “jflex-1.6.1” y “yacc” resultando

los archivos iniciales:

Luego utilizaremos jflex-1.6.1 para generar el lexer en

java: java –jar jflex-1.6.1.jar calc.flex

A continuación se utilizará el archivo “yacc” para generar

el parser en java: yacc –J calc.y

Obteniendo los siguientes archivos:

Yylex.java, Parser.java y ParserVal.java.

Finalmente se importan estos archivos a un proyecto en

eclipse:

Y hacemos una prueba de la calculadora ingresando la

expresión: ( 3 + 5 ) * 7

Page 5: AMBITOS DE APLICACIÓN DE LOS LENGUAJES ...dns.uls.cl/~ej/web_talf_2020/CATALOG-2-TALF-FINAL.pdflenguajes formales y el desarrollo sistemático de intérpretes, filtros y transformaciones

Obteniendo como resultado 56 comprobando el correcto

funcionamiento de la calculadora.

ACTIVIDAD ANTLR

Para esta actividad se solicita crear una gramática, a la

cual llamaremos “testeoantlr” y utilizando la aplicación

AntlrWorks v1.5.2 para crear, visualizar y probar la

gramática.

Crear la gramática: File -> New

Y se le asigna un nombre a la gramática

Gramática

grammar testeoantlr; options { k = 1; } decl_or_def : type ID '(' args ')' (';' | '{' body '}') ; type: 'void' | 'int' ; args: arg (',' arg)* ; arg : 'int' ID ; body: 'return' INT ';'; ID : ('A'..'Z'|'a'..'z')+; INT: ('1'..'9') ('0'..'9')*;

Luego de crear la gramática, se pueden ver los estados de

las reglas:

Luego para generar la clases en java: Generate ->

Generate Code

Finalmente se puede realizar una prueba de la gramática

creada ingresando un archivo en: Run -> run

Contenido del archivo para probar:

void main (int arg){return 5;}

Donde finalmente se visualiza el ParseTree para el test y

se puede comprobar que la cadena ingresada es

compatible con la gramática.

EXPERIENCIA 2

En esta actividad se presenta una guía con un conjunto de

ejercicios que se describen a continuación:

Actividad 1: Instalación de ANTLR, esta actividad fue

descrita al comienzo del documento.

Actividad 2: Construya un analizador lexicográfico

básico para las expresiones aritméticas en ANTLRWorks

y visualice sus propiedades a partir de las herramientas

que pone a disposición ANTLRWorks.

Page 6: AMBITOS DE APLICACIÓN DE LOS LENGUAJES ...dns.uls.cl/~ej/web_talf_2020/CATALOG-2-TALF-FINAL.pdflenguajes formales y el desarrollo sistemático de intérpretes, filtros y transformaciones

Gramática utilizada:

Actividad 3: Hacer las pruebas necesarias

Actividad 4: Prueba con lectura desde texto plano

Actividad 5: Guardar resultado en archivo

Desarrollo 3, 4, 5: Después de trabajar con la gramática

en AntlrWorks 2, se general los archivos y los

posteriormente se importan a eclipse para crear una

aplicación:

Se entregan como parámetros de entrada lo propuesto en

la “actividad 2”, directamente en el panel de entrada o

cargándolo desde un archivo para finalmente mostrarlo en

el panel de salida y/o guardarlo en un archivo de salida

como indicaba la actividad.

Actividad 6: Cambio de propiedad expresiones

aritméticas

Desarrollo 6: Se pide cambiar el orden de precedencia de

los operadores aritméticos, para ello modificaremos la

gramática que teníamos originalmente “calculator.g4”en

las siguientes líneas:

Page 7: AMBITOS DE APLICACIÓN DE LOS LENGUAJES ...dns.uls.cl/~ej/web_talf_2020/CATALOG-2-TALF-FINAL.pdflenguajes formales y el desarrollo sistemático de intérpretes, filtros y transformaciones

Reemplazándolas por las siguientes:

Finalmente comprobaremos la salida de las gramáticas

Calculadora normal

Calculadora inversa

Actividad 7: Un Ingeniero en Computación de la ULS,

tenía la siguiente dificultad al procesar un archivo plano

con características de este tipo:

4564, Time: Play and Pay,1:02,1,”41,38",”258,62"

En donde la separación por la coma no le funciona, ya que

existían los decimales que también están separados por

coma.

Desarrollo 7: Para esta actividad se debe crear una nueva

gramática en AntlrWorks y luego testearla

Finalmente se prueba la cadena retornando el siguiente

ParseTree:

EXPERIENCIA 3

Para esta actividad, el profesor guía presenta un listado de

proyectos ANTLR desde la Universidad de Columbia a

cargo del docente Stephen A. Edwards, en la cual solicita

seleccionar algunos de los presentados en la lista y

actualizarlos a la versión más reciente de ANTLR, la gran

parte de los proyectos se encuentran en la versión 2.x,

entonces la idea es actualizar el proyecto a la versión más

reciente la cual seria 4.x

Page 8: AMBITOS DE APLICACIÓN DE LOS LENGUAJES ...dns.uls.cl/~ej/web_talf_2020/CATALOG-2-TALF-FINAL.pdflenguajes formales y el desarrollo sistemático de intérpretes, filtros y transformaciones

Lista de proyectos ANTLR

El proyecto seleccionado para esta actividad será

CATALOG.

CATALOG

“En nuestros días de creciente dependencia de

información digital, mientras que nuestros viejos álbumes

de fotos y discos de música están recogiendo el polvo en

los estantes, los grandes volúmenes de archivos MP3,

AVI, JPEG y otros archivos formatos están creciendo en

nuestros discos duros, llenando medios grabables y crear

una necesidad de más almacenamiento extraíble y el

hardware de copia de seguridad. Creemos que es el

momento de crear algo que nos ayudará organizar este

caos, eliminar una gran cantidad de redundancia y

espero liberar algo de espacio. Por desgracia, no es fácil

construir una herramienta general para ayudar a las

personas catalogan sus datos, por lo tanto, proponer la

construcción de un nuevo lenguaje para este propósito.”

Todos los archivos son de cierto tipo, que se define por su

extensión y el formato. Los archivos también tienen otras

propiedades en función de su tipo. Por ejemplo, un

archivo de imagen puede tener la propiedad modelo de la

cámara y un archivo de música puede tener artista y el

álbum. Las propiedades se utilizan generalmente para

organizar los archivos. La música puede estar en una

carpeta con el nombre después de su género y fotos puede

ser en una carpeta que tiene un nombre del evento que

fotos fueron tomadas, pero también pueden contener la

fecha de este evento en el nombre de la carpeta.

Desafortunadamente, no hay manera fácil de traducir estas

propiedades en estructuras de directorio o mover

fácilmente archivos de una carpeta a otra en función de

sus tipos sin intervención manual. El sistema operativo

proporciona algunas herramientas, pero la mayoría de las

veces los usuarios tienen que repetir mismos pasos una y

otra vez. Proponemos a escribir un compilador para un

lenguaje de programación orientado a objetos que le

ayuda mucho con archivos de medios digitales y otros

archivos de una manera organizada. Este lenguaje,

llamado CATALOG, es suficientemente simple para que

todos los usuarios sean capaces de crear programas

personalizados para sí mismos de forma rápida con el fin

de catalogar sus datos.

CATALOG será un lenguaje de programación con un

amplio ámbito de aplicación práctica. La gente será capaz

de crear programas para sus propios hábitos de

mantenimiento de archivos y estructuras de directorios. Se

trata de una flexibilidad que manipulación de archivos y

herramientas de catalogación que no proporcionar los

sistemas operativos, simplemente carecen de ella. El

lenguaje será orientado a contenido muy ampliable, que es

esencial debido al creciente número de formatos digitales

y propiedades de archivo que se crearán en el futuro.

Desarrollo:

Para esta actividad, lo primordial es actualizar la

gramática desde la versión 2.7.7 a la versión 4.5 de

ANTLR.

Una vez descargados todos los archivos del proyecto se

procede a analizar la sintaxis.

Gramática original:

Page 9: AMBITOS DE APLICACIÓN DE LOS LENGUAJES ...dns.uls.cl/~ej/web_talf_2020/CATALOG-2-TALF-FINAL.pdflenguajes formales y el desarrollo sistemático de intérpretes, filtros y transformaciones

Actualización de la gramática utilizando el editor de

AntlWorks2:

Page 10: AMBITOS DE APLICACIÓN DE LOS LENGUAJES ...dns.uls.cl/~ej/web_talf_2020/CATALOG-2-TALF-FINAL.pdflenguajes formales y el desarrollo sistemático de intérpretes, filtros y transformaciones

Modelado funcionamiento proyecto Catalog 2

Modelado clases internas de Catalog

Método de trabajo

La metodología de trabajo utilizada en fue, en primera

parte, investigar sobre ANTLR, comprender la sintaxis,

buscar ejemplos de gramáticas en ANTLR, comenzando

por la versión originaria del proyecto CATALOG, que se

deberá actualizar a la última versión de ANTLR según la

actividad final dada por el profesor guía. La versión de

CATALOG es ANTLR 2.7.7.

ANTLR 2

Se utilizaba además de Lexer y Parser, un TreeWalker. El

TreeWalker contiene código nativo de Java, inserto dentro

de la misma gramática, que especifica cuáles serán las

acciones realizadas en cada regla. Luego el AST es

generado automáticamente cuando se compilan las clases

de Java utilizando el archivo .jar de ANTLR versión

2.7.7.

Dentro de la gramática, también era necesario especificar

el número de caracteres a leer de profundidad, este

concepto se utilizaba en esta versión para que no hubieran

conflictos mientras se leían dos reglas, cuyos nombres

comenzaban con los mismos n-caracteres, esto se conoce

como “Lookahead Depth” y se incorporaba en la

gramatica de la siguiente forma:

A su vez contenía una extensa lista de opciones

(http://www.antlr2.org/doc/options.html), sin embargo en

ANTLR 4 se han modificado y ya no es posible agregarlas

a nivel general de gramática.

Construcción de AST en ANTLR 2

En ANTLR 2 la construcción del AST se realizaba

especificando dentro de la gramática, en los tokens, las

notaciones “^” y “!”, y cualquier token que no llevara

alguna de estas notaciones es considerado un nodo hoja en

el árbol resultante, la notación “^” indica que el token es

considerado como un nodo raíz, mientras que la notación

“!” indica que no se considera en la construcción del

árbol.

options { k = x } //x representa el numero de caracteres de profundidad a leer

class MyClassParser extends Lexer; class MyClassParser extends Parser; class MyClassWalker extends TreeParser;

//notación “^” myRule : A B^ C^ ; //notación “!” myRule : A B! ;

Page 11: AMBITOS DE APLICACIÓN DE LOS LENGUAJES ...dns.uls.cl/~ej/web_talf_2020/CATALOG-2-TALF-FINAL.pdflenguajes formales y el desarrollo sistemático de intérpretes, filtros y transformaciones

Traducción de Acciones en el AST

En los parsers y tree parsers con la opción “buildAST =

true”, al igual que en el caso de CATALOG, ANTLR

traducirá porciones de código con el prefijo “#”, de esta

manera es más fácil construir AST con acciones.

ANTLR 4

La cuarta versión del generador de analizadores

sintácticos. Antlr se mantiene por Terence Parr, profesor

en la Universidad de San Francisco.

¿Qué significa analizar con ANTLR?, la estructura se

describe como una gramática, Reconocedor se divide en

lexer y parser. El árbol de análisis puede ser generado

automáticamente.

Lo primero a tener en cuenta sobre el archivo de la

gramática es que no se debe incrustar cualquier acción en

la misma. Acciones incrustadas son piezas de código Java

unido a diversas reglas de la gramática; cuando estas

reglas son igualadas por el analizador, el código Java

asociado se ejecutará. Acciones incorporadas son una gran

manera de empezar a trabajar con ANTLR, pero ya no se

recomienda su uso para cualquier cosa menos

aplicaciones sencillas y experimentos, ya que es probable

que desea mantener su definición del lenguaje

independiente de la lógica de aplicación.

Cambios en ANTLR versión 4

La gran diferencia de esta nueva versión de ANTLR es

que es mucho más simple de utilizar respecto a las

versiones anteriores ayudando a los estudiantes aprender

más rápido, la idea de esta versión respecto a las

anteriores es obtener una gramática limpia, es decir, no

contenga condigo fuente del programa en ella misma.

La más grande diferencia entre ANTLR 2 y ANTLR 4 es

que ANTLR 4 tiene la capacidad de leer cualquier

gramática a menos que tenga recursión indirecta por la

izquierda. Esto significa que no es necesario el uso de

“syntactic predicates” (lookahead depth), o “backtrack”

(ya viene automático). ANTLR 4 soporta recursión directa

por la izquierda de manera que expresar cosas como una

expresión aritmética se vuelve mucho más fácil y natural.

ANTLR 4 a su vez construye automáticamente Parse

Trees mientras que la construcción AST ya no es una

opción.

Otra gran diferencia es que en ANTLR 4 se fomenta la no

utilización de acciones directamente en la gramática, esto

es, a utilizar los “listeners” y “visitors” generados

automáticamente por ANTLR y dedicar el trabajo de la

funcionalidad dentro del código Java, y no directamente

en la gramática, como solía ser anteriormente. Ya no

existen los Tree Grammars (o TreeWalkers mencionados

anteriormente) porque ahora en lugar de ellos se utilizan

listeners y visitors.

La idea de utilizar los listener o los visitor es generar una

nueva clase que extienda de ellas, implementando todos

sus métodos que son en el fondo las acciones asociadas a

la gramática, para así poder tener una gramática limpia, lo

que no implica que no se pueda utilizar una gramática con

código intermedio.

Si está considerando el uso de ANTLR para ejecutar

lógica personalizada basada en el contenido de la entrada

que se adhieren a la sintaxis en un archivo de gramática.

Si su lógica es bastante simple, y su gramática sólo será

utilizada para una aplicación de un solo idioma, podría

considerar la incorporación de la lógica (código

intermedio) en el archivo de gramática en sí. Si la lógica

es compleja, y / o su gramática se utilizará para múltiples

aplicaciones de lenguaje, debe evitar acciones incrustadas

y se pega con los Visitor y Listener.

Listener

Los listeners son buenos para ejecutar código cada vez

que tu parser encuentra una regla particular. A pesar de

que el mismo efecto se puede lograr con un visitor,

usando un listener no requiere que tú visites manualmente

los nodos hijos del árbol de análisis sintáctico, diferente a

usar un visitor. Por defecto, todos los nodos en un árbol

de análisis sintáctico son visitados por un listener, en otras

palabras, el árbol de análisis sintáctico entero es recorrido.

Cuando das tu gramática a ANTLR para la generación de

un lexer y un parser, incluye el argumento -listener para

decirle a ANTLR que tu plan en la escritura es con uno o

más listeners.

“ANTLR genera por defecto los listeners”

r ! : a :A { #r = #a; }

expr : expr '*' expr

| expr '+' expr

| INT

;

Page 12: AMBITOS DE APLICACIÓN DE LOS LENGUAJES ...dns.uls.cl/~ej/web_talf_2020/CATALOG-2-TALF-FINAL.pdflenguajes formales y el desarrollo sistemático de intérpretes, filtros y transformaciones

Visitor

Los visitor se utilizan para visitar selectivamente nodos en

un árbol de análisis sintáctico ANTLR. Si usted tiene una

aplicación de lenguaje que no tiene que visitar cada nodo

en un árbol de análisis sintáctico, o si las visitas son

dependientes de contexto, debe implementar su lógica

dentro de un visitante. Cuando le das a tu gramática para

antlr para lexer y la generación de parser, incluya el

argumento -visitor para decirle ANTLR que piensa en la

escritura de uno o más visitantes.

“no-listener –visitor”

CONCLUSIONES

La creación de lenguajes específicos como los DSL y el uso

de la herramienta ANTLR en la implementación de

gramáticas, analizadores léxicos y sintácticos son muy

útiles a la hora de enfrentar unas de las cosas más

esenciales para un estudiante de ingeniería en computación,

cómo trabajar con su propio lenguaje, a través de la carrera

se van aprendiendo distintos tipos de lenguajes de

programación pero nunca se ve realmente como se han

creado éstos, entonces al pasar por este curso y utilizar las

herramientas se puede apreciar la complejidad que existe al

crear un nuevo tipo de lenguaje, además de conocer el

proceso de compilación de los códigos fuentes. Esta

herramienta que facilita la creación de nuevos lenguajes,

además, permite facilitar las tareas a personas que tengan

interés de aplicar programación a sus actividades diarias

pero simplificándoles las vida creando un DSL apropiado

para su actividad, especialmente en el área científica.

La utilización de un DSL lleva a pensar en la idea de

construir un propio lenguaje específico dentro de una

aplicación, esto significa que el nivel de abstracción será

mucho más alto, y por tanto, se podrá hacer enfoque en

otras funcionalidades dentro de la aplicación, considerando

el ejemplo de que, a partir de una simple regla creada en

una gramática, implementarla sin un DSL en lenguaje Java,

por ejemplo, llevaría mucho más esfuerzo y tendría cientos

de líneas, en cambio con el uso DSL se traduce sólo a

algunas líneas y se podrá hacer enfoque en otras cosas

además de la programación, creando nuevas

funcionalidades que un lenguaje general (General Purpose

Language) no trae, ejemplos claros de DSL son HTML y

SQL.

El uso de DSLs además, nos da la habilidad de poder

comunicar una o más aplicaciones entre sí, lo que potencia

mucho más el intercambio y utilización de información

dentro de un software, lo cual es primordial en la

implementación de proyectos de carácter empresarial.

AGRADECIMENTOS

Se agradece a Stephen A. Edwards por facilitar los

proyectos de sus estudiantes públicamente para que

puedan ser utilizados por quien los necesite.

REFERENCIAS

[1] ANTLRv4. http://www.antlr.org/. Fecha de consulta:

30 Junio 2015.

[2] J. Bovet, T. Parr. ANTLRWorks2: an ANTLR grammar development environment. ANTLRWorks 2 is a complete rewrite of the previous grammar tool using several new techniques developed at Tunnel Vision Labs.

[3] T. Parr: The Definitive ANTLR Reference: Building

Domain-Specific Languages. Raleigh: The Pragmatic

Bookshelf, 2007.

[4] M. Fowler, Domain-Specific Languages, October 3,

2010, ISBN-13: 978-0321-71294-3.

[5] D. Ghosh, DSLs in Action, Manning Publication,

2011, ISBN-13:978-1-935182-45-0.

[6] ACM. Computing Curricula 2005.

http://www.acm.org/education/education/curric_vols/

CC2005-March06Final.pdf. Fecha de consulta: 30

Junio 2013.