Vous êtes sur la page 1sur 11

INSTITUTO TECNOLGICO SUPERIOR PROGRESO

ORGANISMO PBLICO DESCENTRALIZADO DEL GOBIERNO DEL ESTADO CLAVE: 31ETI0004Q

NOMBRE DEL TEMA


ANALIZADOR SEMANTICO.

CARRERA

INGENIERA EN SISTEMAS COMPUTACIONALES

ESTUDIANTE

MIRANDA MEDINA CARMINE STEPHANIE

PROFESOR

LIGIA BEATRIZ CHUC US

PROGRESO, YUCATN A 10 DE NOVIEMBRE, 2011

Analizador semntico
Se compone de un conjunto de rutinas independientes, llamadas por los analizadores morfolgico y sintctico. El anlisis semntico utiliza como entrada el rbol sintctico detectado por el anlisis sintctico para comprobar restricciones de tipo y otras limitaciones semnticas y preparar la generacin de cdigo. En compiladores de un solo paso, las llamadas a las rutinas semnticas se realizan directamente desde el analizador sintctico y son dichas rutinas las que llaman al generador de cdigo. El instrumento ms utilizado para conseguirlo es la gramtica de atributos. En compiladores de dos o ms pasos, el anlisis semntico se realiza independientemente de la generacin de cdigo, pasndose informacin a travs de un archivo intermedio, que normalmente contiene informacin sobre el rbol sintctico en forma lineal izada.

Propagacin de atributos Sea la expresin int a,b,c; a/(b+c^2) El rbol sintctico es: / --------| | a + --------| | b ^ --------| | c 2

De la instruccin declarativa, la tabla de smbolos y el analizador morfolgico obtenemos los atributos de los operandos: / --------| | a + int --------| | b ^ int --------| | c 2 int int Propagando los atributos obtenemos: / int --------| | a + int int --------| | b ^ int int --------| | c 2 int int Si la expresin hubiera sido a/(b+c^ 2) El rbol sintctico sera el mismo, sustituyendo 2 por 2. Sin embargo, la propagacin de atributos sera diferente: / real --------| | a + real int --------| | b ^ real int --------| | c 2 int int

En algn caso podra llegar a producirse error (p.e. si / representara slo la divisin entera).

Si la expresin hubiera sido int a,b,c,d; a/(b+c^d) El rbol sintctico sera el mismo, sustituyendo 2 por d. Sin embargo, la propagacin de atributos sera incompleta: / {int,real} --------| | a + {int,real} int --------| | b ^ {int,real} int --------| | c d int int El analizador semntico podra reducir los tipos inseguros al tipo mximo (real) o utilizar un tipo interno nuevo (ej. arit={int,real}, una unin). Lo anterior es un ejemplo de propagacin bottom-up. La propagacin top-down tambin es posible: lo que se transmite son las restricciones y los tipos de las hojas sirven de comprobacin. Por ejemplo, si la divisin slo puede ser entera, transmitimos hacia abajo la restriccin de que sus operandos slo pueden ser enteros. Al llegar a d, esa restriccin se convierte en que d debe ser positiva. Si no lo es, error. La implantacin de todos los casos posibles de operacin con tipos mixtos podra ser excesivamente cara. En su lugar, se parte de operaciones relativamente simples (ej. int+int, real+real) y no se implementan las restantes (ej. int+real, real+int), aadiendo en su lugar operaciones mondicas de cambio de tipo (ej. int real).

Esta decisin puede introducir ambigedades. Por ejemplo, sea el programa real a; int b,c; a:=b+c El rbol sintctico es: := --------| | a + real --------| | b c int int Existen dos conversiones posibles: := real := real ----------------| | | | a + real a + int real --------real --------| | | | b c b c int int int int El problema es que no tenemos garanta de que los dos procedimientos sean equivalentes. El segundo puede dar overflow, el primero prdida de precisin. La definicin del lenguaje debe especificar estos casos. Las transformaciones posibles se pueden representar mediante un grafo cuyos nodos son los tipos de datos y cada arco indica una transformacin. Dado un operando de tipo A que se desea convertir al tipo B, se trata de encontrar una cadena de arcos que pase de A a B en el grafo anterior. Podra haber varios grafos, cada uno de los cuales se aplicar en diferentes condiciones, por ejemplo, uno para las asignaciones, otro para las expresiones, etc.

INSTITUTO TECNOLGICO SUPERIOR PROGRESO


ORGANISMO PBLICO DESCENTRALIZADO DEL GOBIERNO DEL ESTADO CLAVE: 31ETI0004Q

NOMBRE DEL TEMA


ANALIZADOR SEMANTICO.

CARRERA

INGENIERA EN SISTEMAS COMPUTACIONALES

ESTUDIANTE:

CAAMAL ZAPATA JOSE ALBERTO

PROFESOR:

LIGIA BEATRIZ CHUC US

PROGRESO, YUCATN A 10 DE NOVIEMBRE, 201

Anlisis semntico
Se compone de un conjunto de rutinas independientes, llamadas por los analizadores morfolgico y sintctico. El anlisis semntico utiliza como entrada el rbol sintctico detectado por el anlisis sintctico para comprobar restricciones de tipo y otras limitaciones semnticas y preparar la generacin de cdigo. En compiladores de un solo paso, las llamadas a las rutinas semnticas se realizan directamente desde el analizador sintctico y son dichas rutinas las que llaman al generador de cdigo. El instrumento ms utilizado para conseguirlo es la gramtica de atributos. En compiladores de dos o ms pasos, el anlisis semntico se realiza independientemente de la generacin de cdigo, pasndose informacin a travs de un archivo intermedio, que normalmente contiene informacin sobre el rbol sintctico en forma linealizada (para facilitar su manejo y hacer posible su almacenamiento en memoria auxiliar). En cualquier caso, 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.

Propagacin de atributos
Sea la expresin
int a,b,c; a/(b+c^2)

El rbol sintctico es:


/ --------| | a + --------| | b ^ --------| | c 2

De la instruccin declarativa, la tabla de smbolos y el analizador morfolgico obtenemos los atributos de los operandos:
/ --------| | a + int --------| | b ^ int --------| | c 2 int int

Propagando los atributos obtenemos:


/ int --------| | a + int int --------| | b ^ int int --------| | c 2 int int

Si la expresin hubiera sido


a/(b+c^-2)

El rbol sintctico sera el mismo, sustituyendo 2 por -2. Sin embargo, la propagacin de atributos sera diferente:

/ real --------| | a + real int --------| | b ^ real int --------| | c -2 int int

En algn caso podra llegar a producirse error (p.e. si / representara slo la divisin entera).

Si la expresin hubiera sido


int a,b,c,d; a/(b+c^d)

El rbol sintctico sera el mismo, sustituyendo 2 por d. Sin embargo, la propagacin de atributos sera incompleta:
/ {int,real} --------| | a + {int,real} int --------| | b ^ {int,real} int --------| | c d int int

El analizador semntico podra reducir los tipos inseguros al tipo mximo (real) o utilizar un tipo interno nuevo (ej. arit={int,real}, una unin). Lo anterior es un ejemplo de propagacin bottom-up. La propagacin top-down tambin es posible: lo que se transmite son las restricciones y los tipos de las hojas sirven de comprobacin. Por ejemplo, si la divisin slo puede ser entera, transmitimos hacia abajo la restriccin de que sus operandos slo pueden ser enteros. Al llegar a d, esa restriccin se convierte en que d debe ser positiva. Si no lo es, error.

La implantacin de todos los casos posibles de operacin con tipos mixtos podra ser excesivamente cara. En su lugar, se parte de operaciones relativamente simples (ej. int+int, real+real) y no se implementan las restantes (ej. int+real, real+int), aadiendo en su lugar operaciones mondicas de cambio de tipo (ej. int->real). Esta decisin puede introducir ambigedades. Por ejemplo, sea el programa
real a; int b,c; a:=b+c

El rbol sintctico es:


:= --------| | a + real --------| | b c int int

Existen dos conversiones posibles:


:= real --------| | a + real real --------| | b c int int := real --------| | a + int real --------| | b c int int

El problema es que no tenemos garanta de que los dos procedimientos sean equivalentes. El segundo puede dar overflow, el primero prdida de precisin. La definicin del lenguaje debe especificar estos casos.

Las transformaciones posibles se pueden representar mediante un grafo cuyos nodos son los tipos de datos y cada arco indica una transformacin. Dado un operando de tipo A que se desea convertir al tipo B, se trata de encontrar una cadena de arcos que pase de A a B en el grafo anterior. Podra haber varios grafos, cada uno de los cuales se aplicar en diferentes condiciones, por ejemplo, uno para las asignaciones, otro para las expresiones, etc.

Vous aimerez peut-être aussi