PDF de programación - Lenguajes y Compiladores

Lenguajes y Compiladoresgráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 23 de Noviembre del 2017)
621 visualizaciones desde el 23 de Noviembre del 2017
518,5 KB
156 paginas
Creado hace 9a (17/04/2015)
Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

Lenguajes y Compiladores

2015

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

Estructura de la materia a grandes rasgos:

Primera Parte: Lenguaje imperativo

Segunda Parte: Lenguaje aplicativo puro, y lenguaje
aplicativo con referencias y asignación

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

Ejes de contenidos de la primer parte

1

Introducción a la sintaxis y la semántica de lenguajes

2 El problema de dar significado a la recursión e iteración

3 Un Lenguaje Imperativo Simple

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

Un Lenguaje Imperativo Simple

LIS
(cid:104)comm(cid:105)

::= skip

(cid:104)var(cid:105) := (cid:104)intexp(cid:105)
(cid:104)comm(cid:105) ; (cid:104)comm(cid:105)
if (cid:104)boolexp(cid:105) then (cid:104)comm(cid:105) else (cid:104)comm(cid:105)
newvar (cid:104)var(cid:105) := (cid:104)intexp(cid:105) in (cid:104)comm(cid:105)
while (cid:104)boolexp(cid:105) do (cid:104)comm(cid:105)

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

(cid:104)intexp(cid:105)

::= (cid:104)natconst(cid:105)
(cid:104)var(cid:105)
(cid:104)intexp(cid:105) + (cid:104)intexp(cid:105)
(cid:104)intexp(cid:105) ∗ (cid:104)intexp(cid:105)
(cid:104)intexp(cid:105) − (cid:104)intexp(cid:105)
(cid:104)intexp(cid:105) /(cid:104)intexp(cid:105)
(cid:104)intexp(cid:105) %(cid:104)intexp(cid:105)
−(cid:104)intexp(cid:105)

(cid:104)natconst(cid:105)
(cid:104)boolconst(cid:105)

::= 0 | 1 | 2 |....
::= true | false

(cid:104)boolexp(cid:105)

::= (cid:104)boolconst(cid:105)
(cid:104)intexp(cid:105) = (cid:104)intexp(cid:105)
(cid:104)intexp(cid:105) < (cid:104)intexp(cid:105)
(cid:104)intexp(cid:105) ≤ (cid:104)intexp(cid:105)
(cid:104)intexp(cid:105) > (cid:104)intexp(cid:105)
(cid:104)intexp(cid:105) ≥ (cid:104)intexp(cid:105)
¬(cid:104)boolexp(cid:105)
(cid:104)boolexp(cid:105) ∨ (cid:104)boolexp(cid:105)
(cid:104)boolexp(cid:105) ∧ (cid:104)boolexp(cid:105)

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

Características de LIS

Hay sólo dos tipos de expresiones: enteras y booleanas

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

Características de LIS

Hay sólo dos tipos de expresiones: enteras y booleanas
Las expresiones enteras siempre se pueden evaluar, y su
resultado es un entero.Todas las funciones primitivas
(incluida la división) son funciones totales.

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

Características de LIS

Hay sólo dos tipos de expresiones: enteras y booleanas
Las expresiones enteras siempre se pueden evaluar, y su
resultado es un entero.Todas las funciones primitivas
(incluida la división) son funciones totales.
Sólo posee variables que adoptan valores enteros. Luego
la noción de estado se refleja en la siguiente definición:

Conjunto de estados:

Σ = (cid:104)var(cid:105) → Z

(la memoria posee infinitos lugares que siempre alojan un
número entero).

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

Significado de los comandos de LIS (sin iteración)

Todos los comandos terminan su ejecución (no necesitamos
⊥Σ), y el único resultado posible es un estado.

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

Significado de los comandos de LIS (sin iteración)

Todos los comandos terminan su ejecución (no necesitamos
⊥Σ), y el único resultado posible es un estado.

Funciones semánticas:
[[_]]intexp ∈ (cid:104)intexp(cid:105) → Σ → Z
[[_]]boolexp ∈ (cid:104)boolexp(cid:105) → Σ → {V , F}
[[_]]comm ∈ (cid:104)comm(cid:105) → Σ → Σ

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

Primeras ecuaciones semánticas

[[skip]]σ = σ

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

Primeras ecuaciones semánticas

[[skip]]σ
[[v := e]]σ = [σ|v : [[e]]σ]

= σ

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

Primeras ecuaciones semánticas

= σ

[[skip]]σ
[[v := e]]σ = [σ|v : [[e]]σ]
[[c0; c1]]σ = [[c1]]([[c0]]σ)

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

Primeras ecuaciones semánticas

[[skip]]σ
[[v := e]]σ
[[c0; c1]]σ
[[if e then c else c(cid:48)]]σ = if [[e]]σ then [[c]]σ else [[c(cid:48)]]σ

= σ
= [σ|v : [[e]]σ]
= [[c1]]([[c0]]σ)

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

Primeras ecuaciones semánticas

[[skip]]σ
[[v := e]]σ
[[c0; c1]]σ
[[if e then c else c(cid:48)]]σ = if [[e]]σ then [[c]]σ else [[c(cid:48)]]σ
Ejemplo:

= σ
= [σ|v : [[e]]σ]
= [[c1]]([[c0]]σ)

[[x := x − 1]]σ = [σ|x : [[x − 1]]σ]

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

Primeras ecuaciones semánticas

[[skip]]σ
[[v := e]]σ
[[c0; c1]]σ
[[if e then c else c(cid:48)]]σ = if [[e]]σ then [[c]]σ else [[c(cid:48)]]σ
Ejemplo:

= σ
= [σ|v : [[e]]σ]
= [[c1]]([[c0]]σ)

[[x := x − 1]]σ = [σ|x : [[x − 1]]σ]

= [σ|x : [[x]]σ − [[1]]σ]

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

Primeras ecuaciones semánticas

[[skip]]σ
[[v := e]]σ
[[c0; c1]]σ
[[if e then c else c(cid:48)]]σ = if [[e]]σ then [[c]]σ else [[c(cid:48)]]σ
Ejemplo:

= σ
= [σ|v : [[e]]σ]
= [[c1]]([[c0]]σ)

[[x := x − 1]]σ = [σ|x : [[x − 1]]σ]
= [σ|x : [[x]]σ − [[1]]σ]
= [σ|x : σ x − 1]

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

Semántica de newvar

Función “restauración de v según σ”:

fv ,σσ(cid:48) = [σ(cid:48)|v : σv ]

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

Semántica de newvar

Función “restauración de v según σ”:

fv ,σσ(cid:48) = [σ(cid:48)|v : σv ]

[[newvar v := e in c]]σ = fv ,σ([[c]][σ|v : [[e]]σ])

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

Semántica de newvar

Función “restauración de v según σ”:

fv ,σσ(cid:48) = [σ(cid:48)|v : σv ]

[[newvar v := e in c]]σ = fv ,σ([[c]][σ|v : [[e]]σ])

Notación lambda para la función restauración:
fv ,σ = λσ(cid:48) ∈ Σ. [σ(cid:48)|v : σv ]

[[newvar v := e in c]]σ = (λσ(cid:48) ∈ Σ. [σ(cid:48)|v : σv ]) ([[c]][σ|v : [[e]]σ])

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

¿Qué función en Z → Z⊥ computa haskell?

g :: Int -> Int
g n = if n == 0 then 0

else if n == 1 then 1

else g (n-2)

Es la menor solución en Z → Z⊥ de la ecuación recursiva:

si n = 0
si n = 1
caso contrario (c.c.)

(ER)

 0

f n =

1
f (n − 2)

La ecuación ER define una familia de funciones.

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

Una función es solución de ER si y sólo si es punto fijo de:

 0

si n = 0
si n = 1
si n (cid:54)∈ {0, 1}

F f n =

1
f (n − 2)

El menor punto fijo es:

({F i ⊥Z→Z⊥|i ≥ 0})

sup
Z→Z⊥

donde ⊥Z→Z⊥ es el elemento mínimo de Z → Z⊥, es decir, la
función que devuelve siempre ⊥.

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

Dificultades para dar significado a la iteración

El comando

while b do c

debe satisfacer la propiedad:

[[while b do c]]σ = if [[b]]σ then [[c; while b do c]]σ else [[skip]]σ

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

Dificultades para dar significado a la iteración

El comando

while b do c

debe satisfacer la propiedad:

[[while b do c]]σ = if [[b]]σ then [[c; while b do c]]σ else [[skip]]σ

=

σ

(cid:40) [[while b do c]]([[c]]σ) si [[b]]σ

si ¬[[b]]σ

Lenguajes y Compiladores

Introducción a la sintaxis y la semántica de lenguajes
El problema de dar significado a la recursión e iteración
Un Lenguaje Imperativo Simple

¿Define esta propiedad una función en Σ → Σ⊥?

el domin
  • Links de descarga
http://lwp-l.com/pdf7666

Comentarios de: Lenguajes y Compiladores (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad