undefined
undefined
ANÁLISIS SINTÁCTICO
Análisis sintáctico tipo arriba – abajo: se considera una gramática que se adapta bien a
esta clase de métodos. Es un proceso de Reducción, que construye el parser a partir de las hojas (símbolos de la cadena de entrada), y encuentra hacia arriba los
nodos, hasta llegar a la raíz. En cada
paso de la reducción, una subcadena de símbolos
- que coincide con el lado derecho de una producción- es remplazada con el no terminal del lado izquierdo de la producción. Encuentra la derivación más derecha
Ejemplo:
Análisis sintáctico predictivo:No necesita realizar retroceso para analizar bien las sentencias del lenguaje, Sólo con ver el siguiente carácter de la entrada puede decidir cuál va a ser la siguiente producción a emplear
Ejemplo: Id.*.Id.+.Id
Ejemplo Propuesto:
a+b*c-d*e
Cuándo usar las producciones: Las producciones del lado derecho necesitan un tratamiento especial. El analizador sintáctico descendente recursivo usara una producción € por defecto cuando no se pueda aplicar otra producción.
Por ejemplo considérese
Ejemplo:
if (preanalisis==)coincidir (expr);
Diseño de una analizador sintáctico predictivo: Es un programa que consiste en un procedimiento para cada no terminal. Cada procedimiento hace dos cosas:
Recursividad a la izquierda:es posible que un analizador sintáctico de descenso recursivo entre en un ciclo infinito. Se produce un problema con las producciones “recursividad por la izquierda”, como
Ejemplo:
Análisis sintáctico predictivo:No necesita realizar retroceso para analizar bien las sentencias del lenguaje, Sólo con ver el siguiente carácter de la entrada puede decidir cuál va a ser la siguiente producción a emplear
Condiciones:
- Diseñar bien la gramática
- Eliminar la recursividad izquierda
- Factorizar por la izquierda
No está
asegurado el tener una gramática predictiva, Las gramáticas son difíciles de leer, Para las
partes de las gramáticas que no son predictivas se pueden utilizar otros
analizadores
Ejemplo Propuesto:
a+b*c-d*e
Cuándo usar las producciones: Las producciones del lado derecho necesitan un tratamiento especial. El analizador sintáctico descendente recursivo usara una producción € por defecto cuando no se pueda aplicar otra producción.
Por ejemplo considérese
Prop -> begin props_opc end
Props_opc -> lista_props|€
Durante el análisis sintáctico de props_opc,
si el símbolo de pre análisis no esta en PRIMERO (lista_props), entonces se usa
la producción €. Esta elección es justo la correcta si el símbolo de preanalisis
es end. Cualquier símbolo de pre análisis diferente de end dará como resultado
un error, que se detectara durante el análisis sintáctico de prop.
Ejemplo:
if (preanalisis==)coincidir (expr);
Diseño de una analizador sintáctico predictivo: Es un programa que consiste en un procedimiento para cada no terminal. Cada procedimiento hace dos cosas:
- decide la producción que utilizara analizando el símbolo de pre análisis. Si el símbolo de pre análisis esta en PRIMERO 88), se usa la producción con lado derecho 8. Si hay un conflicto entre dos lados derechos de cualquier símbolo de pre análisis entonces en esa gramática no se puede emplear este método de análisis sintáctico. Si el símbolo de pre análisis no esta en el conjunto PRIMERO de ningún otro lado derecho, se usa una producción con € en el lado derecho.
- El procedimiento usa una producción imitando al lado derecho. Uno no terminal da como resultado una llamada al procedimiento del no terminal, y un componente léxico que coincida con el símbolo de pre análisis da como resultado que se lea el siguiente componente léxico. Si el componente léxico de la producción no coincide en algún punto con el símbolo de pre análisis, se declara un error.
Recursividad a la izquierda:es posible que un analizador sintáctico de descenso recursivo entre en un ciclo infinito. Se produce un problema con las producciones “recursividad por la izquierda”, como
Expr –> expr+term
En donde el símbolo +
a la izquierda del cuerpo es el mismo que el no terminal en el encabezado de la
producción. Suponga que el procedimiento para expr decide aplicar esta producción.
El cuerpo empieza con expr, de manera que el procedimiento para expr se llama
en forma recursiva. Cuando el símbolo de pre análisis cambia solo cuando coincide
un terminal en el cuerpo, no realizan cambios en la entrada entre las llamadas
recursivas expr. Como resultado la segunda llamada a expr hace exactamente lo
que hizo la primera llamada lo cual significa que se realiza una tercera
llamada a expr y así sucesivamente por
siempre.
0 comentarios:
Publicar un comentario