nacheteam/Procesadores-de-Lenguajes

Comprobaciones semánticas

Closed this issue · 1 comments

El programa ejecutable obtenido debe realizar todo el análisis semántico y sintáctico en una sola pasada.

Debe poder comprobarse:

  • El punto en que se usa un identificador pertenece a su ámbito.
  • En el ámbito de un identificador puede declararse otro con el mismo nombre, pero no en el mismo
    bloque en el que está declarado el primero.
  • En el caso de asignaciones, el tipo de la parte izquierda debe coincidir con el tipo de la expresión en
    la parte derecha.
  • En el caso de llamadas a procedimientos y funciones, el tipo, número y orden de las expresiones
    que forman los parámetros actuales deben coincidir con el tipo, número y orden de los parámetros
    formales especificados en su declaración.
  • En el caso de expresiones que incluyan un operador (ya sean unarios, binarios o ternarios , comprobar que el operador es compatible con el tipo de las sub-expresiones sobre las que actúa (ver
    apéndice A). (se debe sintetizar el tipo ascendentemente. Esto se realiza dando valor al campo dtipo de la pseudovariable $$.)
  • En las sentencias de control de flujo, como if, while, etc.. se debe comprobar que la expresión
    que forma la condición es de tipo booleano.

En el apéndice F también se especifica cómo hacerlo.
Para la mayoría si no todos de estos hay ejemplos en las diapositivas del tipo de reglas semánticas a usar.

Para el primer punto el grupo de Antonio interpreta que es que la siguiente situación no debería dar error semántico:

int x;
void f(){
  int x;
}

Por tanto hay que modificar se ha modificado el comportamiento para que se compruebe duplicados sólo en el último bloque