Está en la página 1de 11

1.

Análisis sintáctico ascendente

El análisis sintáctico ascendente es una técnica fundamental en el campo de la


lingüística computacional y la compilación de lenguajes. Su enfoque se basa en
construir el árbol sintáctico de una sentencia comenzando desde los constituyentes
más pequeños (como las palabras individuales) y avanzando hacia estructuras más
grandes y complejas. A medida que se procesa una cadena de entrada, el analizador
busca combinar tokens en una estructura gramatical válida siguiendo reglas
predefinidas de la gramática del lenguaje.
En comparación con otros enfoques, como el análisis sintáctico descendente y el
análisis LL(k), el análisis sintáctico ascendente tiene fortalezas y limitaciones únicas.
Por ejemplo, el análisis sintáctico ascendente es capaz de manejar gramáticas
ambiguas y recursivas

Ejercicio 1.

teniendo la gramática G=({E}, {n, +}, P, E) con las siguientes reglas de producción:

E →T ∨E +T
T →n

y la cadena de entrada n+n+n. el desarrollo del proceso de análisis sintáctico


ascendente sería el siguiente:

E E

E E E E E +T E +T

T T T T T T T n T n

n n n n+ n+n n+n n n +
E
E E E + T

E +T E +T E +T n

T n T T
n T n
n +n n +n n

En general en un momento dado del análisis sintáctico para la cadena α = a1……an,


ya se construyeron j subárboles del árbol de derivaci6n. Es decir, se tiene una pila de j
árboles:
Hay tres acciones posibles:

 Caso 1: si existe un k tal que los k símbolos X j−k+1 … X j en el tope de la


pila corresponden al lado derecho de una producción A → X j −k+1 … X j , se
aplica un paso reducción, creando un nuevo nodo A con dichos k árboles
como hijos.

 Caso 2: si todavía hay símbolos de la entrada para consumir, se aplica un


paso desplazamiento, incorporando el siguiente símbolo de la entrada a j+1
a la pila.

 Caso 3: en caso contrario, no hay símbolos para consumir y no es posible


reducir la cadena en la pila. Si queda un único árbol de derivación con raíz
E, es decir, X1...Xj = E, la cadena se acepta. De Ío contrario, se rechaza.

1.1. Reducciones

las reducciones se refieren al proceso de combinar constituyentes más


pequeños en constituyentes más grandes durante la construcción del árbol
sintáctico. A medida que se encuentran combinaciones válidas, las partes
de la cadena de entrada se reducen a una representación sintáctica más
abstracta. Este proceso continúa hasta que se construye el árbol sintáctico
completo, representando así la estructura gramatical de la sentencia.

Ejercicio 2

Del ejemplo anterior tenemos la siguiente secuencia de cadenas:

n + n + n, T + n + n, E + n + n, E + T + n, E + n, E + T, E

Por lo tanto, al hacer la reducción que no es nada más que la inversa de


un paso de derivación, daría como resultado lo siguiente:

E → E +T → E +n → E+ T +n → E+n+n → T + n+n →n+ n+n


1.2. Poda de mangos

La poda de mangos (también conocida como "bottom-up pruning") es una


técnica utilizada en el análisis sintáctico ascendente para optimizar el
proceso de construcción del árbol sintáctico. Consiste en eliminar las
combinaciones de constituyentes que no pueden contribuir a la formación
de una estructura gramatical válida. Esto mejora la eficiencia del análisis al
reducir el número de posibles combinaciones que deben considerarse, lo
que a su vez acelera el proceso de análisis sintáctico.

La poda de mangos opera en función de la idea de que, si una


combinación temporal no puede contribuir a una estructura gramatical
válida, no tiene sentido continuar evaluándola. Por lo tanto, cuando se
encuentra una combinación que no puede llevar a una producción válida,
se elimina de la consideración y no se continúa analizando más a partir de
ese punto.

Ventajas:

 Eficiencia: Al descartar combinaciones temporales que no son


relevantes para la construcción del árbol sintáctico, la poda de
mangos reduce drásticamente la cantidad de cálculos necesarios,
lo que acelera el análisis y ahorra recursos computacionales.

 Ahorro de memoria: Al reducir la cantidad de combinaciones


temporales almacenadas en memoria, la poda de mangos puede
ayudar a conservar los recursos de memoria durante el análisis
sintáctico.

 Mejor manejo de ambigüedades: En gramáticas ambiguas, la poda


de mangos puede ser especialmente beneficiosa, ya que evita
generar y analizar combinaciones temporales irrelevantes que
podrían llevar a ambigüedades.

Forma Derecha Mango Reducción de la Producción

n1 + n2 + n3 n1 T →n

T + n2 + n3 T E →T

E + n2 + n3 n2 T →n
E + T + n3 E+T E → E +T
E + n3 n3 T →n
E+T E+T E → E +T
1.3. Análisis sintáctico de desplazamiento-reducción

El análisis sintáctico de desplazamiento-reducción es una variante del


análisis sintáctico ascendente que combina elementos del análisis
sintáctico ascendente y el análisis sintáctico descendente. En este
enfoque, se intenta desplazar hacia la derecha la cadena de entrada
mientras se aplican reducciones en sentido ascendente. Esto permite
manejar construcciones complejas que podrían ser difíciles de analizar
únicamente con un enfoque ascendente o descendente.

Ejercicio 3.

Dada la gramática G = ({E, T, F}, {+, *, n}, P, E):

E →T ∨E +TT → F∨T∗FF → n

para analizar la cadena n * n + n.

Pila Entrada Acción

$ n*n+n Desplazamiento

n *n+n Reducción

F *n+n Reducción

T *n+n Desplazamiento

T* n+n Desplazamiento

T*n +n Reducción

T*F +n Reducción

T +n Reducción

E +n Desplazamiento

E+ n Desplazamiento

E+n $ Reducción

E+F $ Reducción

E+T $ Reducción

E $ Aceptar
1.4. Conflictos durante el análisis sintáctico de desplazamiento-reducción
Durante el análisis sintáctico de desplazamiento-reducción, pueden surgir
conflictos en el proceso de decisión sobre cuándo aplicar desplazamientos
y reducciones. Estos conflictos se producen cuando existen múltiples
posibilidades de desplazamiento o reducción en un punto dado del análisis.
Resolver estos conflictos de manera eficiente y precisa es un desafío clave
en el diseño y la implementación de analizadores sintácticos de
desplazamiento-reducción.

 Las acciones “reducción” por distintas producciones no son


mutuamente excluyentes a priori.

Por ejemplo:
la cadena aa con la gramática (no ambigua)

G 1=({S , A , B }, {a ,b }, P , S):

S → Aa∨Bb A → aB→ a

Pila Entrada Acción

$ aa Desplazamiento

a a

conflicto

En el ejemplo vemos cómo surge un conflicto al no saber que


reducción tendría que elegir una y si al final se equivoca podría
rechazar una cadena que no debería.

 Las acciones “Desplazamiento” y “reducción” no son mutuamente


excluyentes a priori.

Por ejemplo, la cadena aab con la


gramática (no ambigua)

G 2=( { S , A } , { a , b } , P , S ) :S → aAb∨ Ab A → a

Pila Entrada Acción


$ aab Desplazamiento

a ab

conflicto

El conflicto surge a raíz de que no se sabría qué acción tomar, si se


debería hacer una reducción o un desplazamiento.

Ejercicio 4.

teniendo la gramática G= ({E, T, F}, {id, +, *, (, )}, P, E) con las siguientes reglas de
producción:

E →T ∨E +T
T → F∨T∗F F → id∨(E)

y la cadena de entrada: id + (id * id).

Desarrollo:

E E E E

T T T T T T

F F F F F F F

id id id id id id + id + ( id + ( id
E E +( E +( E+(

T T T T T T T * F

F F F F F F F F id

id + ( id id id * id id * id id id

E +( T E +( T E +( T )

T T * F T T * F T T * F

F F id F F id F F id

id id id id ) id id
Secuencia de cadenas:

E + ( E ) E + F E + T
id+(id*id), F+(id*id), T+(id*id), E+(id*id), E+(F*id), E+(T*id), E+(T*F), E+(T), E+(E),
E+F, E+T, E F

Reducción:
T ( E ) F
E → E +T → E + F → E + ( E ) → E+ ( T ) → E+ ( T∗F ) → E+ ( T∗id )
T ( E )
→ E+(F∗id ) → E+(id∗id)→ T +(id∗id )→ F +(id∗id) →id +(id∗id)
T T * F
T
T T * F
Análisis sintáctico de desplazamiento-reducción:

F F id
Pila Entrada T TAcción
* F
$
F F Id + (idid* id) Desplazamiento
id id
id + (id * id) Reducción
F F id
F id id + (id * id) Reducción

T + (id * id) Reducción


id
E + (id * id) id
Desplazamiento

E E+ (id * id) Desplazamiento

E+( id * id) Desplazamiento

E + T E + ( id * id) Reducción

E+(F * id) Reducción

F E+(T * id) Desplazamiento

E+(T* id) Desplazamiento


( E E +) ( T * id ) Reducción

T E+(T*F ) Reducción

E+(E ) Desplazamiento

T T * FE + ( E ) $ Reducción

E+F $ Reducción

F F id

id id
E+T $ Reducción

E $ Aceptar
Bibliografía

Aho, A. V., Lam, M. S., Sethi, R., & Ullman, J. D. (2006). Compilers: Principles,
Techniques, and Tools. Pearson.
Grune, D., Ceriel J. H. Jacobs, & Langendoen, K. G. (2000). Parsing Techniques: A
Practical Guide. Springer.
Cocke, J., & Schwartz, J. T. (1970). Programming languages and their compilers:
Preliminary notes. Courant Institute of Mathematical Sciences, New York University.
Universidad de Guanajuato. (2022, July 16). Clase digital 11. Análisis sintáctico:
Análisis ascendente LR - Recursos Educativos Abiertos. Recursos Educativos
Abiertos. Recuperado de https://blogs.ugto.mx/rea/clase-digital-11-analisis-sintactico-
analisis-ascendente-lr/

También podría gustarte