Anda di halaman 1dari 14

Programacin de sistemas

PROGRAMACIN DE SISTEMAS
ANLISIS SEMNTICO

INTEGRANTES:
MARTINEZ VAZQUEZ ISRAEL GUILLEN FRANCO JULIO GALICIA CRISPIN OSCAR ALDAIR ROJAS MARTINES HUGO ENRIQUE

Programacin de sistemas

INDICE

ANALISIS SEMANTICO CARACTERISTICAS DEL ANALISIS SEMANTICO.. PROPAGACION DE ATRIBUTOS SEMNTICA DE ETIQUETAS Y GOTO.

SEMNTICA ASOCIADA
EVALUACIN PTIMA DE LAS EXPRESIONES BOOLEANAS. ANLISIS GRAMATICAL.. REGLAS PARA INDICAR CLAUSULAS PRINCIPALES Y SUBORDINARAS..... FUNCIONES DE LAS CLAUSULA SUBORDINARAS.

Programacin de sistemas
ANALISIS SEMANTICO

La semntica corresponde al significado asociado a las estructuras formales (sintaxis) del lenguaje. La fase de anlisis semntico de un procesador de lenguaje es aqulla que computa la informacin adicional necesaria para el procesamiento de un lenguaje, una vez que la estructura sintctica de un programa haya sido obtenida. Es por tanto la fase posterior a la de anlisis sintctico y la ltima dentro del proceso de sntesis de un lenguaje de programacin. El objetivo principal del analizador semntico de un procesador de lenguaje es asegurarse de que el programa analizado satisfaga las reglas requeridas por la especificacin del lenguaje, para garantizar su correcta ejecucin. El tipo y dimensin de anlisis semntico requerido vara enormemente de un lenguaje a otro. Existen dos formas de describir la semntica de un lenguaje de programacin: mediante especificacin informal o natural y formal. La descripcin informal de un lenguaje de programacin es llevada a cabo mediante el lenguaje natural. Esto hace que la especificacin sea inteligible (en principio) para cualquier persona. La experiencia nos dice que es una tarea muy compleja, si no imposible, el describir todas las caractersticas de un lenguaje de programacin de un modo preciso. La descripcin formal de la semntica de lenguajes de programacin es la descripcin rigurosa del significado o comportamiento de programas, lenguajes de programacin, mquinas abstractas o incluso cualquier dispositivo hardware. Revelar posibles ambigedades existentes implementaciones de procesadores de lenguajes o en documentos descriptivos de lenguajes de programacin. Ser utilizados como base para la implementacin de procesadores de lenguaje. Verificar propiedades de programas en relacin con pruebas de correccin o informacin relacionada con su ejecucin. Disear nuevos lenguajes de programacin, permitiendo registrar decisiones sobre construcciones particulares del lenguaje, as como permitir descubrir posibles irregularidades u omisiones.

Programacin de sistemas

Facilitar la comprensin de los lenguajes por parte del programador y como

mecanismo de comunicacin entre diseador del lenguaje, implementador y programador. La especificacin semntica de un lenguaje, como documento de referencia, aclara el comportamiento del lenguaje y sus diversas construcciones. Estandarizar lenguajes mediante la publicacin de su semntica de un modo no ambiguo. Los programas deben poder procesarse en otra implementacin de procesador del mismo lenguaje exhibiendo el mismo comportamiento.

CARACTERISTICAS DEL ANALISIS SEMANTICO


rbol de Sintaxis Abstracta: Recoge toda la informacin sintctica y semntica Elimina los smbolos que no aportan significado Los nodos reflejan los datos asociados a cada smbolo El objetivo de las acciones semnticas es construir este rbol

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

Programacin de sistemas
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 --------| |

Programacin de sistemas
c int 2 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).

Programacin de sistemas
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

Programacin de sistemas
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.

Semntica de etiquetas y GOTO Suponemos que las etiquetas aparecen en la tabla de smbolos con tres valores asociados: (tipo=etiqueta, bit=declarada/no declarada, nmero de cudrupla). Sea la regla
<Instr> ::= id : <Instr>

Semntica asociada:
{ Buscar id en la tabla de smbolos; if (no est) Insertar id,valor=(etiqueta, declarada, cudrupla siguiente); else { if (tipo==etiqueta && bit==no declarada) { i=nmero de cudrupla; while (i) { j=cudrupla[i][2]; cudrupla[i][2]=cudrupla siguiente; i=j; } Cambiar valor a (etiqueta, declarada, cudrupla siguiente); } else error(); } }

Sea la regla
<Instr> ::= GOTO id

Semntica asociada:
{ Buscar id en la tabla de smbolos; if (no est) { Insertar id,valor=(etiqueta, no declarada, cudr.siguiente); Generar cudrupla (TR,,,); }

Programacin de sistemas
else { if (tipo==etiqueta) { if (bit==declarada) Generar cudrupla (TR,nmero de cudrupla,,); else if (bit==no declarada) { i=nmero de cudrupla; Cambiar valor a (etiqueta, no declarada, cudr.siguiente); Generar cudrupla (TR,i,,); } } else error(); } }

Si se permiten etiquetas locales a bloques, podemos encontrar el siguiente caso:


L: ... { ... GOTO L; ...

Tenemos ambigedad: GOTO L puede ir a la etiqueta externa (ya definida o no) o a una etiqueta local al bloque posterior a la instruccin. Tenemos tres posibilidades:

Un compilador en dos pasos. Forzar declaraciones de etiquetas. Tratar L en el bloque como si fuera local. Si al final del bloque descubrimos que no ha sido declarada, tratarla como si fuera global. La lista de referencias debera fundirse con la de L global (si L global no ha sido definida an) o rellenarse con el valor de L (si ya ha sido definida). Si L global no existe, debe crearse, y pasarle la lista de referencias de L local.

Semntica de bloques Sean las reglas


<Instr> ::= do <id> := <Expr> S1 , <Expr> S2 <CD1> <LInstr> end S5 <CD1> ::= , <Expr> S3 | ^ S4

Semntica asociada al anlisis de "do x:=n1,n2,n3; I1; I2; end":


S1:
Generar cudruplas asociadas a instruccin de asignacin x:=n1.

Programacin de sistemas
Guardar i=nmero de cudrupla siguiente.

S2:
Guardar j=nmero de cudrupla siguiente. Generar cudrupla (TRG,,x,(n2)). Generar cudrupla (TR,,,).

S3:
Generar cudrupla (+,x,(n3),x). Generar cudrupla (TR,(i),,). Hacer cudrupla[j+1][2]=cudrupla siguiente.

S5:
Generar cudrupla (TR,(j+2),,). Hacer cudrupla[j][2]=cudrupla siguiente.

Adems, S4:
Generar cudrupla (:=,x,1,x). Generar cudrupla (TR,(i),,). Hacer cudrupla[j+1][2]=cudrupla siguiente.

Evaluacin ptima de las expresiones booleanas


Las operaciones booleanas usualmente se definen as:
O | T F --|----T | T T F | T F Y | T F --|----T | T F F | F F NO| T F --|----| F T

y la sintaxis adecuada para que la precedencia sea: NO, Y, O. Sin embargo, es posible simplificarlas considerablemente. Basta fijarse en la expresin
a Y (b O NO c)

Si a es falso, no hace falta calcular el parntesis, sabemos que el resultado es falso. Por tanto, redefiniremos la sintaxis y la semntica as:
<ZB> <EB> <TB> <FB> ::= ::= ::= ::= <EB> <TB> O <EB> | <TB> <FB> Y <TB> | <FB> i | ( <EB> ) | NO <FB>

a O b <=> if (a) TRUE else b; a Y b <=> if (a) b else FALSE; NO a <=> if (a) FALSE else TRUE;

Programacin de sistemas
ANLISIS GRAMATICAL
Reglas de oro del anlisis gramatical: 1.- Una oracin empieza con mayscula y termina con un punto y contiene por lo menos un verbo conjugado 2.- Una oracin puede mantener varias clusulas tanto principales como subordinaras 3.-En cada oracin compuesta hay por lo menos dos verbos conjugados y por lo menos un clausula principal pero una oracin compuesta no necesariamente contiene clausulas subordinaras 4.-En cada oracin compuesta equivale el nmero de verbos conjugados al nmero de clausulas 5.-La separacin entre clausulas se encuentran en las partculas subordinaras a) Las partculas coordinantes son y, pero funcin [,],[;][:]. . Tambin pueden cumplir esa

b) Las partculas subordinaras son [x] que si [y] otros pronombres relativos que pueden usarse interrogativamente, como, cuando cual y donde. 6.- La clusula subordinara siempre cumple una funcin en la principal [y], y por lo tanto forma parte de la misma. 7.- Cada clausula subordinara empieza con la partcula subordinante

REGLAS PARA SUBORDINARAS

INDICAR

CLAUSULAS

PRINCIPALES

1.- Cada clausula principal contiene un solo verbo conjugado y se indica mediante P 2.- Cada clausula subordinara contiene un solo verbo conjugado y se mediante [x] indica

3.- Si una oracin compuesta contiene ms de una clausula principal y/o subordinada, se enumeran las mismas P1,P2X!,X2

Programacin de sistemas
Ejemplo de un esquema para una oracin compuesta: {P1[X1][X2]} {P2[X3{X4}]} Trminos usados para las funciones gramaticales de los elementos dentro de la clausula 1.- Sujeto.- primer participante en la accin punto de partida de la accin 2.- Objeto/complemento directo.- segundo participante, sugerido por la accin (verbos transitivos) 3.- Objeto /complemento indirecto.- participante extra, no necesariamente sugerido por la accin 4.- Complemento nominal 5.- Complemento circunstancial 6.- Complemento de preposicin, entidad no relacionada directamente con la accin 7.- Complemento predicativo

FUNCIONES DE LAS CLAUSULA SUBORDINARAS


1.- Clausula relativa Una clausula subordinara es una relativa si cumple con una serie de condiciones: a) Seal en forma de un pronombre relativo (conjuncin subordinante): generalmente qu. A partir de esta palabra empieza la clusula relativa b) Lugar vaco en la clusula. La clusula relativa en s o no es una clausula completa, como si lo es una clausula principal. El elemento que falta es llamado lugar vaco generalmente el sujeto, uno de los objetos o un complemento de proposicin c) La clusula relativa le sigue directamente el antecedente (el sustantivo) con el cual la clusula cumple la funcin de adjetivo Hay dos tipos de clusulas relativas i) ii) Restrictiva Explicativa}

Programacin de sistemas
2.- clausula complemento directo 3.- clausula sujeto 4.- clausula complemento circunstancial i) de motivacin (porque, etc) ii) de tiempo (cuando, etc) iii) iv) Condicional (si, etc) Concesiva(aunque, etc)

5.- clausula complemento de preposicin Clasificacin de (grupos de) palabras: 1.- nombre-sustantivo 2.- verbo 3.- preposicin 4.- modificador a) de nombre: adjetivo (adj)/frase preposicional b) de verbo: adverbio (adv)/ frase preposicional c) de adjetivo: adverbio/frase preposicional d) de adverbio: adverbio

Programacin de sistemas
BIBLIOGRAFIA: (Vazquez, 1997) Juan Vazquez, analisis semantico, document pdf extraido (desconocido) el dia 8 de mayo 2013

Titulo

Anglicismos Lxicos en el Espaol Coloquial: Anlisis Semntico de Los Anglicismos y Sus Equivalentes Espaoles en un Corpus de Lengua Hablada Juan Gmez Capuz ilstrate Servicio de Publicaciones de la Universidad de Cdiz, 2000

Autor Edicin Publisher

Titulo Autor Editorial

Lenguaje, verdad y mundo: Modelo fenomenolgico de anlisis semntico Juan Vzquez Editorial Anthropos.Promat, s.Coop.Ltda.Enric Granados 114.08008 Barcelona

Anda mungkin juga menyukai