Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Análisis Sintáctico

Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 18

ANÁLISIS SINTÁCTICO

Un analizador sintáctico o parser (viene del inglés parse, analiza una cadena o texto en
componentes sintácticos lógicos).

La tarea del analizador es, en este caso, la descomposición y transformación de las entradas en un
formato utilizable para su posterior procesamiento.
¿Cómo Funciona?
Para analizar un texto, los analizadores
suelen utilizar un analizador léxico
separado (llamado lexer), que
descompone los datos de entrada en
fichas (símbolos de entrada como
palabras). Los Lexers son por lo
general máquinas de finitas, que
siguen la gramática regular y por lo
tanto aseguran un desglose adecuado.
El analizador actual maneja la gramática de los datos de entrada, realiza un análisis sintáctico de
éstos y como regla general crea un árbol de sintaxis (árbol de análisis).

Los tokens obtenidos de esta manera sirven como caracteres de entrada para el analizador
sintáctico.
Tipos de Analizadores para
Gramática
• Universales
• Descendentes
• Ascendentes
Representación de Gramáticas
Construcciones que empiezan con palabras clave
como while o int .
Las palabras clave son guías de la elección de
la producción gramatical que debe aplicarse
para hacer que coincida con la entrada.
Por lo tanto, se concentran en expresiones, que
representan un reto debido a la asociatividad y
la precedencia de operadores.
Ejemplo:

La gramática para expresiones (4.1) pertenece a


la clase de gramáticas LR que son adecuadas
para el análisis sintáctico ascendentes.

Esta gramática puede adaptarse para manejar


operadores adicionales y niveles adicionales de
precedencia. Sin embargo, no puede usarse para
el análisis sintáctico descendente, ya que es
recursiva por la izquierda.
En la siguiente variante no recursiva por la
izquierda de la gramática de expresiones (4.1) se
utilizará para el análisis sintáctico descendente:
La siguiente gramática trata a los
signos + y * de igual forma, de manera
que sirve para ilustrar las técnicas
para el manejo de ambigüedades
durante el análisis sintáctico:

E→ E + E | E * E | ( E ) | id (4.3)

Aquí, E representa a las expresiones de


todo tipo. La gramática (4.3) permite
más de un árbol de análisis sintáctico
para las expresiones como a + b * c.
Manejo de Errores
Sintácticos
Puede simplificar la estructura de un
compilador y mejorar su capacidad
para manejar los errores.

Los errores de programación comunes


pueden ocurrir en muchos niveles
distintos.
• Los errores léxicos: Incluyen la escritura
incorrecta de los identificadores, las palabras
clave o los operadores.

• Los errores sintácticos incluyen la colocación


incorrecta de los signos de punto y coma,
además de llaves adicionales o faltantes; es
decir, “{” o “}”.
• Los errores semánticos incluyen los
conflictos de tipos entre los
operadores y los operandos.

• Los errores lógicos pueden ser


cualquier cosa, desde un
razonamiento incorrecto del
programador en el uso (en un
programa en C) del operador de
asignación =, en vez del operador de
comparación ==.
El mango de errores en un analizador
sintáctico tiene objetivos que son
simples de declarar, pero difíciles de
llevar a cabo las cuales son:

• Reportar la presencia de errores con


claridad y precisión.
• Recuperarse de cada error lo
bastante rápido como para poder
detectar los errores siguientes.
• Agregar una sobrecarga mínima al
procesamiento de los programas
correctos.
Recuperación a Nivel de
Frase
Al descubrir un error, un analizador
sintáctico puede realizar una
corrección local sobre la entrada
restante; es decir, puede sustituir un
prefijo de la entrada restante por
alguna cadena que le permita
continuar.
Producción de errores
Un analizador sintáctico construido a partir
de una gramática aumentada por estas
producciones de errores detecta los errores
anticipados cuando se utiliza una
producción de error durante el análisis
sintáctico.
Así, el analizador sintáctico puede generar
diagnósticos de error apropiados sobre la
construcción errónea que se haya
reconocido en la entrada.
Corrección Global
Hay algoritmos para elegir una secuencia
mínima de cambios, para obtener una
corrección con el menor costo a nivel global.
Dada una cadena de entrada incorrecta x y
una gramática G, estos algoritmos buscarán un
árbol de análisis sintáctico para una cadena y
relacionada, de tal forma que el número de
inserciones, eliminaciones y modificaciones de
los tokens requeridos para transformar a x en y
sea lo más pequeño posible.
GRACIAS POR
SU ATENCIÓN

También podría gustarte