Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Marzo, 2010
1/14
1. Introduccin
El desarrollo de un compilador genera comnmente la impresin de ser una tarea ardua... muchas lneas de cdigo y de conocimientos avanzados en teora de autmatas. En la actualidad, existen diversas herramientas que permiten al usuario abstraerse de complejos algoritmos... Motivacin??... Necesidad de la industria de denir lenguajes propios...
Estandarizar el desarrollo de sus productos. Modelar problemas y distribuir el conocimiento de manera apropiada. Facilitar las tareas de los programadores.
2/14
1. Introduccin
Un compilador es un programa que traduce un programa escrito en un lenguaje a (lenguaje fuente) a un lenguaje b (lenguaje objeto).
Programa Fuente
Analizador Lxico Analizador Sintctico Analizador Semntico Generador Cdigo Intermedio Optimizador Cdigo Intermedio Generador Cdigo Objeto Programa Objeto
3/14
2. Alfabetos y palabras
Un alfabeto es un conjunto nito y no vaco de elementos llamados smbolos o letras. Una palabra o cadena sobre un alfabeto V es una cadena nita de smbolos del alfabeto.
Notaciones: denota a una cadena de longitud 0, tambin conocida como palabra vaca. Vn denota al conjunto de todas las palabras de longitud n sobre V V denota al conjunto de todas las cadenas de cualquier longitud sobre V . V + denota al conjunto de todas las cadenas de cualquier longitud sobre V , excepto la vaca. Un elemento de Vn es una cadena del tipo a1 a2 . . . an donde cada ai V .
4/14
3. Lenguajes Formales
5/14
4. Gramticas Formales
6/14
4. Gramticas Formales
Deniciones: Una regla de produccin es un par ordenado (, ) de forma que: = 1 A2 , donde:
1 , 2 (VN VT ) A VN
(V N V T ) Una regla de produccin (, ) se suele escribir como Ejemplo Denir una gramtica para el lenguaje L = {a(bc )n |n >= 1}: Solucin: S aB B bcB |bc donde VN = {S , B } y VT = {a, b, c }.
7/14
Ejercicios
L2 = {an bn |n > 0}
8/14
BNF es una metasintaxis utilizada para denir gramticas BFN y sus extensiones son ampliamente utilizadas para denir gramticas de lenguajes de programacin. En BNF, smbolos no terminales se denen entre ngulos ( ) y producciones se denen utilizando el smbolo ::=.
Ejemplos
1. <S> ::= a<B> <B> ::= bc<B>|bc 2. <class-dec> ::= class <identifier> { <class-body> }
9/14
EBNF introduce el uso de parntesis cuadrados para smbolos opcionales y llaves para repeticiones. El uso de ngulos para smbolos no terminales no es obligatorio. Introduce el uso de comillas en terminales para evitar ambigedad con smbolos reservados de EBNF.
Smbolo opcional
class-dec ::= "class" identifier ["extends" identifier] "{" class-body "}"
Repeticin
number ::= {digit}
10/14
denota desde cero a n repeticiones + denota desde una a n repeticiones () para agrupaciones
Repeticin
number ::= digit+
Opcin y repeticin
import-dec ::= identifier ("." identifier )* ["." "*"] ";"
11/14
Ejercicios
12/14
Las expresiones regulares tambin permiten especicar lenguajes regulares. Las expresiones regulares son de gran utilidad en editores de texto y aplicaciones para buscar y manipular textos. En la actualidad existe gran soporte para el uso de expresiones regulares (Perl, PHP, bibliotecas Java, bibliotecas .NET, shell Unix, etc). Similar a EBNF: denota desde cero a n repeticiones + denota desde una a n repeticiones {n} denota n repeticiones {m, n} denota de m a n repeticiones ? denota elemento opcional () para agrupaciones
13/14
Ejercicios
Dena los siguientes lenguajes mediante expresiones regulares: L1 = {(ab)n |n > 1} L2 = {an bm |n 4 y m 3} Todas las palabras que empiezen con a y terminen con o Todas las palabras que empiezen con a, tengan una s y terminen con o Todas las palabras que tengan entre 5 y 8 letras
14/14