expo_automata_.2,1.3 - Ingeniería en Sistemas Computacionales

download report

Transcript expo_automata_.2,1.3 - Ingeniería en Sistemas Computacionales

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 .

Integrantes :

Luis Felipe Mendoza Cruz Martina del Carmen Huchin Canche

Docente : Eduardo José González Ehuán

111080080 111080069

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.

1.2.

Acciones sintáctico.

semánticas de un analizador

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.

• 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.

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 expresiones y proposiciones.

y operandos de

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.

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.

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.

A esto se le llama ensanchamiento o dado que el tipo promoción, 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 de tipos explícita.

conversión 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.

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;

Comprobación de Tipos

La de comprobación ayuda a evitar la mayoría de los errores 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.

1.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.

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.

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.

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

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

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?

Expresiones de tipos • Un tipo básico Boolean, char, integer, long, float, etc.

error_tipo • El nombre de un tipo } public class Telefono { int número; int internacional; Constructores de tipos

Bibliografía

Adilene Perez Reyes, A. G. (18 de Mayo de 2011).

Analisis Semantico

.

Obtenido de http://compiladoresasignatura.blogspot.mx/2011/05 /unidad-5-analisis-semantico.html

Guevara, M. (s.f.).

de

Acciones Semanticas.

Obtenido http://es.scribd.com/doc/128330225/1-2 Acciones-semanticas