You are on page 1of 19

Verificacin de tipos en expresiones.

Expresiones de Tipos
Un tipo compuesto es denotado por una expresin

de tipo Una expresin de tipo es


Un tipo bsico La aplicacin de un constructor de tipo a otras expresiones de tipo

Expresiones de Tipos: Tipos Bsicos


Tipos atmicos definidos por el lenguaje

Ejemplos: Enteros Booleanos floats caracteres


type_error Tipo especial que produce un error

void Tipo bsico que denota la ausencia de un valor

Un lenguaje simple con tipos


Un lenguaje que tiene una secuencia de

declaraciones seguidas de una sola expresin


P D; E D D; D | id : T T char | integer | array [ num ] of T E literal | num | id | E + E | E [ E ]

Conversin de Tipos
Conversin implcita de un tipo a otro tipo

Ejemplo int A;

float B; B = B + A
Dos tipos de convercin widening conversions narrowing conversions

Widening conversions
Conversiones sin prdida de informacin

Ejemplos: integers a floats shorts a longs

Narrowing conversions
Conversiones que pueden perder informacin

Ejemplos: integers a chars longs a shorts


Raro en lenguajes

Acciones agregadas en un analizador sintctico descendente (top-down).

Toda gramtica S-atribuida se

puede evaluar ascendentemente, calculando los atributos (todos ellos sintetizados) conforme el programa de entrada es analizado .

El analizador sintctico deber almacenar en su pila

los valores de los atributos sintetizados asociados a cada uno de los smbolos gramaticales. En el momento en el que se lleve a cabo una reduccin, se calcularn los valores de los nuevos atributos sintetizados (del no terminal de la izquierda de la produccin) en funcin de los atributos que estn en la pila (de los no terminales de la parte derecha, entre otros).

Pila semntica en un analizador sintctico ascendente (bottom-up).


De un modo contrario, los atributos heredados se

calculan descendentemente en el rbol sintctico. Se asigna un valor a un atributo del nodo hijo 2 X para que, en aquellas reglas en las que ste aparezca en la parte izquierda de la produccin, herede el valor asignado.

Administracin de la tabla de smbolos.


la tabla de smbolos es una estructura de datos global

a la que se accede desde las reglas semnticas. Las operaciones de la tabla de smbolos son insertar y buscar

Manejo de errores semnticos.


Los errores de compilacin pueden dividirse

aproximadamente en dos categoras: errores sintcticos y errores semnticos. Los errores sintcticos incluyen tokens olvidados o colocados de manera incorrecta, tal como el parntesis derecho olvidado en la expresin aritmtica (2+3 .

Los errores semnticos incluyen tipos incorrectos en

expresiones y variables no declaradas (en la mayora de los lenguajes), tal como la asignacin x = 2, donde x es una variable de tipo arreglo.

Sintetizacin en anlisis semntico


int num1; int num2; int suma; num1=Integer.parseInt(t1.getText()); num2=Integer.parseInt(t2.getText()); suma=num1 + num2; t3.setText(Integer.toString(suma)); suma=suma+5;

Id.Num1
Id.num2 id.Suma Constante.5

null
Null Nul 5 Id.Num1+id.n um2 Id.suma+cons tante.5

ejercicios
Proporcione dos ejemplos ms de errores de cada clase en un lenguaje de su eleccin. 2. Seleccione un compilador con el que est familiarizado y determine si se enumeran todos los errores sintcticos antes de los errores semnticos o si los errores de sintaxis y de semntica estn entremezclados. 3. Escriba un programa en java que realiza el promedio de un arreglo y sintetice semnticamente los smbolos
1.

realice el siguiente ejemplo en java y en vb (anotando

las instrucciones respectivas) y determine los errores semnticos que marcaran cada lenguaje int num1; int num2; int suma; num1=Integer.parseInt(t2.getText()); suma=suma + num2; t3.setText(Integer.toString(suma)); suma=suma+5;