Fundamentos de la Traducción de Lenguajes: Análisis Semántico y Tablas de Símbolos

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 3,97 KB

Acciones Agregadas en un Analizador Sintáctico Descendente (Top-Down)

Muchas de las actividades que realiza un analizador semántico no son estándares y dependerán del objetivo del lenguaje de programación. Por ejemplo, en algunas aplicaciones es interesante conocer que los datos estén en algún rango válido o que ciertos valores se utilicen para uso reservado.

En ocasiones, nos interesa conocer el significado de las palabras de algún lenguaje dependiendo del contexto (gramáticas de tipo 1) para diferenciar palabras polisémicas.

La Web es una base de datos en la mayoría de los casos sin sentidos, por lo que la tercera generación de la Web será la llamada Web Semántica.

Administración de la Tabla de Símbolos

La tabla de símbolos también recibe el nombre de ambiente. Un ambiente contiene un conjunto de parámetros que solo son visibles en ese ambiente.

La tabla de símbolos se mantiene durante todo el proceso de traducción, agregando elementos específicos en cada paso.

Operaciones sobre la Tabla de Símbolos

  • Inserta(símbolo)
  • Existe(nombre)
  • Tipo(nombre)

Pila Semántica

  • Contiene registros semánticos y sirve como estructura de datos que subyace el proceso.
  • Cada rutina semántica actúa sobre la pila semántica.
  • Existe un registro especial: registro semántico de error. Es absorbente.
  • Esta pila puede estar ligada a la pila sintáctica que tiene el parser.

Símbolos de Acción

  • Son señales especiales para que el parser ejecute una función (rutina semántica).

Existe una rutina semántica asociada a cada símbolo de acción.

Funciones en la Pila Semántica

  • Funciones: push(registro), pop(k registros), search(tipo), remove(tipo).
  • Registro semántico: Un objeto con tipo, nombre de variable, operador, etc.

Errores Semánticos

Los errores semánticos no impiden que el programa se compile y se ejecute, pero hacen que funcione de una forma inesperada. Ejemplo: Una expresión puede evaluarse en un orden diferente al esperado, provocando un resultado impredecible.

En cierto modo, este tipo de error es el más difícil de depurar, ya que ni el compilador ni el sistema proporcionan información sobre qué está fallando. Lo único cierto es que el programa no se está comportando como debería.

El primer paso es intentar encontrar una correspondencia entre el código del programa y el comportamiento que se observa. Se necesita formar una hipótesis acerca de qué es lo que el programa está haciendo. Uno de los inconvenientes que hacen esta tarea difícil es que los ordenadores funcionan muy rápido.

El Programa No Funciona

La mejor manera de corregir tu modelo mental es dividir el programa en sus componentes (usualmente las funciones y los métodos) y comprobarlos por separado. Una vez que encuentres la discrepancia entre el modelo mental y la realidad, podrás resolver el problema.

Por supuesto, debes crear y comprobar los componentes a medida que desarrollas el programa. Si encuentras un problema, tan solo debería haber una pequeña parte de código nuevo cuyo funcionamiento no ha sido comprobado.

Expresiones Complejas

Tengo una expresión enorme, pero no hace lo que quería. Siempre y cuando sean legibles, no hay ningún problema por escribir expresiones largas, pero pueden ser difíciles de depurar. Una buena opción es dividir estas expresiones complejas en una serie de asignaciones.

Entradas relacionadas: