Está en la página 1de 5

Análisis Sintáctico

- Construcción de la Tabla de Análisis Sintáctico --

Desarrollo de Ejercicio

Sea la Gramática

(1) EE+T|T
(2) TT*F|F
(3) F (E) | id

1. Eliminar recursión por la izquierda

Si A  Aα1 | Aα2 | … | Aαm | β1 | β2 | … | βn


Ent A  β1 A' | β2 A' | … | βn A'
A'  α1 A' | α2 A' | … | αmA' | Є

Gramática con recursión por la izquierda:

(1) EE+T|T
AAα |β donde: A = E α = +T β=T

Luego E  T E'
E'  + T E' | Є

(2) TT*F|F donde: A = T α=*F β=F


AAα |β

Luego T  F T'
T'  * F T' | Є

La gramática sin recursión por la izquierda es:

E  T E'
E'  + T E' | Є
T  F T'
T'  * F T' | Є
F (E) | id
2. Eliminar la ambigüedad. La presente gramática no presenta ambigüedad. No aplica el
procedimiento.

3. Construir conjuntos primero.

Forma 1: Visualmente, usando el Árbol de la Gramática (Árbol AND/OR)

T E'

F T' + T E' Є

( E ) id * F T' Є

Forma 2. Usando las reglas de Aho.

Prim(E) = Prim(TE´)
Prim(TE') = { Prim(T), Prim(E') }
Prim(T) = Prim(FT´) = { Prim(F), Prim(T') }
Prim(F) = Prim((E)) U Prim(id)
Prim((E)) = {Prim((), Prim(E), Prim())}
Prim(() = { ( }
Prim((E)) = { ( }
Prim(id) = { id }
Prim(F) = { (, id }
Prim(FT´) = { (, id }
Prim(T) = { (, id }
Prim(TE´) = { (, id }
Prim(E) = { (, id }

Prim(E) = Prim(T) = Prim(F) = { (, id }

Prim(E') = Prim(+TE´} U Prim(Є)


Prim(+TE') = { Prim(+), Prim(T), Prim(E') }
Prim(+) = { + }
Prim(+TE') = { +}
Prim(Є) = { Є }
Prim(E') = { +, Є }

Prim(T') = Prim(*FT') U Prim(Є)


Prim(*FT') = { Prim(*), Prim(F), Prim(T') }
Prim(*) = { * }
Prim(*FT') = { * }
Prim(Є) = { Є }
Prim(T') = { *, Є }

Luego, los conjuntos primero de la gramática son:

Prim(E) = Prim(T) = Prim(F) = { (, id }


Prim(E') = { +, Є }
Prim(T') = { *, Є }

Forma 3. Usando el algoritmo de Louden.

4. Construir conjuntos Siguiente.

Forma 1. Usando las reglas de Aho.

Condiciones iniciales por Regla1: Sig(E) = { $ } Porque E es el símbolo inicial de


la gramática.

(I) Para las gramáticas de la forma A  αBβ (gramáticas con 3 elementos)

(I.1) Para E'  + T E' | Є que se reduce a E'  + T E' porque Sig() no se
define para tokens, y Є es como si lo fuera.

E'  + T E'
A α B β donde A = E' 𝛼=+ B=T β = E'

Regla2: Prim(β) - Є se añade a Sig(B) : Prim(E') - Є se añade a Sig(B)


{ +, Є } - Є = { + } se añade a Sig(T) = { + }

Regla3: Prim(β) contiene Є : Prim(E') = { +, Є }


Sig(A) se añade a Sig(B) : Sig(E) se añade a Sig(T) ok

(I.2) Para T'  * F T' | Є que se reduce a T'  * F T' porque Sig() no se
define para tokens, y Є es como si lo fuera.
T'  * F T'
A α B β donde A = T' 𝛼=* B=F β = T'

Regla2: Prim(β) - Є se añade a Sig(B) : Prim(T') - Є se añade a Sig(F)


{ *, Є } - Є = { * } se añade a Sig(F) = { * }

Regla3: Prim(β) contiene Є : Prim(T') = { *, Є }


Sig(A) se añade a Sig(B) : Sig(T') se añade a Sig(F) ok X

(I.3) Para F (E) | id que se reduce a F (E) porque Sig() no se


define para tokens y, id lo es.

F( E )
A α B β donde A = F 𝛼=( B=E β=)

Regla2: Prim(β) - Є se añade a Sig(B) : Prim()) - Є se añade a Sig(E)


{ ) } - Є = { ) } se añade a Sig(E) = { $, ) }

Regla3: Prim(β) no contiene Є. Luego no aplica.

(II) Para las gramáticas de la forma A  αB (gramáticas con 2 elementos)

(II.1) Para E  T E'


A α B donde A = E 𝛼=T B = E'

Regla3: Sig(A) se añade a Sig(B) : Sig(E) se añade a Sig(E') ok

(II.2) Para T  F T'


A α B donde A = T 𝛼=F B = T'

Regla3: Sig(A) se añade a Sig(B) : Sig(T) se añade a Sig(T') ok

Traza de conjuntos siguiente:

Sig(E) = { $ } (Ci) { ), $ } (I.3.2)

Sig(T) = { + } (I.1.2) { +, ), $ } (I.1.3)

Sig(T') = { +, ), $ } (II.2.3)

Sig(F) = { * } (I.2.2) { *, +, ), $ } (I.2.3)

Sig(E') = { ), $ } (II.1.3)
Luego, los conjuntos siguiente de la gramática son:

Sig(E) = Sig(E') = { ), $ }
Sig(T) = Sig(T') = { +, ), $ }
Sig(F) = { *, +, ), $ }

5. Construir tabla de análisis sintáctico

E  T E'
E'  + T E' | Є
T  F T'
T'  * F T' | Є
F (E) | id

Prim(E) = Prim(T) = Prim(F) = { (, id }


Prim(E') = { +, Є }
Prim(T') = { *, Є }

Sig(E) = Sig(E') = { ), $ }
Sig(T) = Sig(T') = { +, ), $ }
Sig(F) = { *, +, ), $ }

Usando las reglas de Aho.

Para E  T E' Prim(E) = { (, id }


Añadir E  TE' a M [ E, ( ]

a M [ E, id ]

Para E'  + T E' | Є


E'  + T E' Prim(E') = { + }

Añadir E'  +TE' a M [E', + ]

E'  Є Prim(E') = { Є }

Añadir E'  Є a M [ E', $ ]

….. sigue …

------------ Fin del documento

También podría gustarte