Documente Academic
Documente Profesional
Documente Cultură
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?
print hello world Quin verica que un programa sea semnticamente correcto?
Secuencia de caracteres (letras) = token (palabra) Secuencia de tokens (palabras) = sentencias (oracin) Quin verica que un programa sea sintcticamente correcto? el compilador
Sintaxis
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
Secuencia de Tokens
Parser
Secuencia de Tokens
Parser
10
11
12
Qu problemas presentan estas descripciones informales? Qu ambigedades? Qu efectos puede tener la ambigedad?
18/03/13
13
14
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
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
Palabras clave
Tokens
Semntica
Lenguaje de Programacin
18/03/13
19
27
Para saber ms
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
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
(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
(2.3.3)
39
42
listas
x1 | x2 | x3 | asocia a la derecha
x1 | (x2 | x3)
ejemplo:
1 | 2 | 3 | nil es
1 |( 2 | (3 | nil ))
| 1 2 3 | |
18/03/13
46
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
51