UNIVERSIDAD LATINA UNILA IV GRAMTICAS DISTRIBUIDAS Y TABLAS
UNIVERSIDAD LATINA (UNILA) IV. GRAMÁTICAS DISTRIBUIDAS Y TABLAS DE SÍMBOLOS LE, EI, Profesor Ramón Castro Liceaga
Gramáticas Formales • Una gramática es una colección estructurada de palabras y frases ligadas por reglas que definen un conjunto de cadenas de caracteres que representan los comandos completos, que pueden ser reconocidos por un motor de discurso (compilador)
Definición de Gramática • Una gramática G es una tupla (T, N, I, P) donde: – T conjunto de símbolos terminales. – N conjunto de símbolos no terminales. – IÎN símbolo inicial. – P conjunto de producciones.
Ejemplo de Gramática • La gramática G=(N, T, I, P) donde, – N={I, A, B} – T={x, (, ), +, -, *, /; } – P={ I®I+I I®I-I I®A A®A*A A®A/A A®(I) A®x } Secuencias generadas por G: x, x*x+x x*(x/x) x-x+x*x/x
Forma BNF • Una forma de representar las gramáticas es a través de la forma Bakus-Naur (BNF) la cual se usa para describir la sintaxis y la notación de un lenguaje de programación.
Forma BNF • La función de una gramática es definir y enumerar las palabras y frases válida de un lenguaje. • La forma general definida por BNF es denominada regla de producción y se puede representar por: <regla> = sentencias y frases *
Forma BNF • Las partes de la forma general BNF se definen de la siguiente forma: • El lado izquierdo o regla es el identificador único de las reglas definidas para el lenguaje. Puede ser cualquier palabra con la condición de estar encerrada entre los símbolos < >. Este elemento es obligatorio en la forma BNF. • El operador de asignación = o : : = es un elemento obligatorio.
Forma BNF • El lado derecho o sentencias, instrucciones y frases, define todas las posibilidades válidas en la gramática definida. • El delimitador de fin de instrucción (punto o cualquier símbolo) es un elemento obligatorio.
Forma BNF • Ejemplo de una gramática que define las opciones de un Menú en forma de ventana: <raiz> = Archivo |Abrir |Guardar |Enviar |Imprimir |Salir. • En este caso encontramos el concepto de símbolos terminales (T) y símbolos no-terminales (N). Un símbolo terminal es una palabra del vocabulario definido en un lenguaje (Imprimir, Guardar, etc). Un símbolo no-terminal que se puede definir como una regla de producción de la gramática, por ejemplo <raiz> = <opciones>
Forma BNF • En el ejemplo se utilizó el símbolo | de (OR) lo cual denota opciones de selección mutuamente excluyentes ya que solo se puede elegir una opcion.
Practica #8 Siguiendo la siguiente regla de producción forma BNF: <raíz> = <campos> Hacer una gramática G en Java que cambie una cadena de entrada de N (comas) En N (comillas) logrando el formato requerido como se muestra en el siguiente ejemplo : Cadena de entrada, para registro de un empleado en una Base de Datos: Lopez, Roberto, 3014, , 8. 25, 6. 5, , , 10. 75, 8. 5 (diez campos, no todos tienen datos) Logrando una cadena de salida INSERT INTO empleado VALUES ('Lopez', 'Roberto', '3014', '8. 25', '6. 5', '', '10. 75', '8. 5‘); En el cual el símbolo terminal (T) es un punto y coma (; ) Nota: La salida de la gramática será para 10 registros diferentes mostrados en un archivo PDF.
Lenguaje formal Esta constituido por un alfabeto, un vocabulario y un conjunto de reglas de producción definidas por gramáticas. Las frases o instrucciones válidas de un lenguaje formal son aquellas que se crean con los símbolos y palabras definidas, tanto en el alfabeto como en el vocabulario del lenguaje y que cumplen con las reglas de producción definidas en las gramáticas.
Clasificación de las Gramáticas • • Regulares – Producciones: • N®TN • N®T – Analizador: autómata finito determinista. – Complejidad del análisis: lineal Libres del Contexto – Producciones: • N®(T|N)* – Analizador: autómata con pila. – Complejidad del análisis: lineal Dependientes del Contexto – Producciones: • a®b, donde a, b Î (T|N)* y |a| £ |b| – Complejidad del análisis: exponencial Generales o distribuidas – Complejidad del análisis: no se puede con memoria finita.
Jerarquización de gramáticas Las gramáticas pueden ser de distintos tipos, de acuerdo con las características que rigen la formulación de reglas de producción válidas, todas las cuales parten de las gramáticas arbitrarias, que son aquellas que consideran la existencia infinita de cadenas formadas por los símbolos del lenguaje.
Notación BNF Extendida • Regla BNF: no terminal : : = expresión BNF • Terminal: – Forma única: secuencia de caracteres que lo forma. • Ej. if, +, then, for – Forma variable: nombre que lo identifica. • Ej. identificador, numero, string, carácter, literal • No Terminal: nombre entre < y > – Ej. <programa>, <lista de argumentos>, <expresión>, <instrucción> • Secuencia vacía: l • Operadores: – Unión: a | b – Secuencia: a b – Opcional: [a]= l | a – Repetición: {a}= l | a a a |. . .
Ejemplo • Gramática simplificada de la declaración de una variable en C. <dec>: : =<tipo> <var> {, <var>}; <tipo>: : =[signed|unsigned] (int|char) <var>: : ={*} identificador {‘[‘ número ‘]’} • Símbolos terminales: signed, unsigned, int, char, identificador, número, ‘[‘, ‘]’, ‘, ’ • Símbolos no terminales: <dec>, <tipo>, <var> • Símbolo inicial: <dec> • Secuencias válidas: int a, **b[3][4]; unsigned char *p; signed char str[100];
Diagramas Sintácticos No Terminal Diagrama sintáctico de un símbolo no terminal No Terminal Símbolo no terminal Terminal Símbolo Terminal Ejemplo: <sumas>: : = número {+ número} sumas número +
• Ejemplo Diagramas sintácticos para expresiones aritméticas. expresión término + término - factor * factor - / factor identificador factor número ( expresión )
Tabla de símbolos (identificadores). • El compilador utiliza la Tabla de Símbolos para llevar un seguimiento de los identificadores (constantes, variables, funciones, métodos, tipos) que aparecen en el programa fuente. Se examina la Tabla de Símbolos cada vez que se encuentra un identificador. • La Tabla de Símbolos es después del árbol de análisis sintáctico la principal estructura de datos de un compilador. • La Tabla de Símbolos interacciona con el analizador léxico y con el analizador sintáctico para introducir o consultar información en el proceso de la compilación. También interacciona con el análisis semántico, comprobación de tipo y con el módulo de generación de código. • La información que se introduce en la tabla de símbolos depende del Oscarlenguaje. Bonilla 19
Proceso de compilación y Tabla de símbolos. Oscar Bonilla 20
Tabla de símbolos (identificadores). • La estructura de datos puede ser en forma de Listas lineales ya que es fácil de implementar cuando el número de entradas es grande. • Normalmente las entradas se insertan en orden en que aparecen. Así, si buscamos desde atrás, cuando aparezca un identificador en el programa y lo busquemos en la Tabla de Símbolos nos encontraremos primero con el que ha sido mas cercano. Oscar Bonilla 21
Practica #9 Hacer una La Tabla de identificadores como una lista enlazada para los siguientes identificadores de java con salida a PDF:
- Slides: 22