Función del análisis semántico
Los programas que se compilan no son solamente cadenas de símbolos sin ningún significado que pueden ser aceptadas como correctas o no por una máquina abstracta. El lenguaje no es más que el vehículo por el cual se intenta transmitir una serie de instrucciones a un procesador para que éste las ejecute produciendo unos resultados. Por ello, la tarea del compiladorrequiere la extracción del contenido semántico incluido en las distintas sentencias del programa.
Por todo ello, se hace necesario dotar al compilador de una serie de rutinas auxiliares que permitan captar todo aquello que no se ha expresado mediante la sintaxis del lenguaje y todo aquello que hace descender a nuestro lenguaje de programación de las alturas de una máquina abstracta hasta elnivel de un computador real. A todas estas rutinas auxiliares se les denomina genéricamente análisis semántico.
El análisis semántico, a diferencia de otras fases, no se realiza claramente diferenciado del resto de las tareas que lleva a cabo el compilador, más bien podría decirse que el análisis semántico completa las dos fases anteriores de análisis lexicográfico y sintáctico incorporando ciertascomprobaciones que no pueden asimilarse al mero reconocimiento de una cadena dentro de un lenguaje.
La fase de análisis semántico revisa el programa fuente para tratar de encontrar errores semánticos y reúne la información sobre los tipos para la fase posterior de generación de código. En ella se utiliza la estructura jerárquica determinada por la fase de análisis sintáctico para identificar losoperadores y operandos de expresiones y proposiciones.
Un componente importante del análisis semántico es la Verificación de Tipos. Aquí, el compilador verifica si cada operador tiene operandos permitidos por la especificación del lenguaje fuente.
Reglas semánticas
Un lenguaje está formado por reglas semánticas que proporcionan el significado a una sentencia o instrucción del lenguaje. Lasreglas semánticas vienen dadas en función de los atributos de los demás símbolos que componen la regla. La evaluación de las reglas semánticas puede generar código, guardar información en una tabla de símbolos, emitir mensajes de error o realizar otras actividades. La traducción de la cadena de componentes léxicos es el resultado obtenido al evaluar las reglas semánticas. La evaluación de las reglassemánticas define los valores de los atributos en los nodos del árbol de análisis sintáctico para la cadena de entrada. Una regla semántica también puede tener efectos colaterales, por ejemplo, imprimir un valor o actualizar una variable global.
Compatibilidad de tipos
Un compilador debe comprobar si el programa fuente sigue tanto las convenciones sintácticas como las semánticas del lenguajefuente. Esta comprobación, llamada comprobación estática (para distinguirla de la comprobación dinámica que se realiza durante la ejecución del programa objeto), garantiza la detección y comunicación de algunas clases de errores de programación. Los ejemplos de comprobación estática incluyen:
Comprobaciones de tipos. Un compilador debe informar de un error si se aplica un operador a un operandoincompatible, por ejemplo, si se suman una variable tipo matriz y una variable de función.
Comprobaciones del flujo de control. Las proposiciones que hacen que el flujo del control abandone una construcción deben tener algún lugar a dónde transferir el flujo de control Por ejemplo, una proposición break en C hace que el control abandone la proposición que la engloba, while, for o switch máscercana si dicha proposición englobadora no existe, ocurre un error.
Comprobaciones relacionadas con nombres. En ocasiones, el mismo nombre debe aparecer dos o más veces en un mismo bloque de instrucciones, el compilador debe comprobar que se utilice el mismo nombre en ambos sitios.
Un comprobador de tipos se asegura de que el tipo de una construcción coincida con el previsto en su contexto....
Regístrate para leer el documento completo.