1 / 19

Docente : Eduardo José González Ehuán

INGENIERIA EN SISTEMAS COMPUTACIONALES Lenguaje y autómatas II Unidad I. 1.2. Acciones semánticas de un analizador sintáctico. 1.3. Comprobaciones de tipos en expresiones. Docente : Eduardo José González Ehuán.

Download Presentation

Docente : Eduardo José González Ehuán

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. INGENIERIA EN SISTEMAS COMPUTACIONALES Lenguaje y autómatas II Unidad I 1.2. Acciones semánticas de un analizador sintáctico. 1.3. Comprobaciones de tipos en expresiones . Docente : Eduardo José González Ehuán

  2. El análisis semántico se realiza después del sintáctico y es más difícil de formalizar que éste. Se trata de determinar el tipo de los resultados intermedios, comprobar que los argumentos que tiene un operador pertenecen al conjunto de los operadores posibles, y si son compatibles entre sí, es decir, comprobará que el significado de lo que se va leyendo es válido.

  3. 1.2. Acciones semánticas de un analizador sintáctico. Dependiendo del tipo de sentencias, las acciones semánticas pueden agruparse en: • Sentencias de Declaración: completar la sección de tipos de la Tabla de Símbolos. • Sentencias “ejecutables”: realizar comprobaciones de tipos entre los operandos implicados. • Funciones y procedimientos: comprobar el número, orden y tipo de los parámetros actuales en cada llamada a una función o procedimiento.

  4. • Identificación de variables: comprobar si identificador ha sido declarado antes de utilizarlo. • Etiquetas: comprobar si hay etiquetas repetidas y validación. • Constantes: comprobar que no se utilicen en la parte izquierda de una asignación. • Conversiones y equivalencias de tipo: verificación. • Sobrecarga de operadores y funciones: detectar y solventar.

  5. La fase de análisis semántico revisa el programa fuente para tratar de encontrar errores semánticos y reúne la información sobre los tipos para la fase posterior de generación de código. En ella se utiliza la estructura jerárquica determinada por la fase de análisis sintáctico para identificar los operadores y operandos de expresiones y proposiciones.

  6. 1.3. Comprobaciones de tipos en expresiones . Verificación de tipos La verificación de los tipos de datos se hace asignando el valor de tipo de cada una de los componentes léxicos. 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.

  7. 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 conversión de tipos; lo que se denomina conversión automática. A la conversión de tipos se le llama coerción o casting.

  8. Conversión de Tipos Esto sólo es posible en algún lenguaje de programación, si el compilador reconoce que la variable destino tiene la suficiente precisión para contener el valor origen. En Java se puede almacenar un valor byte en una variable int, dado que este tipo de datos es de mayor precisión que el primero.

  9. A esto se le llama ensanchamiento o promoción, dado que el tipo más pequeño se ensancha o promociona al tipo compatible más grande. Si por el contrario, se desea asignar un valor de variable int a una variable byte se necesita realizar una conversión de tipos explícita. En algunos casos se puede realizar la conversión pero se pueden perder datos, como por ejemplo al pasar un valor flotante a un entero.

  10. A esto se le llama estrechamiento, dado que se estrecha explícitamente el valor para que quepa en el destino. La conversión de un tipo se realiza poniendo delante un nombre de tipo entre paréntesis, por ejemplo, (tipo) valor. Ejemplos de coerción: byte a; int b; a=(byte) b;

  11. Comprobación de Tipos La comprobación ayuda a evitar la mayoría de los errores de programación. Ejemplos de comprobación de tipos: Para saber si el operador aplicado a los operadores es correcto. Existen dos tipos de comprobación: estática y dinámica.

  12. Comprobaciones de tipos. Un compilador debe informar de un error si se aplica un operador a un operando incompatible, por ejemplo, si se suman una variable tipo matriz y una variable de función. 

  13. 2.Comprobaciones del flujo de control.  Las proposiciones que hacen que el flujo del control abandone una construcción deben tener algún lugar a dónde transferir el flujo de control Por ejemplo, una proposición break en C hace que el control abandone la proposición que la engloba, while, for o switch más cercana si dicha proposición englobadora no existe, ocurre un error. 

  14. 3.Comprobación de unicidad: definir un objeto una sola vez. 4.Comprobaciones relacionadas con nombres. En ocasiones, el mismo nombre debe aparecer dos o más veces en un mismo bloque de instrucciones, el compilador debe comprobar que se utilice el mismo nombre en ambos sitios.

  15. Comprobación estática • Diferente de la dinámica (en runtime) • Ejemplos • Comprobación de tipos • Incompatibilidad de operadores • Flujo de control • Exit Do, break, halt, while, next • Unicidad • Variables únicas en su ámbito

  16. Más ejemplos: • Nombres • Begin transaction NNN --- Committransaction NNN • Comprobación dinámica es necesaria: • tabla: array[0..255] of char; • i: integer • ¿Verificar i <= 255 estáticamente?

  17. Sistemas de tipos • Basado en: • La noción de tipo • Tipos básicos o primitivos • Tipos construidos o referenciales • Las reglas para asignar tipos • ¿Suma de dos reales es un? • ¿Concatenación de dos char es un?

  18. Expresiones de tipos • Un tipo básico • Boolean, char, integer, long, float, etc. • error_tipo • El nombre de un tipo publicclassTelefono { int número; int internacional; } • Constructores de tipos

  19. Bibliografía AdilenePerez Reyes, A. G. (18 de Mayo de 2011). AnalisisSemantico. Obtenido de http://compiladoresasignatura.blogspot.mx/2011/05/unidad-5-analisis-semantico.html Guevara, M. (s.f.). Acciones Semanticas. Obtenido de http://es.scribd.com/doc/128330225/1-2-Acciones-semanticas

More Related