Duplicados globales: Como ya se tiene almacenados toda la información (expresión, tipo, ámbito, línea, columna, parámetro, lexema) de las variables en la tabla de símbolos, primero se capturan todas la variables globales y después se hace una búsqueda en las variables locales, si se encuentra una variable local declarada igual a una variable global, el programa despliega un mensaje de error.
Verificación local: se despliega error si alguno de los parámetros tiene el mismo nombre que su función o procedimiento padre. También verifica que no se declaran variables con el mismo nombre que su función o procedimiento padre. Para ambos casos se despliega un mensaje de error.
Verificación de Tipos: esta verificación se realiza dentro del parser, cuando el parser llega a la gramática en donde se realizan las asignaciones (variable:=valor), primero tomo la información (texto, línea, columna) de la variable y la información del valor, segundo la tabla de símbolos cuanta con una función (sus parámetros son una expresión y el ámbito de la expresión) que retorna el tipo de la expresión (ó variable ó valor). Como ya tenemos el tipo de la variable y del valor ahora se verifican los siguientes casos:
- El valor es un Entero (variable:=12), este debe cumplir que la variable sea también de tipo entero.
- El valor es un carácter (variable:=”c”), este debe cumplir que la variable sea también de tipo carácter.
- El valor es un String (variable:=’hola’), no se pueden aplicar Strings a variables de tipo entero o carácter.
- Si retorna que el valor no tiene tipo es porque se esta aplicando una asignación a un procedimiento.
- El caso en donde los dos son identificadores (el valor puede ser un identificador simple o un a función) , simplemente se hace una comparación de los tipos, si no coinciden se despliega un error
- Nota: en este momento no se esta verificando el tipo de asignaciones complejas (x:=a+b)
No hay comentarios.:
Publicar un comentario