errores semanticos

October 20, 2018 | Author: Celeste Acosta Gonzales | Category: Compiler, Programming Language, Computer Program, Computer Science, Software
Share Embed Donate


Short Description

er...

Description

3. MANEJO DE ERRORES Un compilador es un sistema que en la mayoría de los casos tiene que manejar una entrada incorrecta, sobre todo en las primeras etapas de la creación de un programa, es probable que el compilador se usará para efectuar las características que debería proporcionar un buen sistema de edición dirigido por la sintaxis, es decir, para determinar si las variables han sido declaradas antes de usarla, o si faltan corchetes o algo así. Por lo tanto, el manejo de errores es parte importante de un compilador y el escritor del compilador siempre debe tener esto presente durante su diseño. Es indispensable que un compilador:  Sea capaz de detectar errores en la entrada.  El compilador debe recuperarse de los errores sin perder demasiada información.  Debe producir un mensaje de error que permita al programador encontrar y corregir fácilmente los elementos incorrectos de su programa. Es una de las misiones más importantes de un compilador, aunque, al mismo tiempo, es lo que más dificulta su realización. A veces unos errores ocultan otros. A veces un error provoca una avalancha de muchos errores que se solucionan con el primero. Es conveniente un buen manejo de errores, y que el compilador detecte todos los errores que tiene el programa y no se pare en el primero que encuentre.

ERRORES SEMANTICOS Los errores semánticos son más sutiles. Un error semántico se produce cuando la sintaxis del código es correcta, pero la semántica o significado no es el que se pretendía. La construcción obedece las reglas del lenguaje, y por ello el compilador o intérprete no detectan errores semánticos. Un error semántico puede hacer que el programa termine de forma anormal, con o sin un mensaje de error. Los principales errores semánticos son: 

Conversiones de tipos no permitidas: Int x; x=4.32;



Variables usadas y no definidas



String nombre; nombre= “José”; apellido=”Pérez”; Operandos de tipos no compatibles

La variable “x “está declarada como entero, por lo tanto, no se le puede asignar un valor de tipo flotante.

La variable “apellido“no ha sido declarada

Ejemplo: A: float; B: String; A:=B+5;

Análisis Sintáctico: Se

realiza el árbol sintáctico y comprobamos su validez

La sintaxis es válida.

Análisis Semántico Hasta aquí la entrada es léxica y sintácticamente valida, ahora se analiza desde el punto de vista semántico.

Error

Cadena + entero= error_tipo

Se comprueba que los operandos son de tipo no compatibles, por lo cual existe error semántico.

TRATAMIENTO DE ERRORES SEMANTICOS

Comprobación de tipos 1. Aspectos Generales Un lenguaje con comprobación fuerte de tipos es capaz de garantizar que los programas se pueden ejecutar sin errores de tipo, por lo que los errores de tipo se detectarán siempre en tiempo de compilación. Como mínimo, ante un error, un comprobador de tipos debe informar de la naturaleza y posición del error y recuperarse para continuar con la comprobación del resto del programa a analizar. Veamos algunas de las operaciones a tener en cuenta en una comprobación de tipos:    

Conversión de tipos: A veces es necesario transformar el tipo de una expresión para utilizar correctamente un operador o para pasar de forma adecuada un parámetro a una función. Coerción: Es una conversión de tipos que realiza de forma implícita el propio compilador. Si es el programador el que realiza la conversión se tratará entonces de una conversión explícita. Sobrecarga de operadores: La sobrecarga se resuelve determinando el tipo de cada una de las expresiones intervinientes en la sobrecarga. Funciones polimórficas: Son aquellas que trabajan con argumentos cuyo tipo puede cambiaren distintas llamadas a la función

2. Especificación de un comprobador de tipos básico Básicamente se deberán realizar dos tareas: a) Asignación de tipos: en las declaraciones. b) Evaluación y comprobación de tipos: En las expresiones y en las funciones, así como en las sentencias.

CONCLUSION: Decimos que los errores encontrados en las distintas fases de análisis se envían a un módulo denominado manejador de errores. En el caso más sencillo puede ser un subprograma al que se le invoca enviándole el código de error, y que se puede encargar de escribir un mensaje con el error correspondiente. Este tratamiento para los errores que surgen en la creación de cualquier programa resulta muy útil, ya que sin este la creación de un programa seria tediosa y complicada ya que no sabríamos donde cometimos algún error y la única solución sería analizar todo el código línea por línea.

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF