Sunteți pe pagina 1din 6

18/03/13

Descripcin Modelo Computacional Secuencial y Declarativo


Deniremos un lenguaje de programacin Qu hace falta para denir un lenguaje de programacin: Cmo se escribe con este lenguaje? Qu signican las cosas que escribimos con este lenguaje?

Sintaxis del Lenguaje de Kernel Almacenamiento de simple asignacin

Adapted from C. Varela, S. Haridi and P. Van Roy

Descripcin
Deniremos un lenguaje de programacin Qu hace falta para denir un lenguaje de programacin: Cmo se escribe con este lenguaje? sintaxis Qu signican las cosas que escribimos con este lenguaje? semntica

Denicin de un lenguaje
Sintaxis: dene las oraciones permitidas

Secuencia de caracteres (letras) = token (palabra) Secuencia de tokens (palabras) = sentencias (oracin) Quin verica que un programa sea sintcticamente correcto?

Semntica: dene qu signica un programa, y qu se se espera del programa.

print hello world Quin verica que un programa sea semnticamente correcto?

Denicin de un lenguaje (seccin 2.1 del libro)


Sintaxis: dene las oraciones permitidas

Secuencia de caracteres (letras) = token (palabra) Secuencia de tokens (palabras) = sentencias (oracin) Quin verica que un programa sea sintcticamente correcto? el compilador

Sintaxis

Semntica: dene qu signica un programa, y qu se se espera del programa.

print hello world Quin verica que un programa sea semnticamente correcto? en algunos casos, la derivacin, el testing

18/03/13

Sintaxis

Sintaxis

Secuencia de Caracteres
Tokenizer

Buenos#Aires#es#la#capital#y#la#ciudad#mas#grande [Buenos Aires,es, la, capital,y,la,ciudad, mas,grande] es Bs As la capital y la ciudad mas grande

Secuencia de Caracteres
Tokenizer

fun {Max X Y}\n\tif X>Y then X else Y end \nend

Secuencia de Tokens
Parser

Secuencia de Tokens
Parser

fun { Max X Y } if X > Y then X else Y end end


fun Max [X Y] if > X Y X Y

rbol sintctico representado al programa.

rbol sintctico representado al programa.

10

Sintaxis y derivacin sintctica


denimos la sintaxis de un lenguaje mediante reglas (en el mejor caso, con una gramtica) una oracin pertenece a nuestro lenguaje (es vlida) si hay una secuencia de reglas de la gramtica que explican cmo se gener una secuencia de reglas se puede representar como un rbol de derivacin

Ejemplo de derivacin sintctica top-down y bottom-up


<s> local X in <s> end local X in local Y in <s> end end local X in local Y in <s> <s> end end local X in local Y in X=true <s> end end local X in local Y in X=true if <x> then <s> else <s> end end end local X in local Y in X=true if X then Y=1 else Y=~1 end end end

11

12

Ejemplos de gramticas informales


NAME ls -- list directory contents SYNOPSIS ls [-ABCFGHLOPRSTUW@abcdefghiklmnopqrstuwx1] [file ...] NAME man - format and display the on-line manual pages SYNOPSIS man [-acdfFhkKtwW] [--path] [-m system] [-p string] [-C config_file] [-M pathlist] [-P pager] [-B browser] [-H htmlpager] [-S section_list] [section] name

Ejemplos de gramticas informales


Una direccin de correo es: un string, seguido de una @ seguido de varios strings separados por puntos. Qu es un string? Qu caracteres pueden aparecer en un string? Cuntos strings pueden aparecer separados por puntos? Cuntas @ puede haber? una larga lista de etc.

Qu problemas presentan estas descripciones informales? Qu ambigedades? Qu efectos puede tener la ambigedad?

18/03/13

13

Gramticas Independientes de Contexto y Sensibles al Contexto


Gramtica independiente (o libre) de contexto (CFG) Fcil de leer y entender No consigue capturar de forma elegante e intuitiva algunos fenmenos propios de los lenguajes de programacin Gramtica sensible al contexto Expresa restricciones en el lenguaje (e.g. una variable debe estar declarada antes de usarse)

14

Gramticas Independientes de Contexto y Sensibles al Contexto

Gramtica independiente (o libre) de contexto (CFG) Fcil de leer y entender No consigue capturar de forma elegante e intuitiva algunos fenmenos propios de los lenguajes de programacin Gramtica sensible al contexto Expresa restricciones en el lenguaje (e.g. una variable debe estar declarada antes de usarse) para denir lenguajes de programacin: Gramticas Libres de Conjunto de restricciones + (e.g. con predicados) Contexto (e.g. con BNF)

15

Deniendo gramticas formales con la Forma Bachus-Naur (BNF):


<digit> ::= 0 | 1 | 2 | 3 | 4| 5 | 6 | 7 | 8 | 9 <int> ::= <digit> { <digit> } 31 | 5 | nil <list <int>> ::= nil | <int> | <list <int>> <statement> ::= if <expression> then<statement> {elseif <expression> then <statement>} [ else <statement> ] end |

16

BNF y su notacin

::= * {} [] |

el elemento a la izquierda es denido por las construcciones de la derecha el elemento ocurre 0 o ms veces agrupa los elementos entre llaves agrupa elementos opcionales o exclusivo

17

Denimos nuestro Lenguaje de Kernel


sintaxis de una sentencia s
s ::= | | | | | | | skip var = var var = value s s local var in s end if var then s else s end '{' var var var '}' case var of pattern then s else s end sentencia vaca unificacin variable-variable unificacin variable-valor composicin secuencial declaracin condicional aplicacin de procedimiento chequeo de patrones expresin de valor patrn
Tokenizador

Palabras clave

Tokens

Semntica

CFG Secuencia de Caracteres Anlisis Sintctico

Lenguaje de Programacin

var::= ... pattern ::= ...

BNF EBNF Parser

18/03/13

19

27

Para saber ms

Sentencias de nuestro lenguaje de ncleo (tabla 2.1)


sintaxis de una sentencia s
s ::= | | | | | | | skip var = var var = value s s local var in s end if var then s else s end '{' var var var '}' case var of pattern then s else s end sentencia vaca unificacin variable-variable unificacin variable-valor composicin secuencial declaracin condicional aplicacin de procedimiento chequeo de patrones expresin de valor patrn

sobre qu es una gramtica: http://en.wikipedia.org/wiki/Formal_grammar y de ah: BNF: http://en.wikipedia.org/wiki/Backus %E2%80%93Naur_Form EBNF: http://en.wikipedia.org/wiki/Extended_Backus %E2%80%93Naur_form

var::= ... pattern ::= ...

28

29

Indenticadores de Variables

(2.3.1)

Valores y tipos

(2.3.1)

variables Dene un conjunto de variables. Las variables empiezan con letra mayscula seguida de una secuencia (posiblemtente vaca) de caracteres alfanumricos o underscore. Cualquier secuencia de caracteres imprimibles encerrados entre comillas cruzadas (back-quote). ejemplos: X Y1 Hello_World `hello this is a $5 bill` ejercicio: Escribir la gramtica que describe el lenguaje de variables
(la solucin est en las tablas C.9 y C.10 del apndice C del libro)

Un tipo de datos es un conjunto de valores y un conjunto de operaciones asociadas. ejemplo: Int es el tipo de datos Entero, i.e el conjunto de todos los valores enteros. 1 is of type Int Int tiene un conjunto de operaciones asociadas, incluyendo +,-,*,div, etc. Crearemos nuestro lenguaje de manera que se puedan describir elementos de distinto tipo. El modelo viene con un conjunto de tipos bsicos.

30

33

Descripcin de Tipos de Valores


value ::= procedure | record | number procedure ::= proc '{' '$' var var '}' s end record, pattern ::= literal | literal (feature : var feature : var) literal ::= atom | bool feature ::= int | atom | bool bool ::= true | false number ::= int | oat atom ::= lowercasechar {<alphanumerchar>}

(tabla 2.2)

Nmeros

(2.3.3)

Enteros 314, 0 ~10 (minus 10) Flotantes 1.0, 3.4, 2.0e2, 2.0E2 (2102)

18/03/13

34

35

tomos y Booleanos

(2.3.3)

Registros

(2.3.3)

Una secuencia que empieza con un caracter en minscula, seguido de caracters o dgitos, person, peter Seif Haridi Booleanos: true false Esta denicin es ambigua, cmo la arreglamos?

Representacin Compuesta (lo usaremos para estructura de datos) l(f1 : x1 fn : xn) l is a literal ejemplos person(age:X1 name:X2) person(1:X1 2:X2) |(1:H 2:T) nil person

37

38

Registros Especiales: tuplas


Tuplas l(x1 xn) Equivalente al registro: l(1: x1 n: xn) ejemplo: person(X Y) corresponde al registro person(1:X 2:Y)

(2.3.3)

Registros Especiales: listas (subtipo de tupla) (2.3.3)


Listas x1 | x2 (tambin podemos escribirlas con un operador injo |) Equivalente a la tupla: |(x1 x2) ejemplo: H | T corresponde a la tupla |(H T) que corresponde al registro |(1:H 2:T)

39

42

listas
x1 | x2 | x3 | asocia a la derecha x1 | (x2 | x3) ejemplo: 1 | 2 | 3 | nil es 1 |( 2 | (3 | nil ))

Variaciones sintcticas en listas


Podemos escribir X1=5|6|7|nil que es lo mismo que X1=5|(6|(7|nil)) que es lo mismo que X1=|(5 |(6 |(7 nil))) Y todavia mas corto: X1=[5 6 7]
nil

| 1 2 3 | |

18/03/13

46

Registros Especiales: strings (subtipo de lista) (2.3.3)


Un string es una lista de cdigos de caracteres encerrados con comillas. ejemplo: E=mc^2 signica lo mismo que: [69 61 109 99 94 50]

47

Denicin de Procedimientos

(2.3.3)

x = proc {$ y1 yn} s end Crea un valor, resultado del procedimiento Liga la variable x a ese valor Una variacin sintctica del procedimiento: proc {x y1 yn} s end Pero no olvidemos que un procedimiento es siempre una asignacin, se ve cuando lo traducimos a kernel

49

50

Asignacin de Tipo a Variables


Los valores claramente tiene un tipo, e.g., enteros, strings. Qu pasa con las variables?

Reexiones sobre Sintaxis

51

Asignacin de Tipo a Variables


Los valores claramente tiene un tipo, e.g., enteros, strings. Qu pasa con las variables? Los lenguajes de programacin tienen diferentes comportamientos respecto al tipo de las variables: Fuertemente Tipado: La variables pueden tener asociado un tipo, que restringe el tipo de valor que pueden acomodar. Cmo se determina ese tipo?
Esttico: todos los tipos de las variables se saben en tiempo de compilacin. Puede ser declarado por el usuario. Dinmico: una variable adquiere un tipo en cuando se le asocia un valor. En cualquier caso, ese tipo no cambia a lo largo de la ejecucin. El tipo es nico y jo. Dbilmente Tipado: Las variables no tienen tipos asociados. Eg. Los argumentos de una funcin pueden variar de tipo.

S-ar putea să vă placă și