GRAMATICA LIBRE DE CONTEXTO, TERMINOLOGIA PARA EL ANÁLISIS SINTACTICO, DERIVACIONES Y EL LENGUAJE DEFINIDO POR UNA GRAMÁTICA, ARBOL DE ANÁLISIS SINTACTICO Y DERIVACIONES


1.
GRAMÁTICA LIBRE DE CONTEXTO
El análisis gramatical tiene como tarea
determinar la estructura de un programa,
por esta razón es conocido también como
análisis sintáctico. Esta estructura o
también conocida como sintaxis de un
lenguaje de programación es regulado
mediante
unas
reglas
gramaticales
inmersas dentro de una gramática libre
de contexto.
La estructura básica empleada en estas
gramáticas es por lo general alguna
clase de árbol, conocida como árbol de
análisis gramatical o árbol sintáctico.
Figura 1. Estructura básico, árbol sintáctico
2.
Al
contrario
de
los
analizadores
léxicos, donde existe un solo método
algorítmico, representado por autómatas
finitos,
el
análisis
sintáctico
involucra tener que elegir entre varios
métodos
diferentes
entre
si,
con
diferentes propiedades y capacidades,
destacándose entre estos dos clases de
algoritmos,
análisis
sintáctico
descendente
y
análisis
sintáctico
ascendente.
La gramática de libre contexto hace el
uso
de
convenciones
para
nombrar
expresiones regulares, con el uso de
operaciones muy similares entre si,
teniendo en cuenta que las reglas libres
de contexto son altamente recursivas.
Los algoritmos empleados para reconocer
estas estructuras también difieren mucho
de los algoritmos de análisis léxico,
debido a la recursividad inmersos en
estos algoritmos.
3.
Un ejemplo de esta recursividad, es el
uso
de
una
proposición
condicional
definida
por
una
regla
como
la
siguiente:
Ejemplo 1.1
Ø Si S1 y S2 son proposiciones y E es
una expresión, entonces.
Ø “If E then
proposición.
S1
else
S2”
es
una
Usando la variable sintáctica prop, con
el
fin
de
denotar
la
clase
de
proposiciones y expr para la clase de
expresiones,
se
puede
expresar
recursivamente
usando
una
producción
gramatical
Ø prop à if expr then prop else prop
4.
TERMINOLOGIA PARA EL ANÁLISIS SINTACTICO
1. TERMINALES.
Los terminales son los símbolos
básicos con que se forman las
diferentes cadenas, en el ejemplo
anterior podemos reconocer cada una
de las palabras claves if, then y
else son terminales.
2. NO TERMINALES.
Los no terminales son variables
sintácticas
los
cuales
denotan
conjuntos de cadenas, en el ejemplo
anterior
podemos
observar
dos
estructuras no terminales en prop y
expr. Estas estructuras definen un
conjunto de cadenas que definen el
lenguaje generado por la gramática,
estos imponen también estructuras
jerárquicas sobre el lenguaje, útil
para su análisis sintáctico como
para su traducción.
5.
3. SIMBOLO INICIAL.
En una gramática, un no terminal se
considera a su vez como el símbolo
inicial, y a su vez el conjunto de
expresiones
representado
por
el
lenguaje que es definido por la
gramática.
4. PRODUCCIONES.
Las producciones de una gramática
son aquellas que especifican la
forma
como
se
combinan
los
terminales y los no terminales para
formar diferentes expresiones entre
si. Cada producción consta de un no
terminal, seguido de una flecha u
otro
símbolo
que
reemplaza
la
misma, seguido por una cadena de
terminales y no terminales.
6.
Ejemplo 1.2
Ø expr
Ø expr
Ø expr
Ø expr
Ø op
Ø op
Ø op
Ø op
à
à
à
à
à
à
à
à
expr op expr
( expr )
- expr
id
+
*
/
Teniendo
la
gramática
anterior,
la
terminología utilizada para el análisis
sintáctico viene dada por las siguientes
estructuras:
Símbolos terminales
id + - * / ( )
Símbolos no terminales
expr op
Símbolo inicial
expr
Producción
<< expr
à expr op expr >>
7.
DERIVACIONES Y EL LENGUAJE DEFINIDO POR
UNA GRAMÁTICA
Existen diferentes formas de considerar
el
proceso
mediante
el
cual
una
gramática hace una definición de un
lenguaje.
Las
reglas
gramaticales
determinan un lenguaje especifico, el
cual esta compuesto por conjuntos de
cadenas legales de tokens. Estas reglas
gramaticales
libres
de
contexto
determinan
el
conjunto
de
cadenas
sintácticas
legales
de
símbolos
de
tokens para las estructuras definidas
por las reglas
Ejemplo 1.3
Ø ( 28 + 17 ) / 14
cadena legal de 7 tokens
( numero – numero ) * numero
Ø ( 28 + 17 / 14
cadena no legal, falta su paréntesis
izquierdo.
8.
Las reglas gramaticales determinan las
cadenas legales de símbolos de token por
medio de derivaciones. Una derivación se
define como una secuencia de reemplazos
de
nombres
de
estructura
mediante
selecciones en los lados derechos de las
reglas gramaticales.
Estas
derivaciones
empiezan
con
un
nombre de estructura simple y finaliza
con una cadena de símbolos de token. En
cada una de las etapas de una derivación
se
realiza
un
reemplazo
simple
utilizando una selección de una regla
gramatical.
En el siguiente ejemplo se proporcionara
una derivación para la expresión del
ejemplo anterior ( 28 + 17 ) / 14
utilizando reglas gramaticales vistos en
ejemplos
anteriores.
Cada
paso
se
proporciona a la derecha la selección de
la regla gramatical utilizada para su
reemplazo.
9.
Ejemplo 1.4
Paso
Derivación
Regla Gramatical
1
exp => exp op exp
=> exp op numero
=> exp / numero
=> (exp) / numero
=> (exp op exp) / numero
=> (exp op numero) / numero
=> (exp + numero) / numero
=> (numero + numero) / numero
[exp à exp op exp]
[exp à numero]
[op à /]
[exp à (exp)]
[exp à exp op exp]
[exp à numero]
[op à +]
[exp à numero]
2
3
4
5
6
7
8
Los pasos de derivación utilizan una
flecha diferente al símbolo de flecha
que se emplea en la regla gramatical
empleada “=>” “à”. Esto es debido a que
existen diferencias entre un paso de
derivación
y
su
regla
gramatical
influyente al paso de su derivación.
Las reglas gramaticales se encargan de
definir, mientras que los pasos de
derivación
construyen
mediante
reemplazo.
10.
El conjunto de todas las cadenas de
símbolos obtenidos por las derivaciones
del
símbolo
exp
es
el
lenguaje
definido
por
la
gramática
de
expresiones.
En
este
lenguaje
encontramos la descripción de todas las
expresiones sintácticamente legales. De
manera simbólica podemos describirlo de
la siguiente manera.
Ø L(G) = {s | exp =>* s}
En la producción anterior G representa
la gramática de expresión, s representa
una cadena arbitraria de token, los
símbolos =>* representan una derivación
compuesta de una secuencia de varios
reemplazos
vistos
en
el
ejemplo
anterior.
Cada
nombre
de
estructura
en
una
gramática define su propio lenguaje de
cadenas
sintácticamente
correcta
de
tokens.
11.
ARBOL DE ANÁLISIS SINTACTICO Y
DERIVACIONES
Un árbol de análisis sintáctico se puede
considerar
como
una
representación
grafica de una derivación que no muestra
la relativa elección a su orden de
sustitución. Los nodos al interior de un
árbol de análisis sintáctico se etiqueta
con algún no terminal y a su vez los
hijos de dicho nodo se etiquetan de
izquierda a derecha, con los respectivos
símbolos
del
lado
derecho
de
la
producción por la cual se ha sustituido.
Las
hojas
del
árbol
de
análisis
sintáctico se etiquetan con terminales o
no terminales, leídas de izquierda a
derecha.
Figura 2. Árbol sintáctico para –(id + id)
12.
REALIZADO POR
LUISA FERNANDA BAOS PULIDO
DANIEL EDUARDO MOLINA TORO
INSTITUCIÓN UNIVERSITARIA COLEGIO MAYOR DEL CAUCA
INGENIERÍA INFORMATICA
LENGUAJES FORMALES
POPAYAN (CAUCA)
COLOMBIA
NOV 2013
BIBLIOGRAFIA
COMPILADORES, PRINCIPIOS, TECNICAS Y
HERRAMIENTAS, ALFRED V. AHO , PRENTICE
HALL MEXICO, 2008.
CONSTRUCCION DE COMPILADORES, PRINCIPIOS
Y PRACTICA, KENNETH C. LOUDEN,