Archivo

Archive for the ‘compiladores’ Category

Analizador lexico, sintactico, semantico de calculadora

febrero 17, 2011 1 comentario

Analizador Léxico.

Es un programa que recibe como entrada el codigo fuente de otro programa (secuencia de caracteres) y produce una salida compuesta de tokens (componentes lexicos o simbolos). Estos tokens sirve para una posterior etapa del proceso de traduccion, siendo la entrada para le analizador sintáctico.

TOKENS LEXEMA
numeros [0-9]
abre_parentesis (
cierre_parentesis )
opera_suma +
opera_resta
opera_multi *
opera_division /
potencia ˄
asignacion =
Punto


Analizador Sintactico

analisis sintactico es una de las partes de un compilador que transforma su entrada en un arbol de derivacion.

El analizador sintactico convierte el texto en otras estructuras comunmente arboles, que son mas utilies para el posterior analisis, y captura la jerarquia implicita de la entrada. En este los que son procesados son los tokens para construir la estructura de datos por ejemplo un arbol de analisis o arboles de sintaxis abstracta.

Leer más…

JAVACC

febrero 2, 2011 Deja un comentario

El generador JavaCC (Java Compiler Compiler) es una  herramienta para generar programas escritos en lenguaje Java; acepta como entrada una especificación de un determinado lenguaje y produce como salida un analizador para ese lenguaje. En la manera más simple de funcionamiento, la especificación proporcionada define las características sintácticas y lexicográficas de un lenguaje y se genera un analizador léxicosintáctico del lenguaje especificado; pero también es posible completar una especificación léxico-sintáctica con la inclusión adecuada de código para que el programa generado llegue a ser un analizador completo del lenguaje..

Características principales

  • Top-Down. Recursividad descendente, capaz de pasar atributos(valores) de abajo hacia arriba.
  • Especificación lexica y gramatica en un unico fichero
  • Especificación LL(k) para resolver ambiguedades.
  • Incorpora distintos tipos de tokens: normales (TOKEN), especiales(SPECIAL_TOKEN), espaciadores (SKIP) y de continuación (MORE). Ellopermite trabajar con especificaciones más claras, a la vez que permite unamejor gestión de los mensajes de error y advertencia por parte de JavaCC entiempo de meta-compilación.
  • La especificación léxica puede definir tokens de manera tal que no sediferencien las mayúsculas de las minúsculas bien a nivel global, bien en unpatrón concreto.
  • De entre los generadores de analizadores sintácticos descendentes, JavaCC es uno de los que poseen mejor gestión de errores. Los analizadores generadospor JavaCC son capaces de localizar exactamente la ubicación de los errores,proporcionando información diagnóstica completa.
  • Permite depurar tanto el analizador sintáctico generado como el lexicográfico,mediante las opciones DEBUG_PARSER, DEBUG_LOOKAHEAD, yDEBUG_TOKEN_MANAGER.
  • Incluye la herramienta JJTree, un preprocesador para el desarrollo de árbolescon características muy potentes.

Obtención de un analizador léxico-sintáctico

  1. Edición de la especificación (editor de texto plano)
vi | edit |· · ·  NombreFichero.jj

(el nombre del fichero puede tener cualquier extensión

2.  Ejecución del generador

javacc NombreFichero.jj

Si el nombre elegido para la especificación es  NombreDeLaEspecif, como resultado de la generación se obtiene el fichero.

NombreDeLaEspecif.java

3. Compilación del analizador generado

javac NombreDeLaEspecif.java

Como resultado de la compilación se obtiene (además de otras clases auxiliares) el fichero

NombreDeLaEspecif.class

• Ejecución del analizador generado

Si el nombre del fichero donde se encuentra el texto fuente (escrito en el lenguaje para el que se ha generado el analizador) que se pretende analizar es  Programa.len

java NombreDeLaEspecif < Programa.len

Si se desea que los resultados del análisis, en vez de presentarse por pantalla, queden grabados en un fichero de nombre  Salida.dat

java NombreDeLaEspecif < Programa.len > Salida.dat

Estructura de un programa en javaCC.

La estructura básica de un programa javaCC es:

options{
area de opciones
}
PARSER_BEGIN(nombre clase)
unidad de compilación java con la clase de nombre NombreClase
PARSER_END(NombreClase)
área tokens
área de funciones BNF

El área de opciones permite especificar algunas directrices que ayuden aJavaCC a generar analizadores léxico-sintácticos bien más eficientes, bien másadaptados a las necesidades concretas del desarrollador.

Las cláusulas PARSER_BEGIN y PARSER_END sirven para indicarle a JavaCC el nombre de nuestra clase principal, así como para englobar tanto a ésta comoa cualesquiera otras que se quieran incluir de apoyo, como pueda ser por ejemplo. Un gestor de tablas de símbolos.

ANTLR

febrero 2, 2011 Deja un comentario

Es una herramienta que proporcionaun marco de trabajo para la construccion de reconocedores, interpretes, cmpiladores y traductores de lenguajesa partir de gramaticas eriquecidas con acciones. En resumen proporciona todo lo necesario para el desarrollo de es tipo de sistemas. entre los mas importrantes.

  • Construcción de analizadores lexicos
  • Construcción de analizadores sintacticos
  • Mecanismos de construcción y recorriudos de arboles de sintaxis abstracta (AST)
  • Mecanismo de tratamiento de plantillas
  • Mecanismo de detección  y recuperación de errores

Como ventajas adicionales que diferencian a  ANTLR de otras herramientas similares podemos citar la posibilidad de generar el codigo de salida en diferentes lenguajes como Java, C, C#, C++ o Phyton, y el hecho de disponer de un entorno de desarrollo propio llamado ANTLRWorks que nos permitirá construir de una forma amigable las gramática de entrada a la herramienta, proporcionando representaciones gráficas de las expresiones y arboles generados, e incluyendo un interprete depurador propio.

Permite resolver las ambigüedades de las gramáticas, la tolerancia a fallos programa de análisis y reporte de errores, creacion de a rboles, generacion de codigo fuente.

ANTLR Works es un entorno de desarrollo con interfaz grafica que permite el desarrollo de gramaticas para le version 3.0 o superior de ANTLR. Cosnsite en una aplicacion independiente Java que se puede ejecutar directamente desde un jar. De quererese incorporar las funciobnalidades de ANTLR en ambiente de desarrollo ya existentes, estan los plugins, que se pueden bajar directamente de la web del autor para poder trabajar en NetBeans, Eclipse

ANTLR permite definir las reglas que el analizador léxico debe usar para dividir otra secuencia de caracteres y las normas que el analizador debe utilizar para interpretar una secuencia de tokens. ANTLR puede generar un analizador léxico y un analizador que se puede utilizar para interpretar los programas escritos en su idioma y traducirlas a otros idiomas y de AST. El diseño de ANTLR ofrece extensibilidad mucho y tiene muchas aplicaciones.

Notación ANTLR.

ANTLR especifica que las reglas léxicas y analizador de reglas con el casi exactamente la misma notación, la notación ANTLR se basa en la notación de YACC y hay algunas construcciones EBNF tirado en una buena medida. Una regla es simplemente una secuencia de instrucciones que describen un patrón particular, que debe coincidir con ANTLR.

Cero o mas.

  • ANTLR usa la notación (expresión) * para indicar que la búsqueda de la expresión patrón especificado dentro de los paréntesis debe ir acompañada de cero o más veces.

Uno o mas.

  • ANTLR usa la notación (expresión) + para indicar que la coincidencia de patrones expresión especificada dentro de los paréntesis debe ir acompañada de una o más veces.

Opcional.

  • ANTLR usa la notación (expresión)? Para indicar que la búsqueda de la expresión patrón especificado dentro de los paréntesis debe ir acompañada de cero o una vez, en otras palabras, es opcional.

links:

http://www.antlr.org/

tutorial: http://www.antlr.org/works/index.html

introduccion y ejemplos: http://supportweb.cs.bham.ac.uk/docs/tutorials/docsystem/build/tutorials/antlr/antlr.html