1.3 y 1.4

6
Alexis Andrade Loeza Instituto Tecnológico Superior de Valladolid. 1.3 Comprobaciones de tipos en expresiones. La verificación o comprobación de tipos es una técnica utilizada para asegur que un programa obedece las reglas de compatibilidad específicas del lenguaj de programación utilizado y se puede realizar de dos formas: En tiempo de ejecución o de manera estática. La verificación o comprobación de los tipos de datos se ace asignando el valor de tipo de cada una de los componentes lé!icos. Estos valores se comparan para verificar que los tipos de datos coincidan y sean congruentes" de lo contrario no se pueden realizar los cálculos. #uando mezclamos diferentes tipos en una misma e!presión o que llamamos una rutina que no e!iste un error semántico. $na de las funciones del analizador semántico es verificar que los tipo de una e!presión sean compatibles entre sí. %ara acer lo anterior el compilador cuenta con información de los atributos &tipos" tama'o" n(mero de argumento" etc.) de los identificadores en una tabla de símbolos. *ay situaciones en las cuales se tiene un valor de un tipo dado y se desea almacenar ese valor en una variable de un tipo diferente. En algunos tipos es posible almacenar simplemente el valor sin una conversión de tipos+ lo que se denomina conversión automática. Existen dos tipos de comprobación: Estática y ,inámica. La comprobación ayuda a evitar la mayoría de los errores de programación. %ara saber si el operador aplicado a los operadores es correcto. Comprobación de flujo de control : -e debe verificar que las instrucciones que cambia el flujo de un programa sean válidos. Ejemplo: brea " goto. Comprobación de unicidad: ,efinir un objeto una sola vez. Comprobación relacionada con nombres: El mismo nombre debe aparecer dos veces. /ariables que se declaran pero no utilizan. La comprobación de tipos es la más complicada. Las demás comprobaciones son rutinarias. El operador %: 0cupa que los dos operandos sean enteros. Signo +: Es una función suma &a" b) que está sobrecargada para distintos tipo de datos.

Upload: alex-andrade

Post on 04-Oct-2015

222 views

Category:

Documents


0 download

DESCRIPTION

hjhghj

TRANSCRIPT

Alexis Andrade Loeza Instituto Tecnolgico Superior de Valladolid.1.3 Comprobaciones de tipos en expresiones. La verificacin o comprobacin de tipos es una tcnica utilizada para asegurar que un programa obedece las reglas de compatibilidad especficas del lenguaje de programacin utilizado y se puede realizar de dos formas: En tiempo de ejecucin o de manera esttica. La verificacin o comprobacin de los tipos de datos se hace asignando el valor de tipo de cada una de los componentes lxicos. Estos valores se comparan para verificar que los tipos de datos coincidan y sean congruentes, de lo contrario no se pueden realizar los clculos. Cuando mezclamos diferentes tipos en una misma expresin o que llamamos una rutina que no existe un error semntico. Una de las funciones del analizador semntico es verificar que los tipos de una expresin sean compatibles entre s. Para hacer lo anterior el compilador cuenta con informacin de los atributos (tipos, tamao, nmero de argumento, etc.) de los identificadores en una tabla de smbolos.Hay situaciones en las cuales se tiene un valor de un tipo dado y se desea almacenar ese valor en una variable de un tipo diferente.En algunos tipos es posible almacenar simplemente el valor sin una conversin de tipos; lo que se denomina conversin automtica.Existen dos tipos de comprobacin: Esttica y Dinmica. La comprobacin ayuda a evitar la mayora de los errores de programacin. Para saber si el operador aplicado a los operadores es correcto.Comprobacin de flujo de control: Se debe verificar que las instrucciones que cambia el flujo de un programa sean vlidos. Ejemplo: break, goto.Comprobacin de unicidad: Definir un objeto una sola vez.Comprobacin relacionada con nombres: El mismo nombre debe aparecer dos veces. Variables que se declaran pero no utilizan.La comprobacin de tipos es la ms complicada. Las dems comprobaciones son rutinarias.El operador %: Ocupa que los dos operandos sean enteros.Signo +: Es una funcin suma (a, b) que est sobrecargada para distintos tipos de datos. Siempre se disean reglas de tipos como los valores numricos se convierten al de mayor jerarqua o el tipo de datos punteros slo apunta al tipo de datos declarado. Algunos lenguajes revisan el tamao de los arreglos (Java) de manera esttica otros lo hacen de manera dinmica (en tiempo de ejecucin). Al conjunto de reglas que se definen para la comprobacin de los tipos de datos se denomina sistema de tipos. La mayora de veces la recuperacin de errores se suele omitir ya que el programa no finaliza pero tal vez no obtenga los valores deseados.1.4 Pila semntica en un analizador sintctico.DEFINICIN Y DESCRIPCINAnlisis SemnticoDetecta la validez semntica de las sentencias aceptadas por el analizador sintctico. El analizador semntico suele trabajar simultneamente al analizador sintctico. Se entiende por semntica al conjunto de reglas que especifican el significado de cualquier sentencia sintcticamente correcta y escrita en un determinado lenguaje. Las rutinas semnticas deben realizar la evaluacin de los atributos de las gramticas siguiendo las reglas semnticas asociadas a cada produccin de la gramtica. Anlisis SintcticoAnaliza el smbolo, la pila y el estado del autmata, produce las estructuras necesarias para la siguiente etapa y en el caso de compilacin dirigida por la sintaxis invoca llamadas directas al analizador semntico y al generador de cdigo. Escribe mensajes de errores y trata de limitar el efecto de estos errores. "Reconoce la estructura de una cadena de componentes lxicos".

Teora de Pilas Y Colas Son estructuras de datos que se utilizan generalmente para simplificar ciertas operaciones de programacin. Estas estructuras pueden implementarse mediante arrays o listas enlazadas. Al utilizar arreglos para implementar pilas se tiene la limitacin de que se debe reservar el espacio en memoria con anticipacin. Una vez dado un mximo de capacidad a la pila no es posible insertar un nmero de elementos mayor que el mximo establecido.Una posible solucin a este tipo de inconvenientes consiste en definir pilas de gran tamao, pero esto resultar ineficiente y costoso.No siempre es viable saber con exactitud el nmero de elementos a tratar, y siempre existe la posibilidad de que ocurra un error de desbordamiento. Colas

Tambin son llamadas FIFO (First In First Out), que quiere decir El primero que entra es el primero que sale. Las rutinas semnticas suelen hacer uso de una pila (la pila semntica) que contiene la informacin semntica asociada a los operandos (y a veces a los operadores) en forma de registros semnticos. 1. Colas Simples Se inserta por un sitio y se saca por otro, en el caso de la cola simple se inserta por el final y se saca por el principio. Para gestionar este tipo de cola hay que recordar siempre cual es el siguiente elemento que se va a leer y cul es el ltimo elemento que se ha introducido. 2. Colas Circulares En las colas circulares se considera que despus del ltimo elemento se accede de nuevo al primero. De esta forma se reutilizan las posiciones extradas, el final de la cola es a su vez el principio, crendose un circuito cerrado. 3. Colas con Prioridad Las colas con prioridad se implementan mediante listas o arrays Ordenados. No nos interesa en este caso que salgan en el orden de entrada sino con una prioridad que le asignemos. Puede darse el caso que existan varios elementos con la misma prioridad, en este caso saldr primero aquel que primero llego (FIFO).Reglas semnticas Conjunto de normas y especificaciones que definen al lenguaje de programacin y estn dadas por la sintaxis del lenguaje, las reglas semnticas asignan un significado lgico a ciertas expresiones definidas en la sintaxis del lenguaje. Analizador Sintctico Descendente Parten del axioma inicial de la gramtica, se va descendiendo utilizando las derivaciones izquierdas, hasta llegar a construir la cadena analizada. Analizador Sintctico Ascendente Se va construyendo el rbol desde sus nodos terminales. Es decir, se construye desde los smbolos de la cadena hasta llegar al axioma de la gramtica. Un Analizador Sintctico Ascendente utiliza durante el anlisis una pila. En esta va guardando datos que le permiten ir haciendo las operaciones de reduccin que necesita. Para incorporar acciones semnticas como lo es construir el rbol sintctico, es necesario incorporar a la pila del analizador sintctico ascendente otra columna que guarde los atributos de los smbolos que se van analizando; para la integracin total del sistema. El Diseo Descendente es un mtodo para resolver el problema que posteriormente se traducir a un lenguaje comprensible por la computadora. Es el proceso mediante el cual un problema se descompone en una serie de niveles o pasos sucesivos de refinamiento. La metodologa descendiente consiste en efectuar una relacin entre las sucesivas etapas de estructuracin de modo que se relacionen unas con otras mediante entradas y salidas de informacin.Pila

Una coleccin de datos a los cuales se les puede acceder mediante un extremo, que se conoce generalmente como tope. Las Pilas tienen dos operaciones bsicas: Push (para insertar un elemento) Pop (para extraer un elemento). Gracias a las pilas es posible el uso de la recursividad. La variable que llama al mismo procedimiento en el que est, habr que guardarla as como el resto de variables de la nueva llamada, para a la vuelta de la recursividad ir sacndolas, esto es posible a la implementacin de pilas Su caracterstica fundamental es que al extraer se obtiene siempre el ltimo elemento que acaba de insertarse. Por esta razn tambin se conocen como estructuras de datos LIFO.CARACTERSTICAS Su caracterstica fundamental es que al extraer se obtiene siempre el ltimo elemento que acaba de insertarse. Por esta razn tambin se conocen como estructuras de datos LIFO (del ingls Last In First Out). Una posible implementacin mediante listas enlazadas sera insertando y extrayendo siempre por el principio de la lista. Gracias a las pilas es posible el uso de la recursividad. La variable que llama al mismo procedimiento en el que est, habr que guardarla as como el resto de variables de la nueva llamada, para a la vuelta de la recursividad ir sacndolas, esto es posible a la implementacin de pilas. Contiene la informacin semntica asociada a los operandos (y a veces a los operadores) en forma de registros semnticos. Los Autmatas con Pila son una extensin de los AFD a los que se les aade una memoria (pila). En la pila se almacenan smbolos de la cadena de entrada y de la gramtica, as como caracteres especiales (#) para indicar el estado de pila vaca. Las transiciones son de la forma: (p, x, s; q, t):p=estado inicialq=estado al que llegax= smbolo de la cadena de entradas=smbolo que se desapilat=smbolo que se apila Una pila es utilizada para almacenar el prefijo viable de una forma sentencial de una derivacin ms a la derecha. Los smbolos, y son utilizados para identificar el pivote, por lo tanto sabremos cuando Desplazar o cuando Reducir.

VENTAJAS Es posible el uso de la recursividad. La variable que llama al mismo procedimiento en el que est, habr que guardarla as como el resto de variables de la nueva llamada, para a la vuelta de la recursividad ir sacndolas, esto es posible a la implementacin de pilas. Simplifican ciertas operaciones de programacin. Se pueden implementar mediante arrays o listas enlazadas.DESVENTAJAS Se tiene la limitacin de que se debe reservar el espacio en memoria con anticipacin. Una vez dado un mximo de capacidad a la pila no es posible insertar un nmero de elementos mayor que el mximo establecido. Si esto ocurre, en otras palabras si la pila est llena y se intenta insertar un nuevo elemento, se producir un error conocido como desbordamiento-overflow. Se deben definir pilas de gran tamao, pero esto resultar ineficiente y costoso. No siempre es viable saber con exactitud el nmero de elementos a tratar, y siempre existe la posibilidad de que ocurra el error de desbordamiento.