Facultad de Ingeniería de Sistemas Lenguajes y Aspectos Formales (Parte 1) 1
Aspectos Formales Los compiladores traducen lenguajes que están formalmente definidos a través de reglas que permiten escribir comandos correctos. Para un buen estudio de compiladores es necesario conocer los aspectos formales usados en la definición de los lenguajes. El área de Aspectos Formales constituyen normalmente un curso de post graduación por tanto veremos sólo los fundamentos para la mejor comprensión de los lenguajes. 2
Definiciones Alfabeto (A) : Conjunto arbitrario y finito de símbolos de un lenguaje. Ejemplos: El lenguaje de máquina se basa en el alfabeto A = { 0, 1} El sistema decimal se basa en el alfabeto A = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9} La lengua inglesa se basa en el alfabeto A = { A, a, B, b, C, c, D, d, E, e,... X,x, Y, y, Z, z} Cada lengua tiene su propio alfabeto, por ejemplo el portugués no tiene el mismo alfabeto que el español (no posee LL, Y) 3
Definiciones Símbolos: Son los elementos del alfabeto. Cadena o palabras: Secuencia finita de símbolos de un alfabeto. Ejemplo: XYZ, CASA son cadenas del alfabeto español y también del inglés pero XYZ no lo es del portugués. Frase: Secuencia de símbolos o cadenas. Ejemplos: Sobre el alfabeto español El río es azul María 4
Definiciones Gramática o Sintaxis: Conjunto de reglas que definen si una frase forma parte del lenguaje (es decir si está correcta o no). Si la frase está correcta entonces será aceptada por el lenguaje. Ejemplos: Considerando las reglas sintácticas del español, frases aceptadas por el lenguaje español : El gato es negro Gato Negro Frases no aceptadas : Está robó el negro el gato 5
Definiciones Para especificar las reglas de la gramática se usan las producciones. Producciones : Son las reglas que definen como generar frases válidas de un lenguaje. Tienen la forma: A B Se lee : A está definido por B ó A puede ser sustituido por B B puede derivarse de A. Normalmente se usan los símbolos y ::= para especificar la transformación que originará las frases del lenguaje. ó 6 *
Definiciones Una producción contiene: Un lado izquierdo (A) que representa la cadena que va a transformarse (Lo que se define). Un lado derecho (B) que representa la cadena resultante de la transformación (La definición). Ejemplo: Oración Sujeto Verbo Predicado ó Oración ::= Sujeto Verbo Predicado N 10 ó N ::= 10 7
Definiciones Símbolos terminales : Son las cadenas que realmente aparecen en una frase. Nunca aparecen del lado izquierdo de una producción. Para la producción N 10 ; 10 es un símbolo terminal. La producción Oración Sujeto Verbo Predicado no tiene símbolos terminales T denota el conjunto de símbolos terminales de un lenguaje. * 8
Definiciones Símbolos no terminales : Conocidos también como categorías sintácticas, no pertenecen a T y deben ser definidos en una producción, es decir deben aparecer por lo menos una vez del lado izquierdo de una producción. Representan los estados intermedios en el proceso de generación de un lenguaje. La producción N 10 ; Define el símbolo no terminal N La producción Oración Sujeto Verbo Predicado Define el símbolo no terminal Oración como Sujeto seguido de un Verbo y luego de un Predicado. 9
Definiciones N denota el conjunto de todos los símbolos no terminales del lenguaje. Para que el lenguaje esté bien definido es necesario que todos los símbolos no terminales tengan su definición en el conjunto de producciones. Podemos decir que un lenguaje L es el conjunto de todas las combinaciones de cadenas que se forman de acuerdo a las reglas gramaticales (conjunto de producciones del lenguaje). S denota el símbolo no terminal inicial, que representa el punto de partida de la gramática. 10
Definiciones El conjunto de producciones (P) define todas las reglas para formación de frases válidas del lenguaje y podemos considerarlo la Gramática de un lenguaje. Cualquier frase válida del lenguaje tiene que ser generada a través del uso de las producciones y se dice que pertenece al lenguaje. Una frase que no es generada por el uso de las producciones o es generada por la aplicación inválida de las producciones, se considera una frase inválida se dice que no pertenece al lenguaje. 11
Definiciones Se podría completar la definición del ejemplo anterior: Sujeto Perro Verbo Ladra Predicado Fuerte Podemos ahora decir que: T = { Perro, Ladra, Fuerte} N = { Oración, Sujeto, Verbo, Predicado } La frase Perro Ladra Fuerte pertenece al lenguaje La frase Ladra Perro Fuerte no pertenece al lenguaje 12
BNF Para compilar un programa escrito en un lenguaje de programación es necesario conocer la definición de ese lenguaje de programación (sintaxis y semántica). Se usa la notación Backus Naur Form (BNF) para especificar la sintaxis de un lenguaje de programación. La notación BNF es en realidad un metalenguaje, es decir un lenguaje para describir otros lenguajes. Un grupo de meta símbolos usados en (dialecto) la notación BNF son: 13
BNF Metasímbolo Significado Se define como O, alternativa [X] Opcionalidad (una o ninguna ocurrencia de X) { X } Número arbitrario de ocurrencias de X (0 o más veces) 14
BNF Ejemplo: Lista Lista + digito Lista - digito digito digito 0 1 2 3 4 5 6 7 8 9 Estas producciones definen un lenguaje. Qué frases son válidas para este lenguaje? Las siguientes frases pertenecen al lenguaje? Cómo se generan? 1 5 + 3-4 5 + 1-0 10 23-6 Qué modificaciones podemos hacer a las producciones para que la frase - 0 sea válida? 15
Otro ejemplo: BNF Entero Signo EnteroSinSigno EnteroSinSigno EnteroSinSigno Digito Digito Signo + - digito 0 1 2 3 4 5 6 7 8 9 Se puede observar que esta definición es recursiva (EnteroSinSigno), lo que permite generar números enteros de un dígito o más. Tarea: prepare la gramática para simple un lenguaje 16
Gramática Formal Una gramática Formal G está definida por una cuádrupla G(T, N, P, S), donde: T es el conjunto de terminales N es el conjunto de no terminales P es el conjunto de producciones S N es el símbolo inicial Cada gramática G caracteriza (genera) un lenguaje, decimos por tanto que un lenguaje formal se asocia a una gramática: L(G) = L(T, N, P, S) 17
Ejemplos Sea G0 = (T, N, P, Cadena) donde T = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9} N = { Cadena } P = {Cadena Cadena + Cadena Cadena - Cadena 0 1 2 3 4 5 6 7 8 9 } Frases válidas: 1 + 5 6-4 9 18
Ejemplos Sea G1 = (T, N, P, Entero) donde T = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9} N = { Entero, Signo, EnteroSinSigno, Digito} P = {Entero Signo EnteroSinSigno, Signo + -, EnteroSinSigno EnteroSinSigno Digito Digito, Digito 0 1 2 3 4 5 6 7 8 9 } Frases válidas: +10 589 19
Ejemplos Sea G2= (T, N, P, Bloque) donde T = { Begin, End, C, ; } N = { Bloque, Cuerpo, Lista, Comando} P = {Bloque Begin Cuerpo End, Cuerpo Lista ε, Lista Lista; Comando Comando, Comando C } Frases válidas: Begin End Begin C; C End 20
Árboles de derivación o sintácticos Muestra gráficamente como desde el no terminal S se deriva una cadena del lenguaje. Para la producción inicial: A C D F La raíz del árbol sería A con tres hijos C, D y F de izquierda a derecha y luego cada símbolo no terminal n i debe ser sustuido (usando una producción cuyo lado izquierdo sea justamente n i ). El proceso se repetirá en cada nodo del árbol hasta llegar a símbolos terminales (Hojas del árbol) A C D F * 21
Árboles de derivación Para G0 la frase 1 + 5 tiene el siguiente árbol de derivación Cadena Producción Cadena + Cadena 1 5 Frase derivada 22
Árboles de derivación Para G2 la frase Begin C; C End tiene el siguiente árbol de derivación Bloque Cuerpo Begin Lista End Lista ; Comando Comando C C 23
Derivaciones Se dice que una cadena α n se puede derivar de α 0 si y sólo si existe la secuencia de cadenas α 0, α 1, α 2,.. α n tal que cada α i puede derivarse directamente de α i-1 (existe α i-1 α i ): α 0 α 1 α 2. α i-1 α i α n Podemos abreviar con el símbolo * conocido como cerradura transitiva reflexiva de α 0 * α n (α i-1 α i, i = 1, 2,.., n) 24