Investigación de generadores de analizadores léxicos y sintácticos

Solo disponible en BuenasTareas
  • Páginas : 5 (1193 palabras )
  • Descarga(s) : 0
  • Publicado : 4 de marzo de 2012
Leer documento completo
Vista previa del texto
Universidad de San Carlos de Guatemala Facultad de Ingeniería Escuela de Ciencias y Sistemas Organización de Lenguajes y Compiladores 1 Sección B Laboratorio

Práctica 1 Generadores de analizadores léxicos (JLex, Flex) y sintácticos (CUP, Bison, Gold Parser)

Luis Fernando Morales Mejicanos 201020573 Guatemala, 8 de febrero de 2012

JLex y Cup aplicados a Java JLex:
JLex es un generadorde analizadores léxicos, implementado y escrito en Java. Este analizador léxico se basa en el conocido analizador Lex. JLex fue, por primera vez, desarrollado por Elliot Berk en la Universidad de Princeton en 1996. Posee una licencia Open Source compatible con la licencia GPL. JLex es mantenido hoy en día por el doctor C. Scott Ananian. Uso de JLex Un archivo de entrada de JLex está dividio en 3secciones, separadas por signos de porcentaje dobles (“%%”). Un archivo de entrada de JLex propiamente estructurado tiene el siguiente formato. Código de Usuario %% Directivas de JLex %% Reglas para definiciones y expresiones regulares. Los caractéres %% deben ser puestos al inicio de cada sección, pues dichas secciones identifican su inicio de ésta forma. Código de Usuario Precede el primer par de%, Éste código es copiado palabra por palabra en el inicio del archivo fuente del analizador léxico, el cúal es un archivo de salida de JLex. Sin embargo, si el código fuente léxico del archivo necesita comenzar con una declaración de paquete o una importación de una clase externa, la sección de código de usuario debe comenzar con dicha importación o declaración. Directivas de JLex Los caractéres%{...%} permiten al usuario escribir código de java para ser copiado en la clase del analizador léxico. Se utiliza de la siguiente manera: %{ %} Reglas para definiciones y expresiones regulares La tercera parte de la especificación de JLex consiste en una serie de reglas para romper la cadena de entrada en tokens. Estas reglas especifican expresiones regulares, luego asocia estas expresiones conacciones que consisten en código fuente de Java.

CUP:
CUP o JavaCup es un generador de analizadores sintácticos (parser-generator). Este generador construye parsers para gramáticas de tipo LALR, con código de producción y asociación de fragmentos de código Java. Cuando una producción en particular es reconocida, se genera un archivo fuente Java, parser.java que contiene una clase parser, conun método Symbol parser(). El nombre de CUP significa Constructor of Useful Parsers en inglés (constructor de parsers útiles). Estructura de un archivo CUP Un archivo Cup bien construido posee la siguiente estructura: • Imports de java • Código del usuario para el parser. • Código del usuario para las acciones de la gramática. • Declaración de las variables para la gramática • Gramática Imports Enésta sección se importan las librerías de java a utilizarse en el archivo de cup. Código del usuario para el parser En ésta sección se declaran los métodos y variables a utilizar en la clase resultante. Al declararse públicos pueden ser utilizados por otras clases diferentes a la clase resultante. Su estructura es: parser code {: /* código del parser */} Código del usuario para las acciones de lagramática En ésta sección se declaran los métodos y funciones (acciones) que se utilizarán en las producciones gramaticales. Generalmente entre éstas acciones se encuentran las salidas del compilador o intérprete. Se declara de la siguiente manera: action code {:/*Codigo para las acciones*/:} Declaración de las variables para la gramática En ésta sección se declaran las variables (símbolos) queserán utilizadas en la gramática. Éstas pueden ser terminales o no terminales. La sintaxis para la declaración de cada variable es la siguiente: < tipo de dato > < id de la variable > Gramática En ésta sección del archivo se escribe la gramática con la sintaxis aceptada para CUP. Cada producción

se escribe con la siguiente sintaxis: ::=

Flex y GNU-Bison aplicados a C++ (QT) Flex
Llamado...
tracking img