Escolar Documentos
Profissional Documentos
Cultura Documentos
Franklin Parra
Luis Pazmiño
Paralelo: “B”
Gramática libres de contexto
Concepto
Gramatica: expresa la competencia lingüística. Modelar el comportamiento
linguistico en el proceso de comunicación (comprensión y generación de la
lengua).
Gramática: Especificación rigurosa y explicita de la estructura de un lenguaje (No
ambigua, predictiva, aplicativa) [1].
Gramática Generativa
Nos permite expresar o explicar el mecanismo mediante el cual los hablantes de
una lengua son capaces de producir y entender oraciones, en las que consta por 4
componentes que son (V,T,P,S):
V es un conjunto de variables o símbolos no terminales sus elementos se suelen
representar con las letras mayúsculas [2].
T Es el alfabeto, conjunto de símbolos terminales. Sus elementos se suelen
representar con letras minúsculas.
P es un conjunto de pares (a, B), llamados reglas de producción, donde a, B en (V U
T)* y a contiene, al menos un símbolo de V. El par (a, B) se suele representar como
a à B
S es un elemento de V, llamado símbolo de partida o inicial [3].
Una GLC es un dispositivo generador.
• Definimos el lenguaje LG generado por una gramática G del siguiente modo: LG =
{ w / S ⇒* w } , siendo ⇒* una “especie” de clausura transitiva de → y w una tira de
terminales [4].
Ejemplo 1:
Ejemplo 2:
Árbol de derivación
Un árbol de derivación permite mostrar gráficamente cómo se puede derivar
cualquier cadena de un lenguaje a partir del símbolo distinguido de una gramática
que genera ese lenguaje [5].
Un árbol es un conjunto de puntos, llamados nodos, unidos por líneas, llamadas
arcos. Un arco conecta dos nodos distintos. Para ser un árbol un conjunto de nodos
y arcos debe satisfacer ciertas propiedades [6]:
• Hay un único nodo distinguido, llamado raíz (se dibuja en la parte superior)
que no tiene arcos incidentes.
• Todo nodo c excepto el nodo raíz está conectado con un arco a otro nodo k,
llamado el padre de c (c es el hijo de k). El padre de un nodo, se dibuja por
encima del nodo.
• Todos los nodos están conectados al nodo raíz mediante un único camino.
• Los nodos que no tienen hijos se denominan hojas, el resto de los nodos se
denominan nodos interiores.
Fig 1 Ejemplo de árbol de derivación [6].
Árbol de Sintaxis Abstracta
Es una representación de árbol de la estructura sintáctica abstracta (simplificada)
del código fuente escrito en cierto lenguaje de programación. Cada nodo del árbol
denota una construcción que ocurre en el código fuente. La sintaxis es abstracta en
el sentido que no representa cada detalle que aparezca en la sintaxis verdadera.
Por ejemplo, el agrupamiento de los paréntesis está implícito en la estructura
arborescente, y una construcción sintáctica tal como IF condición THEM puede ser
denotada por un solo nodo con dos ramas.
Esto hace a los árboles de sintaxis abstracta diferentes de los árboles de sintaxis
concreta, llamados tradicionalmente árboles de parser, que son a menudo
construidos por la parte parser de la traducción del código fuente y el proceso
de compilación (a pesar quizás de un nombramiento no intuitivo). Una vez
construido, información adicional es agregada al AST por procesamiento
subsecuente, ej., análisis semántico. [7]
Ejemplo 2.9.4
Sea con
y las producciones:
Ambigüedad
Gramáticas ambiguas
La ambigüedad es un problema muy importante en informática.
No hay métodos automatizados para obtener gramáticas no ambiguas.
Sí hay "recomendaciones generales".
Def (Gramática ambigua) Una gramática es ambigua si existe alguna cadena de
terminales que pueda obtenerse mediante árboles de derivación distintos (dos
árboles distintos dan la misma cadena)
Solución
Una categoría sintáctica distinta para cada nivel de precedencia (jerarquizar la
gramática)
Lenguajes ambiguos
Def (LI ambiguo) Un lenguaje incontextual es inheremente ambiguo si todas las
gramáticas que lo representan son ambiguas
Ejemplo
El lenguaje de las expresiones aritméticas tenía una gramática ambigua, pero
también otra que no lo es lenguaje no ambiguo.
No siempre es posible eliminar la ambigüedad. No es porque no conozcamos un
algoritmo que elimine la ambigüedad, sino que estamos seguros de que no puede
hacerse[8].
Ejemplo
El siguiente lenguaje es inherentemente ambiguo: