5. An´alisis sint´actico
Funci´on
Toma como entrada componentes l´exico resultantes del an´alisis l´exico y
compraba si es posible formar la gram´atica correspondiente.
Manejo de errores
• Modo p´anico: ignora componentes l´exicos hasta encontrar un sitio
seguro
• A nivel de frase: trata de completar alguna frase.
• De producci´on de errores: crea producciones para tratar de detectar
errores.
• De correcci´on global: busca errores, los corrige para hacer la menor
cantidad de correcciones.
Estructura de gram´aticas
• Ambig¨uedad
– Dos ´arboles sint´acticos.
Pascal elimina la ambig¨uedad con la gram´atica:
CONDICION → if (EXPRESI´ON) then begin SENTENCIAS end
| if (EXPRESI´ON) then begin SENTENCIAS end else begin
SENTENCIAS end if
Otros lenguajes:
CONDICION → if (EXPRESI´ON) then SENTENCIAS | end if
(EXPRESI´ON) then {SENTENCIAS} else {SENTENCIAS}
– Caso del IF-THEN-ELSE
• Recursividad por la izquierda
– A → AC | B
Es igual a:
A → BA’
A’ → CA’ | E
5
6. • Factorizaci´on
– A → BC | BD
Es igual a:
A → BA’
A’ → C D
CONDICION → if (EXP) then SENTENCIAS CONDICION’
CONDICION’ → (else SENTENCIAS) | E
Por ejemplo:
Suponiendo la siguiente gram´atica (Se elimina la recursividad por la izq.)
Ao → ABc | a | E
B → ab | abc
Si se desea armar el ´arbol sint´actico para “aabc”
Ao → aA’
A’ → BcA’ | E
B → ab | abc
Se factoriza B
B → abB’
B’ → c | E
An´alisis sint´actico descendente recursivo
Tomando el ejemplo del lenguaje espa˜nol:
1. Oraci´on → sujeto, predicado.
2. Sujeto → determinante, nombre.
3. Predicado → verbo complemento.
4. Nombre → ni˜no | hombre | anciano.
5. Verbo → duerme | r´ıe|
6. Complemento → pl´acidamente | intranquilo
6
8. Derivaci´on
Sucede cuando se hace una sustituci´on de un no terminal. Por ejemplo:
• a3c
• a5c
An´alisis sint´actico ascendente
Reglas del an´alisis sint´actico ascendente:
Los c´odigos de las acciones son:
• Di significa desplazar y meter en la pila.
• Rj significa reducir por la producci´on j
• Aceptar
• Error
Por ejemplo:
a: <S> → <B> <A> end
b: <A> → begin <C>
c: <C> → c´odigo
d: <B> → tipo
e: <B> → id <B>
Acciones de reducci´on:
- Ingresa estado 1
- Ingresa estado 5
- Ingresa estado 9
- Ingresa estado 7
- Ingresa estado 2
8
9. An´alisis sint´actico predictivo
An´alisis sint´actico descendente recursivo
• Conjunto de procedimientos recursivos.
• Cada no terminal de la gram´atica tiene asociado un procedimiento.
• El s´ımbolo de prean´alisis determina sin ambig¨uedad el procedimiento
seleccionado.
• Procedimiento adicional Parea
9
11. Primero Es el conjunto de componentes l´exicos terminales que pueden
estar al inicio de una sustituci´on de problemas. Por ejemplo:
• Suponga:
Tipoo → Simple | array [Simple ] of tipo
SImple → integer | char | num to num
Primero (tipo) = { integer, char, num, array }
Primero (simple) = { integer, char, num{
• Suponga: Ao → ABC | f | ε
B → g | ε
C → h | ε
Primero ( A ) = { f, g, h, ε }
Primero ( B ) = { g, ε }
Primero ( C ) = { h, ε }
• Suponga:
Ao → ABC | f | g | h
B → b | ε
C → c | ε
Primero ( A ) = { f, g, h }
Primero ( B ) = { b, ε }
Primero ( C ) = { c, ε }
• Suponga:
Ao → ABC | f | fAB | hBC
B → b | ε
C → c | ε
Primero ( A ) = { f, h }
Primero ( B ) = { b, ε }
• Suponga:
Ao → ABC | fAB | ε
Primero ( A ) = { f, b, c, ε }
11