Resumen
En este tema se han visto los siguientes conceptos:
- El análisis semántico es la última fase de análisis.
- Por tanto, se encarga de detectar todos los errores que queden que puedan detectarse con comprobaciones estáticas.
- Las comprobaciones estáticas se realizan añadiendo reglas a los nodos del árbol. Para comprobar la validez del árbol, se recorre este y se comprueba que todas las reglas se cumplen.
- Las comprobaciones a realizar se especifican en una gramática atribuida, la cual indica qué condiciones deben cumplir ciertos nodos del árbol (predicados), qué información adicional se necesita añadir al árbol (atributos) y cómo se inicializan estos atributos (funciones semánticas).
- En una gramática atribuida sólo hay dos formas de pasar información entre los nodos: de padre a hijo (atributos heredados) y de hijo a padre (sintetizados).
- A la hora de aplicar una gramática atribuida hay que garantizar que se siga un orden topológico, es decir, que ninguna regla se aplique antes de que todos los atributos que utilice hayan sido inicializados.
- A la hora de implementar una gramática atribuida:
- El patrón postorden es una forma de obtener código que siga un orden topológico sólo si la gramática es L-atribuida, es decir, si no hay ningún atributo heredado que se inicialice a partir de un sintetizado del mismo nodo o de un nodo hermano de su derecha.
- En caso de que la gramática no sea L-atribuida, hay que buscar otro orden a medida para dicha gramática.