Hora de leer Aho & Ullman/Dragon reserve con cuidado.
El análisis semántico es la actividad de un compilador para determinar qué tipos de varios valores son, cómo esos tipos interactúan en expresiones y si esas interacciones son semánticamente razonables. Por ejemplo, no se puede multiplicar razonablemente una cadena de nombre de la clase, aunque ningún editor le impedirá escribir
"abc" * MyClass
Para ello, el compilador debe primero identificar las declaraciones y alcances, y por lo general registra el resultado de esta paso en un conjunto de tablas de símbolos. Esto le dice qué significa identificadores específicos en contextos específicos. También debe determinar los tipos de varias constantes literales; "abc" es un tipo diferente de 12.2e-5.
Luego debe visitar todas las ubicaciones donde se usan identificadores y literales, y verificar que el uso del identificador/literal y los resultados calculados sean compatibles con la definición del lenguaje (como en el ejemplo anterior).
En cuanto a cómo se hace esto: por lo general se analiza el código fuente, se construye una representación del programa (árboles de sintaxis son muy populares), y se camina que la representación ("visitada") elemento por elemento para recoger/validar la información semántica. La tabla de símbolos generalmente es solo un conjunto de tablas hash asociadas con el árbol de sintaxis que representa un alcance, el hash desde los identificadores hasta las estructuras que contienen declaraciones de tipo.
¿No cubrió este material en su clase? –
@IraBaxter: Sí, pero superficialmente de lo que preguntó durante el examen. (mal mal inglés, lo siento) – Overflowh
Esto es más como un "problema humano" que un "problema técnico", a veces los maestros esperan que una respuesta sea muy específica a lo que hablan en clase ... – umlcat