Sie sind auf Seite 1von 14

Teora de Lenguajes Programacin

de

Semntica

Semntica

La semntica de un Lenguaje de Programacin es una definicin del significado de cualquier programa que sea sintcticamente vlido. Uno de los mtodos ms utilizados para definir la semntica es a travs de la explicacin de lo que una sentencia de lenguaje hace. Estas explicaciones pueden ser imprecisas e incompletas.

Gramtica con atributos

Es un medio para describir ms de la estructura de un lenguaje de programacin que puede ser descrito con una gramtica libre de contexto. Es una extensin de una gramtica libre de contexto, la cual se le ha agregado atributos, funciones de clculo de atributos y funciones de predicado. Permite ciertas reglas, tales como: compatibilidad de tipos.

Ejemplo: Los tipos en Java, float int

La gramtica se vuelve engorrosa al utilizar BNF con estas reglas.

Atributos: Asociados con smbolos de gramtica. Similares a las variables en el sentido que pueden tener valores asignados a ellos. Funciones de clculos de atributo: Algunas veces llamadas funciones de clculo. Son usados para especificar como los valores de los atributos son calculados. Funciones de predicados: Especifica cuales reglas semnticas estticas del lenguaje son asociadas con las reglas de la gramtica.

Ejemplos
Regla de sintaxis: <proc_def> procedure <proc_name>[1] <proc_body> end <proc_name>[2]; Predicado: <proc_name>[1].string [2].string == <proc_name>

assign var = exp exp var + var var A|B|C 1. Regla de sintaxis: assign var = exp Regla semntica: exp.tipo_esperado var.tipo_actual 2. Regla de sintaxis: exp var[2]+var[3] Regla semntica: exp.tipo_actual if (var[2].tipo_actual=int) and (var[3].tipo_actual=int) then int else real end if Predicado: exp.tipo_actual == exp.tipo_esperado

3. Regla de sintaxis: exp var Regla semntica: exp.tipo_actual var.tipo_actual Predicado: exp.tipo_actual == exp.tipo_esperado 4. Regla de sintaxis: var A | B | C Regla semntica: var.tipo_actual look-up(var.string)

La funcin look-up busca un nombre de variable dado en la tabla de smbolos y regresa el tipo de la variable.

Mtodos formales de descripcin de la semntica


Semntica

Operacional Semntica Axiomtica Semntica Denotativa

Semntica Operacional

La idea principal consiste en describir el significado de un programa ejecutando sus sentencias en una mquina, ya sea real o virtual. Los cambios que ocurren en el estado de la mquina cuando se ejecuta una sentencia dada definen el significado de esa sentencia.

Proporciona una definicin del significado del programa simulando el comportamiento del mismo en un equipo que tenga una organizacin de memoria y un conjunto de instrucciones. Uno de los primeros modelos de semntica operacional fue el equipo SECD el cual ofreca una base para definir formalmente la semntica de LISP.

Semntica Operacional

Estado de una mquina:


Valores de Registros Localidades de memoria Cdigos de Condicin Registros de estado

El significado de una instruccin est representada por el cambio en el estado de la mquina causada por la ejecucin de la instruccin en la mquina. Mquina real vs. Mquina virtual

Semntica Operacional

Para usar el mtodo operacional para describir la semntica de un Lenguaje de Programacin L se requiere la construccin de dos componentes:

Un traductor para convertir las sentencias del lenguaje L al lenguaje de bajo nivel. La mquina virtual para ese lenguaje de bajo nivel.

Los cambios de estado de la mquina virtual al ejecutar el cdigo que resulta de la traduccin de una sentencia del lenguaje L, define el significado de la sentencia.

Semntica Operacional

Sentencia en C

Semntica Operacional

for (expr1;expr2;expr3) { }

expr1; loop: if expr2 = 0 goto out expr3; goto loop; out:

Semntica Axiomtica

Esta semntica fue definida en conjunto con el desarrollo de un mtodo para probar la correctez de programas. Tales pruebas de correctez, cuando se podan construir, mostraban que un programa realizaba la operacin descrita por su especificacin. En una prueba, cada sentencia de un programa es precedida y sucedida por una expresin lgica que especifica las restricciones de las variables del programa.

Semntica Axiomtica

La semntica axiomtica est basada en la lgica matemtica. Las expresiones lgicas se llaman predicados o afirmaciones. Una afirmacin que antecede a una sentencia de programa describe las restricciones en las variables del programa en ese punto. Una afirmacin que sucede una sentencia describe las nuevas restricciones de dichas variables, y posiblemente otras, despus de la ejecucin de esa sentencia. Estas afirmaciones se conocen como precondiciones y poscondiciones, respectivamente, de la sentencia.

Semntica Axiomtica

Desarrollar una descripcin axiomtica o prueba de un programa dado requiere que cada sentencia en el programa tenga una precondicin y una poscondicin.
sum = 2 * x + 1 { sum > 1 }, Una posible precondicin para esta sentencia es { x > 10 }.

Semntica Axiomtica

La precondicin mnima es la precondicin menos restrictiva que garantizar la validez de la poscondicin asociada. sum = 2 * x + 1 { sum > 1 } { x > 10 }, { x > 50 } y { x > 1000 } son todas precondiciones vlidas. La mnima de todas las precondiciones en este caso es { x > 0 }.

Semntica Axiomtica

Si la precondicin mnima puede calcularse a partir de la poscondicin dada para cada sentencia de un lenguaje, las pruebas de correctez pueden construirse para los programas en ese lenguaje. La prueba inicia usando los resultados deseados de la ejecucin como la poscondicin de la ltima sentencia del programa. Esta poscondicin junto con la ltima sentencia es usada para calcular la precondicin mnima para la ltima sentencia. Esta precondicin es usada como la poscondicin de la penltima sentencia, y as contina este proceso para cada sentencia hasta llegar a la primera.

Notacin

La notacin formal para especificar la semntica axiomtica de una forma dada es: {P} S {Q}, donde P es la precondicin, Q la poscondicin y S es la forma de la sentencia. {QxE}x=E {Q} a = b / 2 1 {a < 10} x=2 * y - 3 {x>25} //Calcular la precondicin mmima para las sentencias de asignacin anteriores.

Semntica Axiomtica

Secuencias
y= 3*x+1; x= y+3; { x < 10}

Seleccin
if (x>0) y= y-1 else y=y+1

{y>0}

Ciclos //premin(sent,poscond)=precond while y<>x do y=y+1 end {y=x}

10

Semntica Denotativa

El concepto fundamental de la semntica denotativa es definir para cada entidad del lenguaje un objeto matemtico y una funcin que mapea las instancias de la entidad en instancias del objeto matemtico. Debido a que los objetos se definen rigurosamente, stos representan el significado exacto de las entidades correspondientes. La dificultad en este mtodo radica en crear los objetos y mapear las funciones. El mtodo se llama denotativo porque los objetos matemticos denotan el significado de sus entidades sintcticas correspondientes.

Semntica Denotativa
Nmeros Binarios <num_bin> 0 |1 |<num_bin> 0 |<num_bin> 1

<num_bin>

<num_bin>

<num_bin>

11

Semntica Denotativa

Sea el dominio de los valores semnticos de los objetos, el conjunto de los nmeros naturales (N), y con estos objetos deseamos asociar a los nmeros binarios. La funcin semntica Mbin, mapea los objetos sintcticos, descritos en las reglas gramaticales, a los objetos en N. la funcin Mbin se define como sigue: Mbin(0) = 0 Mbin(1) = 1 Mbin(<num_bin> 0) = 2 * Mbin(<num_bin>) Mbin(<num_bin> 1) = 2 * Mbin(<num_bin>) + 1

6 <num_bin> 3

<num_bin>

<num_bin>

12

Semntica Denotativa en un Lenguaje


La semntica denotativa de un programa puede definirse en trminos de cambios de estado. Sea s el estado de un programa el cual se representa como el conjunto de pares siguiente:
S = {(i1,v1)(i2,v2)(i3,v3)(i4,v4)} donde cada i es el identificador de una variable, y cada v, el valor asociado a ella. (undef)

Los cambios de estado son usados para definir el significado de los programas.

Semntica Denotativa en un Lenguaje

Para un lenguaje cuyo elemento inicial es Program:


M: Program //define una funcin prototipo para el elemento M(Program p)=M(p.cuerpo,{(v1,undef), v2,undef),,vn,undef)}) //define el significado de un programa

Para definir el significado de las asignaciones y expresiones


M: Asigna x M(Asigna a, s)= s {a.destino, M(a.origen, s)} M: Expr x V donde V es un valor M(Expr e, s) =e si e es un valor = s(e) si e es una variable = AplicaBin(e.op, M(e.term1,s), M(e.term2,s) si es una operacin binaria

13

Semntica Denotativa en un Lenguaje


AplicaBin: Operador x Valor x Valor Valor AplicaBin(op,v1,v2) = v1+v2 si op=+ = v1-v2 si op== v1*v2 si op=* = v1/v2 si op=/ Sea s = {(x,2),(y,-3),(z,75)} y la asignacin z = x+2*y M(z=x+2*y,{(x,2),(y,-3),(z,75)})=s{(z,M(x+2*y, {(x,2),(y,-3),(z,75)})} = s {(z,-4)} = {(x,2),(y,-3),(z,-4)} M(x+2*y, {(x,2),(y,-3),(z,75)})=AplicaBin(+,M(x,s),M(2*y,s)) = AplicaBin(+,2,AplicaBin(*,M(2,s),M(y,s))) = AplicaBin(+,2,AplicaBin(*,2,-3)) = AplicaBin(+,2,-6) = -4

14

Das könnte Ihnen auch gefallen