Documente Academic
Documente Profesional
Documente Cultură
Introduccin
El analizador sintctico tiene como objetivo encontrar las estructuras presentes en su entrada. Estas estructuras se pueden representar mediante el rbol de anlisis sintctico, que explica cmo se puede derivar la cadena de entrada en la gramtica que especifica el lenguaje. Aunque en la prctica es habitual que el rbol de anlisis no llegue a construirse, se trata de una abstraccin que nos permite entender mejor todo el proceso.
Anlisis Sintctico
Definicin: El Analizador Sintctico o parser recibe los tokens y comprueba su ordenacin correcta. Genera un rbol sintctico.
Programa Fuente Siguiente Token()
Analizador Lexicogrfico
TOKENS
Analizador Sintctico
rbol Sintctico
Tabla de Simbolos
Tiene como objetivo analizar la secuencia de tokens y comprobar que son correctas sintcticamente. A partir de una secuencia de tokens el analizador sintctico nos devuelve si la secuencia es correcta o no sintcticamente, tambin nos devuelve el orden en el que hay que aplicar las producciones de la gramtica para obtener la secuencia de entrada (rbol sintctico).
3
Anlisis Sintctico
Funcin:
Comprobar el orden en el que llegan los tokens. Construir una representacin del programa fuente. Si es sintcticamente incorrecto generara error Criterios de diseo del Analizador Sintctico: Eficiencia: El tiempo de anlisis debe ser proporcional al tamao del programa analizado Predictivo: Al detectar algn error debe determinar que quiso decir. Sin Retroceso: Al ejecutar una tarea no vuelve para atrs.
Descripcin Funcional
El analizador sintctico o parser verifica que la secuencia de tokens que recibe del scanner, estn debidamente combinados de tal manera que pueda ser generada con la gramtica libre de contexto que representa las reglas sintcticas del lenguaje.
07/10/2013
Descripcin Funcional
Se construye el rbol de anlisis sintctico partiendo de la frase a reconocer y aplicando las producciones mediante reducciones hasta llegar a smbolo inicial de la gramtica.
Analizador Ascendente:
Ejemplo: G=({+,*, ID, (, )}, {E, T, P}, E, P) P={ E:=E+T | T; T:=T*P | P; P:= ID | ( E ) } Frase ID + ( ID * ID )
Ejemplo: G=({+,*, ID, (, )}, {E, T, P}, E, P) P={ E:=E+T | T; T:=T*P | P; P:= ID | ( E ) } Frase ID + ( ID * ID )
8
Descendentes
Se aplican las producciones por izquierda El orden de lectura de la entrada es de izquierda a derecha S L R (1)
Tipos de Analizadores
Es Predictivo Se aplican las producciones por derecha El orden de lectura de la entrada es de izquierda a derecha Simple L R (1) Es Predictivo
Ascendentes
Se aplican las producciones por derecha El orden de lectura de la entrada es de izquierda a derecha LA L R (1) Es Predictivo Se aplican las producciones por derecha El orden de lectura de la entrada es de izquierda a derecha Look a Head: Al construir el analizador va a tratar de mirar por adelantado el texto para 9 comprenderlo y hacer mas sencillo y mejores estados
Recordatorio de Trminos
Gramtica: Conjunto de reglas que determinan un un lenguaje. Sintxis.: Verifica que la secuencia de tokens sea vlida para un lenguaje. Tipos de gramtica. 1. Irrestricta. x y en donde x tiene por lo menos un elemento no terminal. 2. Contexto sensitivo o sensitiva al contexto. x y x <= y (en cuanto al nmero de elementos de y) y > 0 (no permite producciones con el elemento vacio) 3. Libre de contexto. x y x = 1 y es un elemento no terminal. y >= 0 Tipos de gramtica libre de contexto. Lineal izquierdo; Lineal derecho; Recursiva izquierdo ; Recursiva derecho y Recursiva central
Recordatorio de Trminos
Lineal izquierdo.: Es la derivacin en donde tan solo el no terminal de ms a la izquierda de cualquier forma de frase se sustituye a cada paso.
<S> <Y> x <Y> <Z> y <Z> <W> z <Z> <W> w
<S> <Y> <Z> <W> w z y x
Lineal derecha.: Es la derivacin en donde tan solo el no terminal de ms a la derecha de cualquier forma de frase se sustituye a cada paso.
<S> x <Y> <Y> y <Z> <Z> z <W> <Z> <W> w
wzyx
xyzw
Recordatorio de Trminos
Recursiva izquierda: Es la derivacin en donde tan solo el no terminal de ms a la izquierda se sustituye a cada paso recursivamente es decir a si misma. <S> <S> <S> a | <S> d <S> a <S> <S> b a <S> <S> c <S> b <S> <S>
c
cbaa Recursivo derecho.: Es la derivacin en donde tan solo el no terminal de ms a la derecha se sustituye a cada paso recursivamente es decir a si misma. <X> <S> <X> <S> a <S> | d <S> <S> <S> b <S> a <S> <X> c
a
<S>
<S> c
aabc
Recordatorio de Trminos
Recursiva central.: Es la derivacin en donde tan solo el no terminal del centro se sustituye a cada paso recursivamente es decir a si misma. <X> <S> <X> <S> a b <S> <S> a <S> b c d <S> <S> c <S> d e <S> e acedb Ejemplos: Libre de contexto. <S> if <X> then <Y> <X> a <op> b <op> > | < <Y> x <opA> y <opA> =
x y
Recordatorio de Smbolos
Contexto sensitivo. <S> <X> <Y> xy <X> a <Z> y no permite vacio a<Z> b <W> <Y> d <W> c Irrestricta. <X> <A> <B> <A> a <B> b Sin restricciones.
Recordatorio de Trminos
Derivacin.: Consiste en sustituir los elementos no terminales por sus producciones. Ejemplo: <S> IF <X> then <Y> Se sustituye de izquierda a derecha <S> IF a <OP> b then <Y> <S> IF a<b then <Y> <S> IF a<b then x <OPA> y <S> IF a<b then x=y El resultado es solo con terminales Componentes de la gramtica. G={P, S, V, V} o bien G={P, S, T, N} En donde: P=producciones. S=produccin inicial; V=los elementos terminales V=los elementos no terminales
07/10/2013
17
Como se logro generar dicha cadena se dice que si cumple con las reglas sintcticas del lenguaje (gramtica).
07/10/2013
19
Derivacin ms a la izquierda
07/10/2013 22
Gramticas Ambiguas
Una gramtica es ambigua si genera ms de un rbol sintctico para alguna cadena. Equivalente, existe ms de una derivacin por la derecha o por la izquierda de alguna cadena La ambigedad es mala Deja el significado de algunos programas indefinidos. No existe una metodologa para eliminarla la ambigedad y tampoco hay otra frmula para saber que una gramtica es ambigua. Las gramticas ambiguas se redisean para encontrar una gramtica no ambigua equivalente.
07/10/2013 24
Gramticas Ambiguas
Ejemplo: La gramtica G = ({E}, {id, num, +, *, (, )}, E, { EE+E | E*E | (E) | id | num}) es ambigua. La cadena num+num*num tiene dos rboles de derivacin.
07/10/2013
25
Gramticas Ambiguas
Caractersticas de las gramticas ambiguas
Gramticas con ciclos simples o menos simples SA|a AS Alguna regla con una forma EEE Un conjunto de reglas de forma parecida a: SA|B AB
Gramticas Ambiguas
Producciones recursivas en las que los no terminales no recursivos de la produccin puedan derivar a la cadena vaca: S HRS | s Hh| Rr| No terminales que puedan derivar a la cadena vaca y a la misma cadena de terminales, y que aparezcan juntas en el consecuente de una regla o en alguna forma sentencial: S HR Hh| Rr|h|
Gramticas Ambiguas
Ejemplo: Sea G = ({S, A}, {a}, S, P) donde: P = {SAA, AaSa, Aa} estudiar si es ambigua En algunos casos, la ambigedad de una gramtica se puede eliminar utilizando: Recursividad Asociatividad Precedencia Parentizacin
07/10/2013 28
07/10/2013
29
07/10/2013
30
Asociatividad
Precedencia
Mtodos no-direccionales: acceden a cualquier lugar de la cadena de entrada para construir el rbol. Necesitan tener toda la cadena de componentes lxicos en memoria. Mas costosos, no se suelen implementar.
07/10/2013
38
07/10/2013
40