Sie sind auf Seite 1von 19

04/12/2017

LENGUAJES Y AUTOMATAS 1
Investigacin Unidad 6: Anlisis Sinttico

5 Semestre Grupo S-501


Instituto Tecnolgico Superior de Panuco
Ingeniera en Sistemas Computacionales
Alumno: Roque Oswaldo Cazares Garca. Karina Leonardo Azuara.
Docente: MC. Enrique Ponce Rivera
UNIDAD 6: ANALISIS SINTETICO
ndice

Introduccin.3

6.1 Gramtica Libre de Contexto..3

6.2 rboles de derivacin..5

6.3 Formas normales de Chomsky7

6.4 Diagramas de sintaxis10

6.5 Eliminacin de la ambigedad.12

6.6 Generacin de matriz predictiva (clculo first y follow)13

6.7 Tipos de analizadores sintcticos..14

6.8 Manejo de errores15

6.9 Generadores de analizadores sintcticos17

Conclusin..18

Bibliografa.18

2
UNIDAD 6 Anlisis Sinttico.

Introduccin

En concepto veremos lo que es Gramtica Libre de Contexto y un ejemplo; son lenguajes libres
de contexto y estn definidos por medio de gramticas libres de contexto. rboles de derivacin,
permite mostrar grficamente cmo se puede derivar cualquier cadena de un lenguaje a partir
del smbolo distinguido de una gramtica que genera ese lenguaje. Forma Normal de Chomsky
es Una sentencia w se denomina ambigua si puede obtenerse por ms de un rbol de derivacin.

Al igual veremos lo que son los diagramas de sintaxis y algunos ejemplos seguidos de la
eliminacin de la ambigedad y sus ejemplos tambin la generacin de matriz predictiva (calculo
First y follow) y los tipos de analizadores sintcticos y el manejo de errores y por ltimo los
generadores de analizadores sintcticos estos con los puntos de los temas que veremos a
continuacin.

6.1 Gramtica Libre de Contexto

La mayora lenguajes de programacin, son lenguajes libres de contexto y estn definidos por
medio de gramticas libres de contexto. Contexto se refiere al entorno en que se encuentra,
como influye el entorno en el significado de cada parte.

Puede ser reconocido por autmatas de pila.

Est definido dentro de la jerarqua de Chomsky en el Tipo 2.

3
Es una gramtica formal en la que cada regla de produccin es de la forma:

Nw

Donde N es un smbolo no terminal y w es una cadena de terminales y/o no terminales. El trmino


libre de contexto se refiere al hecho de que el no terminal N puede siempre ser sustituido por w
sin tener en cuenta el contexto en el que ocurra. Un lenguaje formal es libre de contexto si hay
una gramtica libre de contexto que lo genera.

Definicin de la Gramtica

Es una cudrupla G = (N,T,P,S) donde:


N es un alfabeto de smbolos no terminales (variables).
T es un alfabeto de smbolos terminales (constantes).
Pueden ser cadenas de lenguaje.

Produccin

Donde cualquier smbolo No Terminal del lado derecho de la produccin puede ser remplazado
por cualquier definicin de ese mismo terminal del lado derecho.

Ejemplo: S E

EE+E

E num

Ejemplo

Un ejemplo de una Gramtica Libre del contexto que reconoce operaciones de suma y
multiplicacin con nmeros enteros, como {5, 52+3, (1+3)*4}

4
Donde E es una expresin Numrica
Num es un nmero
Digito es cualquier entero de 0 a 9

6.2 rboles de derivacin.

Un rbol de derivacin permite mostrar grficamente cmo se puede derivar cualquier cadena
de un lenguaje a partir del smbolo distinguido de una gramtica que genera ese lenguaje.

Un rbol es un conjunto de puntos, llamados nodos, unidos por lneas, llamadas arcos. Un arco
conecta dos nodos distintos. Para ser un rbol un conjunto de nodos y arcos debe satisfacer
ciertas propiedades:

Hay un nico nodo distinguido, llamado raz (se dibuja en la parte superior) que no tiene
arcos incidentes.
Todo nodo c excepto el nodo raz 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 estn conectados al nodo raz mediante un nico camino.
Los nodos que no tienen hijos se denominan hojas, el resto de los nodos se denominan
nodos interiores.

Propiedades de un rbol de derivacin.

Sea G = (N,T,S,P) una gramtica libre de contexto, sea A N una variable. Diremos que un rbol
TA = (N,E) etiquetado es un rbol de derivacin asociado a G si verifica las propiedades siguientes:

La raz del rbol es un smbolo no terminal


Cada hoja corresponde a un smbolo terminal o .
Cada nodo interior corresponde a un smbolo no terminal.

Para cada cadena del lenguaje generado por una gramtica es posible construir (al menos) un
rbol de derivacin, en el cual cada hoja tiene como rtulo uno de los smbolos de la cadena.

5
Para cada cadena del lenguaje generado por una gramtica es posible construir (al menos) un
rbol de derivacin, en el cual cada hoja tiene como rtulo uno de los smbolos de la cadena.

Si un nodo est etiquetado con una variable X y sus descendientes (ledos de izquierda a derecha)
en el rbol son X1,,Xk , entonces hay una produccin X X1Xk en G.

Sea G=(N,T,S,P) una GLC. Un rbol es un rbol de derivacin para G si:

T U N U {}

1. Todo vrtice tiene una etiqueta tomada de

2. La etiqueta de la raz es el smbolo inicial S

3. Los vrtices interiores tienen etiquetas de N

4. Si un nodo n tiene etiqueta A y n1n2...nk respectivamente son hijos del vrtice n, ordenados
de izquierda a derecha, con etiquetas x1,x2..xk respectivamente, entonces: A x1x2...xk debe
ser una produccin en P

5. Si el vrtice n tiene etiqueta , entonces n es una hoja y es el nico hijo de su padre.

Ejemplo

Sea G=(N,T,S,P) una GLC con P: S ab|aSb

La derivacin de la cadena aaabbb ser:

y el rbol de derivacin:

6
Relacin entre derivaciones y rboles

Si leemos las etiquetas de las hojas de izquierda a derecha tenemos una sentencia. Llamamos a
esta cadena la produccin del rbol de derivacin.

Teorema. Sea G=(N,T,S,P) una GLC. Entonces (de S se deriva ) si y slo si hay un rbol
de derivacin en la gramtica G con la produccin .

Si w es una cadena de L(G) para la gramtica libre de contexto G, entonces w tiene al menos un
rbol de derivacin. Referido a un rbol de derivacin particular, w tendr una nica derivacin
a la izquierda y otra nica a la derecha.

Ejemplo

Derivacin a la izquierda:

Derivacin a la derecha:

6.3 Formas normales de Chomsky.

Una sentencia w se denomina ambigua si puede obtenerse por ms de un rbol de derivacin (o


equivalentemente, ms de una derivacin ms a la izquierda o ms a la derecha).

Una gramtica G se denomina ambigua si el lenguaje que genera contiene alguna sentencia
ambigua.

Lenguaje inherentemente ambiguo

Un lenguaje se denomina inherentemente ambiguo si no existe una gramtica no ambigua que


lo genere.

Una GLC se dice que est en Forma Normal de Chomsky (FNC) si todas sus producciones son de
la forma:

7
Excepcionalmente se permite la produccin

La idea de la transformacin de una gramtica limpia a FNC se ejecuta en dos pasos:

Hacer que en la parte derecha de las producciones de longitud mayor o igual que dos slo
haya terminales.
Trocear estas producciones para que tengan longitud dos.

Algoritmo FNC:

1. Para cada produccin de la forma

Para cada i, si i es terminal

Se aade la produccinn Ca a
Se cambia i por Ca en A 1..n
2. Para cada produccin de la forma A B1...Bm, m 3
a) Se aaden (m-2) no terminales D1, D2, ..., Dm-2 (distintos para cada produccin)
b) La produccin A B1...Bm se reemplaza por A B1D1, D1 B2D2, ... Dm-2 Bm-
1Bm

Las gramticas se pueden expresar de diferentes formas, en ocasiones podemos llegar al mismo
resultado utilizando gramticas que difieren en su estructura, una norma para estandarizar la
gramtica es la Forma Normal de Chomsky.

Si L es un lenguaje independiente del contexto que no contiene la cadena vaca, entonces existe
una gramtica G independiente del contexto tal que L(G)=L y el lado derecho de cualquier regla
de reescritura en G consiste en un solo terminal o exactamente dos no terminales.

Se dice que una gramtica cuyas reglas de reescritura se adhieren a las restricciones del teorema
2.4 tiene la FORMA NORMAL DE CHOMSKY (FNC o CNF), llamada as en honor a Noam Chomsky.
Por ejemplo, la siguiente gramtica cuyo smbolo inicial es S tiene la forma normal de Chomsky.

S XM

M SY

Xx

Yy

8
Mientras que la siguiente gramtica que genera el mismo lenguaje no la tiene

S xSy

S xy

Para obtener la forma normal de Chomsky

ejemplo: Considere la siguiente gramtica

S zMz

MN

M yMy

Nx

S zMz zyMyz zyNyz zyxyz .

Paso 1

Introducir los nuevos no terminales YZ y convertir la gramtica anterior en la siguiente:

S ZMZ

MN

Zz

Yy

Nx

Paso 2

Lo siguiente es reemplazar la regla S ZMZ por el par de reglas S ZR; R MZ, mientras que M YMY
se reemplaza por M YP; P MY para obtener la siguiente gramtica:

S ZR

R MZ

9
MN

M YP

P MY

Zz

Yy

Nx

Paso 3

Finalmente, la regla M N se reemplaza por la regla M x, produciendo as la siguiente gramtica ya


que tiene la forma normal de Chomsky.

S ZR

R MZ

Mx

M YP

P MY

Zz

Yy

Nx

S ZR zMZ zYPZ zyPZ zyMYZ zyxYZ zyxyZ zyxyz

6.4 Diagramas de sintaxis

Los diagramas sintcticos, de sintaxis o diagramas del ferrocarril son una forma de representar
una gramtica libre de contexto. Representan una alternativa grfica para la Forma de Backus-
Naur (BNF, por sus siglas en ingls) o la Forma Extendida de Backus-Naur (EBNF, por sus siglas en
ingles).

10
Los diagramas de ferrocarril son ms comprensibles para la mayora de la gente. Alguna parte de
la popularidad del formato de intercambio de datos JSON se debe a su representacin en los
diagramas de ferrocarril.

Un segundo mtodo alternativo para desplegar las producciones de ciertas gramticas de tipo 2
es el diagrama de sintaxis. sta es una imagen de las producciones que permite al usuario ver las
sustituciones en forma dinmica, es decir, verlas como un movimiento a travs del diagrama. En
la figura 10.5 se ilustrar los diagramas que resultan de la traduccin de conjuntos de
producciones tpicos, que son, por lo general, todas las producciones que aparecen en el lado
derecho de algn enunciado BNF.

Ambigedad Transitoria:

Este tipo de ambigedad puede llegar a ser eliminada realizando una serie de transformaciones
sobre la gramtica original. Una vez que se logra lo anterior, la gramtica queda lista para ser
reconocida por la mayor parte de los analizadores sintcticos. (Se le considera "ambigedad"
porque existen mtodos para realizar anlisis sintctico que no aceptan gramticas con estas
caractersticas)

Dnde se presenta la Ambigedad Transitoria generalmente la ambigedad se presenta cuando


existen producciones con factores comunes (distintas alternativas para un smbolo no-terminal
que inician de la misma forma); cuando existen producciones que son recursivas izquierdas
(producciones para un smbolo no-terminal en las cuales el primer smbolo de su forma sentencial
es ese mismo smbolo no-terminal).

Cmo solucionar el problema de la Ambigedad Transitoria?

Para eliminar este tipo de ambigedad, es necesario, primero eliminar:

Factores comunes izquierdos inmediatos y No-inmediatos.


Recursividad izquierda inmediata y No-inmediata.

11
6.5 Eliminacin de la ambigedad.

Una GLC es ambigua si existe una cadena w L(G) que tiene ms de una derivacin por la
izquierda o ms de una derivacin por la derecha o si tiene dos o ms arboles de derivacin.

En casi de y que toda cadena w L (G) tenga un nico rbol de derivacin no es ambigua.

Ejemplo: La gramtica S aS| Sa | a es ambigua porque aa tiene dos derivaciones por la


izquierda S aS aa S Sa aa.

Tipos de Ambigedad

Dentro del estudio de gramticas existen dos tipos fundamentales de ambigedad, los cuales son:

Ambigedad Inherente:

Las gramticas que presentan este tipo de ambigedad no pueden utilizarse para lenguajes de
programacin, ya que por ms transformaciones que se realicen sobre ellas, nunca se podr
eliminar completamente la ambigedad que presentan:

Un lenguaje L es inherentemente ambiguo si todas sus gramticas; si existe cuando menos una
gramtica no ambigua para L, L no es ambiguo.

El lenguaje de las expresiones no es Ambiguo


Las expresiones regulares no son ambiguas
Ejemplo de un lenguaje inherentemente ambiguo:

La gramtica es ambigua: hay cadenas con ms de una derivacin ms izquierda:

12
6.6 Generacin de matriz predictiva ( clculo first y follow)

FIRST: Sea G := (V; ; Q0; P) una gramtica libre de contexto. Para cada forma sentencial (V
U )* y para cada k N definiremos la funcin.

En otras palabras, el operador FIRST k asocia a cada forma sentencial los primeros k smbolos de
cualquier forma terminal alcanzable desde mediante derivaciones masa la izquierda".

FOLLOW: Con las mismas notaciones anteriores, para cada forma sentencial (V U )*
definiremos la funcin FOLLOWG GK () del modo siguiente.

De nuevo nos ocuparemos solamente de FOLLOW: = FOLLOW1. Obsrvese que FOLLOW k ()


* y que para cada x FOLLOW (), Ixl k. Obsrvese que para cada variable A V, FOLLOW(A)
son todos los smbolos terminales que pueden aparecer a la derecha de A en alguna forma
sentencial de la gramtica.

13
6.7 Tipos de analizadores sintcticos

Analizador Descendente:

Se construye el rbol de anlisis sinttico partiendo del smbolo inicial y aplicando las
producciones mediante derivaciones por la izquierda, el smbolo a expandir es el que esta mas a
la izquierda.

Analizador Ascendente:

Se construye el rbol de anlisis sinttico partiendo de la frase a reconocer y aplicando las


producciones mediante reducciones hasta llegar al smbolo inicial de la gramtica.

Ejemplo:

G= ({+,*, ID, (,)}, {E, T, P},E, P)P={E:=E+T | T; T:=T*P | P; P:= ID | (E) }FraseID + ( ID * ID )

14
6.8 Manejo de errores

Un compilador es un sistema que en la mayora de los casos tiene que manejar una entrada
incorrecta. Sobre todo, en las primeras etapas de la creacin de un programa, es probable que el
compilador se utiliza para efectuar las caractersticas que debera proporcionar un buen sistema
de edicin dirigido por la sintaxis, es decir, para determinar si las variables han sido declaradas
antes de usarla, o si faltan corchetes o algo as.

Por lo tanto, el manejo de errores es parte importante de un compilador y el escritor del


compilador siempre debe tener esto presente durante su diseo.

Hay que sealar que los posibles errores ya deben estar considerados al disear un lenguaje de
programacin. Por ejemplo, considerar si cada proposicin del lenguaje de programacin
comienza con una palabra clave diferente (excepto la proposicin de asignacin, por supuesto).
Sin embargo, es indispensable lo siguiente:

El compilador debe ser capaz de detectar errores en la entrada;

El compilador debe recuperarse de los errores sin perder demasiada informacin;


Y, sobre todo, el compilador debe producir un mensaje de error que permita al
programador encontrar y corregir fcilmente los elementos (sintcticamente) incorrectos
de su programa.

Errores Sintcticos.

Muchos errores de naturaleza sintctica Recuperacin: Al producirse un error el compilador debe


ser capaz de informar del error y seguir compilando. (Ideal).

El manejo de errores de sintaxis es el ms complicado desde el punto de vista de la creacin de


compiladores. Nos interesa que cuando el compilador encuentre un error, se recupere y siga
buscando errores. Por lo tanto, el manejador de errores de un analizador sintctico debe tener
como objetivos:

15
Indicar los errores de forma clara y precisa. Aclarar el tipo de error y su localizacin.
Recuperarse del error, para poder seguir examinando la entrada.
No ralentizar significativamente la compilacin.

Un buen compilador debe hacerse siempre teniendo tambin en mente los errores que se
pueden producir; con ello se consigue:

Simplificar la estructura del compilador.


Mejorar la respuesta ante los errores.

Errores semnticos.

Un lenguaje con comprobacin fuerte de tipos es capaz de garantizar que los programas se
pueden ejecutar sin errores de tipo, por lo que los errores de tipo se detectarn siempre en
tiempo de compilacin.

Como mnimo, ante un error, un comprobador de tipos debe informar de la naturaleza y posicin
del error y recuperarse para continuar con la comprobacin del resto del programa a analizar.

Veamos algunas de las operaciones a tener en cuenta en una comprobacin de tipos:

Conversin de tipos: A veces es necesario transformar el tipo de una expresin para


utilizar correctamente un operador o para pasar de forma adecuada un parmetro a una
funcin.
Coercin: Es una conversin de tipos que realiza de forma implcita el propio compilador.
Si es el programador el que realiza la conversin se tratar entonces de una conversin
explcita.
Sobrecarga de operadores: La sobrecarga se resuelve determinando el tipo de cada una
de las expresiones intervinientes en la sobrecarga.
Funciones polimrficas: Son aquellas que trabajan con argumentos cuyo tipo puede
cambiaren distintas llamadas a la funcin.

16
6.9 Generadores de analizadores sintcticos

ANTLR:

(ANother Tool for Language Recognition; en espaol "otra herramienta para reconocimiento de
lenguajes") es una herramienta creada principalmente por Terence Parr, que opera sobre
lenguajes, proporcionando un marco para construir reconocedores (parsers), intrpretes,
compiladores y traductores de lenguajes a partir de las descripciones gramaticales de los mismos
(conteniendo acciones semnticas a realizarse en varios lenguajes de programacin).

GNU bison:

Es un programa generador de analizadores sintcticos de propsito general perteneciente al


proyecto GNU disponible para prcticamente todos los sistemas operativos, se usa normalmente
acompaado de flex aunque los analizadores lxicos se pueden tambin obtener de otras formas.

Grammatica:

Es un generador de analizadores sintcticos de C# y Java libre. Es similar a otras herramientas


como Yacc o ANTLR. Grammatica soporta el algoritmo LL(k) para gramticas con un nmero
ilimitado de tokens de anticipacin. Est bastante bien probado, y ha sido auto compilado desde
la versin 0.1. La documentacin contiene una lista completa de caractersticas, as como una
comparacin con otros generadores de analizadores.

JavaCC:

(Java Compiler Compiler) es un generador de analizadores sintcticos de cdigo abierto para el


lenguaje de programacin Java. JavaCC es similar a Yacc en que genera un parser para una
gramtica presentada en notacin BNF, con la diferencia de que la salida es en cdigo Java. A
diferencia de Yacc, JavaCC genera analizadores descendentes (top-down), lo que lo limita a la
clase de gramticas LL (K) (en particular, la recursin desde izquierda no se puede usar). El
constructor de rboles que lo acompaa, JJTree, construye rboles de abajo hacia arriba (bottom-
up).

Yacc:

Es un programa para generar analizadores sintcticos. Las siglas del nombre significan Yet
Another Compiler-Compiler, es decir, "Otro generador de compiladores ms". Genera un
analizador sintctico (la parte de un compilador que comprueba que la estructura del cdigo
fuente se ajusta a la especificacin sintctica del lenguaje) basado en una gramtica analtica

17
escrita en una notacin similar a la BNF. Yacc genera el cdigo para el analizador sintctico en el
Lenguaje de programacin C.

Conclusin

En este documento encontramos e investigamos sobre los puntos establecido en esta unidad que
son Gramtica Libre de Contexto, rboles de derivacin, Formas normales de Chomsky,
Diagramas de sintaxis, Eliminacin de la ambigedad , Generacin de matriz predictiva (clculo
First y follow), Tipos de analizadores sintcticos, Manejo de errores, Generadores de analizadores
sintcticos y se eligi uno en particular, entenderlo despus explicarlo o realizar algn tipo de
ejemplo para el mejor manejo gracias a estos tipos de ejemplos esta unidad se comprendi y se
entendi ya que se dieron a conocer algunos ejemplos en este documento y que se resumi todos
los archivos que se encontraron hasta poder entender lo que posiblemente sea entendible y
comprensible para cualquier estudiante o cualquier persona que necesite de algn documento
que hable sobre analizadores lxicos y otros tipos de lexemas el documento que se establece es
para mejorar y reforzar la gramtica de entendimiento de tipos de lenguajes sintcticos y sus
tipos de usos que se dan a conocer.

Bibliografa

Evander Flores. (Mar 06, 2015). Gramticas Libres del Contexto. marzo del 2012, de ninguno Sitio
web: http://documents.mx/documents/gramaticas-libres-de-contexto.html

Link de video: https://www.youtube.com/watch?v=qkJQpTzYPqs

Ma. Alejandra. (lunes, 14 de marzo de 2011). Arboles de derivacin . 14 de marzo, de 23:36 Sitio

Sitio web: http://teodelacomp.blogspot.mx/2011/03/forma-normal-de-chomsky.html

Link de video: https://www.youtube.com/watch?v=RguJJoFXqfw

http://10380054.galeon.com/u6.htm

http://teodelacomp.blogspot.mx/2011/03/37-eliminacion-de-la-ambiguedad.html

http://www-lt.ls.fi.upm.es/procesadores/Documentos/FirstFollow.pdf

http://slideplayer.es/slide/1479999/

18
Teora de Autmatas y lenguajes formales Federico Simmross Wattenberg
(fedesim@infor.uva.es) Universidad de Valladolid sitio web:
http://www.infor.uva.es/~mluisa/talf/docs/labo/L8.pdf

Glvez Rojas, S (2011), Traductores, Compiladores e Intrpretes OCW-universidad de Mlaga


Bajo licencia Creative Commons Attibution-Non-Comerciales-Sharealike sitio web
http://ocw.uma.es/ingenierias/traductores-compiladores-e-interpretes/material-de-clase-
1/Capitulo_3.pdf

19

Das könnte Ihnen auch gefallen