Organización de Lenguajes y Compiladores 1
description
Transcript of Organización de Lenguajes y Compiladores 1
![Page 1: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/1.jpg)
Organización de Lenguajes y Compiladores 1 Método de análisis sintáctico LL1
![Page 2: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/2.jpg)
Método Descendente LL(1)
La primera L representa el tipo de lectura de la cadena de entrada Left (de izquierda a derecha)
La segunda L representa la que la derivación Left, por la izquierda.
Y el 1, es el número de símbolos de entrada para analizar por anticipado.
![Page 3: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/3.jpg)
Método Descendente LL(1)
Ninguna gramática ambigua o recursiva por la izquierda puede ser LL(1).
![Page 4: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/4.jpg)
Método Descendente LL(1)
Buffer de EntradaCadena de entrada a analizar, finaliza con el carácter $
PilaSímbolos gramaticales que se van utilizando
Tabla de Análisis SintácticoMatriz bidimensional que sirve para el análisis
Cadena de SalidaCadena de Salida posterior al análisis
![Page 5: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/5.jpg)
LL(1)
![Page 6: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/6.jpg)
Pasos para el Método LL(1)
1. Escribir adecuadamente la gramática
2. Calcular el First y el Follow
3. Construir la tabla de Análisis Sintáctico
4. Hacer el análisis de sintáctico por medio de la pila y la tabla de análisis
![Page 7: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/7.jpg)
Pasos para el Método LL(1)
1. Escribir adecuadamente la gramática
Para poder utilizar un analizador descendente no recursivo la gramática debe cumplir con:
No debe tener ambigüedad No debe ser recursiva por la izquierda Debe estar factorizada
![Page 8: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/8.jpg)
Pasos para el Método LL(1)
Símbolo First/PrimeroSi x
es terminal First(X) = {x}
Si X → εproducción Añadir ε al First(X)
X →YZW Añadir First (Y) a First (X)
2. Calcular el First / Primero
![Page 9: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/9.jpg)
Símbolo Follow/SiguienteSi X
es símbolo inicial Follow ( X ) = { $ }
Si X → α Y MProducción
1. Follow (Y) = First (M) excepto ε.
2. Si el First(M) contiene ε entonces añadir el Follow(X) a Follow (Y)
Si X → α YProducción Añadir el Follow(X) a Follow(Y)
2. Calcular el Follow / Siguiente
Pasos para el Método LL(1)
![Page 10: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/10.jpg)
Pasos para el Método LL(1)
3. Construir la tabla de Análisis Sintáctico
Símbolos No TerminalesSímbolos No Terminales
Símbolo TerminalSímbolo Terminal
![Page 11: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/11.jpg)
Pasos para el Método LL(1)
3. Construir la tabla de Análisis Sintáctico1. Para cada A → α, ejecute 2 y 3.2. Para cada terminal a del First (α), añádase
A → α en la posición M[A , a].3. Si ε esta en el First (α), añádase A → ε a
M[A , b ] para cada terminal b de Follow(A).
4. Cada entrada vacía hágase ERROR.
![Page 12: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/12.jpg)
Pasos para el Método LL(1)
3. Construir la tabla de Análisis Sintáctico
Se colocan las produccionesque corresponden a los datosobtenidos del cálculo del first.
Se colocan las produccionesque corresponden a los datosobtenidos del cálculo del first.
![Page 13: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/13.jpg)
Pasos para el Método LL(1)
4. Hacer el análisis de sintáctico por medio de la pila y la tabla de análisis
13
Pila Entrada
. .
.
![Page 14: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/14.jpg)
Ejemplo LL(1)
Partiendo de la Gramática:
S → ‘(‘ A ‘)’
A → C B
B → ‘;’ A | ε
C → ‘x’ | S
1. Es una gramática adecuada para el análisis LL(1)
![Page 15: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/15.jpg)
Ejemplo LL(1)
2. Cálculo del First / PrimeroS → ‘(‘ A ‘)’
A → C B
B → ‘;’ A | ε
C → ‘x’ | S
SímboloNo Terminal First
S ( AB ;
C x
Para calcular el first Se usan Los no terminales del lado izquierdo de la producción
Si X es terminal First(X) = {x}
![Page 16: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/16.jpg)
Ejemplo LL(1)
2. Cálculo del First / PrimeroS → ‘(‘ A ‘)’
A → C B
B → ‘;’ A | ε
C → ‘x’ | S
SímboloNo Terminal First
S ( AB ; , ε
C x
Si X → εproducción Añadir ε al First(x)
Para calcular el first Se usan Los no terminales del lado izquierdo de la producción
![Page 17: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/17.jpg)
Ejemplo LL(1)
2. Cálculo del First / PrimeroS → ‘(‘ A ‘)’
A → C B
B → ‘;’ A | ε
C → ‘x’ | S
SímboloNo Terminal First
S ( A x , (B ; , ε
C x , (
X →YZW Añadir First (Y) a First (X)
Para calcular el first Se usan Los no terminales del lado izquierdo de la producción
![Page 18: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/18.jpg)
Ejemplo LL(1)
2. Cálculo del First / PrimeroS → ‘(‘ A ‘)’
A → C B
B → ‘;’ A | ε
C → ‘x’ | S
SímboloNo Terminal First
S ( A x , (B ; , ε
C x , (
![Page 19: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/19.jpg)
Ejemplo LL(1)
2. Cálculo del Follow / SiguienteS → ‘(‘ A ‘)’
A → C B
B → ‘;’ A | ε
C → ‘x’ | S
SímboloNo Terminal Follow
S $ABC
Si Xes símbolo
inicialFollow (X) = { $ }
Para cacular el follow Se usan Los no terminales del lado izquierdo de la producción
![Page 20: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/20.jpg)
Ejemplo LL(1)
2. Cálculo del Follow / SiguienteS → ‘(‘ A ‘)’
A → C B
B → ‘;’ A | ε
C → ‘x’ | S
SímboloNo Terminal Follow
S $A )BC
Para cacular el follow Se usan Los no terminales del lado izquierdo de la producción
![Page 21: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/21.jpg)
Ejemplo LL(1)
2. Cálculo del Follow / SiguienteS → ‘(‘ A ‘)’
A → C B
B → ‘;’ A | ε
C → ‘x’ | S
SímboloNo Terminal Follow
S $A )B )
C
Si X → α YProducción
Añadir el Follow(X) a Follow(Y)
Para cacular el follow Se usan Los no terminales del lado izquierdo de la producción
![Page 22: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/22.jpg)
Ejemplo LL(1)
2. Cálculo del Follow / Siguiente
S → ‘(‘ A ‘)’
A → C B
B → ‘;’ A | ε
C → ‘x’ | S
SímboloNo Terminal Follow
S $A )B )
C ; , )
Se usan Los no terminales del lado derecho de la producción
Si X → α Y MProducción
1.Follow (Y) = First (M) excepto ε.
2. Si el First(M) contiene εentonces añadir elFollow(X) a Follow (Y)
First(B) ; , ε
![Page 23: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/23.jpg)
2. Para cada terminal a del First (α), añádase A → α en la posición M[A , a].
Ejemplo LL(1) Construir la tabla de Análisis Sintáctico
SímboloNo Terminal First
S ( A x , (B ; , εC x , (
; x ( ) $S S ( A )
A A CB A CB
B B ; A
C C x C S
S → ‘(‘ A ‘)’
A → C B
B → ‘;’ A | ε
C → ‘x’ | S
![Page 24: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/24.jpg)
3. Si ε esta en el First (α), añádase A → ε a M[A , b ] para cada terminal b de Follow(A).
Ejemplo LL(1) Construir la tabla de Análisis Sintáctico
SímboloNo Terminal First
B ; , ε
; x ( ) $S S ( A )
A A CB A CB
B B ; A B ε
C C x C S
S → ‘(‘ A ‘)’
A → C B
B → ‘;’ A | ε
C → ‘x’ | S
SímboloNo Terminal Follow
B )
![Page 25: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/25.jpg)
4. Cada entrada vacía hágase ERROR
Ejemplo LL(1) Construir la tabla de Análisis Sintáctico
; x ( ) $S ERROR ERROR S ( A ) ERROR ERROR
A ERROR A CB A CB ERROR ERROR
B B ; A ERROR ERROR B ε ERROR
C ERROR C x C S ERROR ERROR
![Page 26: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/26.jpg)
3. Construir la tabla de Análisis Sintáctico
Ejemplo LL(1)
; x ( ) $S ERROR ERROR S ( A ) ERROR ERROR
A ERROR A CB A CB ERROR ERROR
B B ; A ERROR ERROR B ε ERROR
C ERROR C x C S ERROR ERROR
![Page 27: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/27.jpg)
Pasos para el Método LL(1)
4. Hacer el análisis de sintáctico por medio de la pila y la tabla de análisis
Pila Entrada$ S ( x ; ( x ) ) $
( x ; ( x ) )
Colocar $ y el símbolo inicialColocar $ y el símbolo inicial
Colocar la cadena de entrada y $Colocar la cadena de entrada y $
![Page 28: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/28.jpg)
Pasos para el Método LL(1)
4. Hacer el análisis de sintáctico por medio de la pila y la tabla de análisis
Pila Entrada Acción
$ S ( x ; ( x ) ) $ S ( A )
Se busca el símbolo terminal y el no terminal, remplazándolo por la producción que le corresponda en la tabla.Colocándola de izquierda a derecha
Se busca el símbolo terminal y el no terminal, remplazándolo por la producción que le corresponda en la tabla.Colocándola de izquierda a derecha
(S S → ( A )
![Page 29: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/29.jpg)
Pasos para el Método LL(1)
4. Hacer el análisis de sintáctico por medio de la pila y la tabla de análisis
Pila Entrada Acción
$ S$ ) A (
( x ; ( x ) ) $( x ; ( x ) ) $
S ( A )
Cuando se llega a una coincidencia, se eliminan ambos, y se continua con el análisisCuando se llega a una coincidencia, se eliminan ambos, y se continua con el análisis
![Page 30: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/30.jpg)
Pasos para el Método LL(1)
4. Hacer el análisis de sintáctico por medio de la pila y la tabla de análisis
Pila Entrada Acción
$ S$ ) A (
( x ; ( x ) ) $( x ; ( x ) ) $
S ( A )
Cuando se llega a una coincidencia, se eliminan ambos, y se continua con el análisisCuando se llega a una coincidencia, se eliminan ambos, y se continua con el análisis
![Page 31: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/31.jpg)
Pila Entrada Acción
$ S$ ) A $ ) B C$ ) B x$ ) B$ ) A ;$ ) A$ ) B C $ ) B S$ ) B ) A ($ ) B ) A$ ) B ) B C $ ) B ) B x$ ) B ) B$ ) B )$ ) B $ )$
( x ; ( x ) ) $ x ; ( x ) ) $x ; ( x ) ) $x ; ( x ) ) $
; ( x ) ) $; ( x ) ) $
( x ) ) $( x ) ) $( x ) ) $( x ) ) $
x ) ) $x ) ) $x ) ) $
) ) $) ) $
) $) $
$
S ( A )A C B
C x
B ; A
A C BC S
S ( A )
A C BC x
B ε
B ε
![Page 32: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/32.jpg)
Pila Entrada Acción
$ S$ ) A $ ) B C$ ) B x$ ) B$ ) A ;$ ) A$ ) B C $ ) B S$ ) B ) A ($ ) B ) A$ ) B ) B C $ ) B ) B x$ ) B ) B$ ) B )$ ) B $ )
$
( x ; ( x ) ) $ x ; ( x ) ) $x ; ( x ) ) $x ; ( x ) ) $
; ( x ) ) $; ( x ) ) $
( x ) ) $( x ) ) $( x ) ) $( x ) ) $
x ) ) $x ) ) $x ) ) $
) ) $) ) $
) $) $
$
S ( A )A C B
C x
B ; A
A C BC S
S ( A )
A C BC x
B ε
B ε
ACEPTADA
Se acepta la cadena si se logra eliminar de la pila y la entrada, todos los símbolos.De lo contrariono se acepta la cadena.
Se acepta la cadena si se logra eliminar de la pila y la entrada, todos los símbolos.De lo contrariono se acepta la cadena.
![Page 33: Organización de Lenguajes y Compiladores 1](https://reader036.fdocuments.mx/reader036/viewer/2022062322/568143ae550346895db03707/html5/thumbnails/33.jpg)
RESUMEN
Pasos para el método LL1
1. Escribir adecuadamente la gramática
2. Calcular el First y el Follow
3. Construir la tabla de Análisis Sintáctico
4. Hacer el análisis de sintáctico por medio de la pila y la tabla de análisis