Análisis semántico

Solo disponible en BuenasTareas
  • Páginas : 10 (2364 palabras )
  • Descarga(s) : 0
  • Publicado : 27 de febrero de 2012
Leer documento completo
Vista previa del texto
Introducción

El análisis semántico utiliza como entrada el árbol sintáctico detectado por el análisis sintáctico para comprobar restricciones de tipo y otras limitaciones semánticas y preparar la generación de código.

En compiladores de un solo paso, las llamadas a las rutinas semánticas se realizan directamente desde el analizador sintáctico y son dichas rutinas las que llaman al generadorde código. El instrumento más utilizado para conseguirlo es la gramática de atributos.

En compiladores de dos o más pasos, el análisis semántico se realiza independientemente de la generación de código, pasándose información a través de un archivo intermedio, que normalmente contiene información sobre el árbol sintáctico en forma linealizada (para facilitar su manejo y hacer posible sualmacenamiento en memoria auxiliar).

En cualquier caso, las rutinas semánticas suelen hacer uso de una pila (la pila semántica) que contiene la información semántica asociada a los operandos (y a veces a los operadores) en forma de registros semánticos.

Tareas y Objetivos del Análisis Semántico

Como comentábamos al comienzo de este libro, el análisis semántico11 de un procesador de lenguaje esla fase encargada de detectar la validez semántica de las sentencias aceptadas por el analizador sintáctico. También comentábamos cómo, de un modo convencional y menos formal, se suele afirmar que la sintaxis de un lenguaje de programación es aquella parte del lenguaje que puede ser descrita mediante una gramática libre de contexto, mientras que el análisis semántico es la parte de suespecificación que no puede ser descrita por la sintaxis.

En el diagrama de fases de un compilador [Aho90] podemos destacar, a raíz de las dos definiciones previas, una mayor interconexión entre la fase de análisis semántico y las siguientes fases de un compilador:

Como se muestra en la Figura 1, la entrada del analizador semántico es la salida generada por el analizador sintáctico. La estructura empleadapara intercambiar la información entre estas dos fases es lo que se conoce como árbol sintáctico –o una simplificación del mismo, denominada árbol sintáctico abstracto. Una vez validada la sintaxis de un programa, el análisis semántico aplicará reglas semánticas para validar dicho árbol.

5.1 Analizador Semántico

Un analizador sintáctico es una de las partes de un compilador que transformasu entrada en un árbol de derivación.

El análisis sintáctico convierte el texto de entrada en otras estructuras (comúnmente árboles), que son más útiles para el posterior análisis y capturan la jerarquía implícita de la entrada. Un analizador léxico crea tokens de una secuencia de caracteres de entrada y son estos tokens los que son procesados por el analizador sintáctico para construir laestructura de datos, por ejemplo un árbol de análisis o árboles de sintaxis abstracta.

El análisis sintáctico también es un estado inicial del análisis de frases de lenguaje natural. Es usado para generar diagramas de lenguajes que usan flexión gramatical, como los idiomas romances o el latín. Los lenguajes habitualmente reconocidos por los analizadores sintácticos son los lenguajes libres decontexto. Cabe notar que existe una justificación formal que establece que los lenguajes libres de contexto son aquellos reconocibles por un autómata de pila, de modo que todo analizador sintáctico que reconozca un lenguaje libre de contexto es equivalente en capacidad computacional a un autómata de pila.

Los analizadores sintácticos fueron extensivamente estudiados durante los años 70 del siglo XX,detectándose numerosos patrones de funcionamiento en ellos, cosa que permitió la creación de programas generadores de analizadores sintácticos a partir de una especificación de la sintaxis del lenguaje en forma Backus-Naur por ejemplo, tales y como yacc, GNU bison y javaCC.

5.2 Verificación de Tipos en Expresiones

• La verificación de los tipos de datos se hace asignando el valor de tipo...
tracking img