Se han creado algunas herramientas generales para el dise˜no automatico de componentes especıficos de compilador. Estas herramientas utilizan lenguajes especializados para especificar e implantar el componente, y pueden utilizar algoritmos bastante complejos. Las herramientas mas efectivas son las que ocultan los detalles del algoritmo de generacion y producen componentes que se pueden integrar con facilidad al resto del compilador. La siguiente es una lista de algunas herramientasutiles para la construccion de compiladores:
1. Generadores de analizadores sintacticos: Estos generadores producen anal-izadores sintacticos, normalmente a partir de una entrada fundamentada en una gramatica independiente del contexto. En los primeros com-piladores, el analisis sintactico consumıa no solo gran parte del tiempo de ejecucion del compilador, sino gran parte del esfuerzo intelectual de escribirlo. Esta fase se considera ahora una de las mas faciles de aplicar. Muchos de los generadores de analizadores sintacticos utilizan poderosos algoritmos de analisis sintactico, y son demasiado complejos para realizarlos manualmente.
2. Generadores de analizadores lexicos. Estas herramientas generan automaticamente analizadores lexicos, por lo general a partir de una especificacionbasada en expresiones regulares. La organizacion basica del analizadorlexico resultante es en realidad un automata finito. Una herramienta muyutilizada en la especificacion de analizadores lexicos para varios lenguajeses el compilador LEX.
3. Dispositivos de traduccion dirigida por la sintaxis. Estos producen grupos de rutinas que recorren el arbol de analisis sintactico, como el visto enclase, generando codigo intermedio. La idea basica es que se asocian una o mas ”traducciones” con cada nodo del arbol de analisis sintactico, y cada traduccion se define partiendo de traducciones en sus nodos vecinos en el arbol.
4. Generadores automaticos de codigo: Tales herramientas toman un conjunto de reglas que definen la traduccion de cada operacion del lenguaje intermedio al lenguaje de maquina para la maquina objeto. Las reglas deben incluir suficiente detalle para poder manejar los distintos metodos de acceso posibles a los datos; por ejemplo, las variables pueden estaren registros, en una posicion fija (estatica) de memoria o pueden tener asignada una posicion en una pila. La tecnica fundamental es la de ”concordancia de plantillas”. Las proposiciones de codigo intermedio se reemplazan por ”plantillas” que representan secuencias de instruccionesde maquina, de modo que las suposiciones sobre el almacenamiento de las variables concuerden de plantilla a plantilla. Como suele haber muchas opciones en relacion con la ubicacion de las variables (por ejemplo, en uno ovarios registros o en memoria), hay muchas formas posibles de ”cubrir” elcodigo intermedio con un conjunto dado de plantillas, y es necesario seleccionar una buena cobertura sin una explosion combinatoria en el tiempo de ejecucion del compilador.
5. Dispositivos para analisis de flujo de datos: Mucha de la informacion necesaria para hacer una buena optimacion de codigo implica hacer un ”analisis de flujo de datos”, que consiste en la recoleccion de informacion sobre la forma en que se transmiten los valores de una parte de un programa a cada una de las otras partes. Las distintas tareas de esta naturaleza se pueden efectuar esencialmente con la misma rutina, en la que el usuario proporciona los detalles relativos a la relacion que hay entre las proposiciones en codigo intermedio y la informacion que se esta recolectando.
miércoles, 13 de mayo de 2009
Suscribirse a:
Enviar comentarios (Atom)

No hay comentarios:
Publicar un comentario