Anda di halaman 1dari 17

ANALIZADOR SINTÁCTICO

Autómatas & Compiladores


¿Qué es un Analizador?

• Un analizador sintáctico es un programa informático que


analiza una cadena de símbolos de acuerdo a las reglas
de una gramática formal

• El análisis sintáctico convierte el texto de entrada en


otras estructuras (comúnmente árboles), que son más
útiles para el posterior análisis y capturan la jerarquía
implícita de la entrada.
Funcionamiento

• Un analizador léxico crea tokens de una secuencia de


caracteres de entrada y son estos tokens los que son
procesados por el analizador sintáctico para construir la
estructura de datos, por ejemplo un árbol de análisis
o árboles de sintaxis abstracta.
• Es la fase del analizador que se encarga de chequear el
texto de entrada en base a una gramática dada. Y en caso
de que el programa de entrada sea válido, suministra el
árbol sintáctico que lo reconoce.
Funcionamiento

• En teoría, se supone que la salida del analizador sintáctico es


alguna representación del árbol sintáctico que reconoce la
secuencia de tokens suministrada por el analizador léxico.
• En la práctica, el analizador sintáctico también hace:

1. Acceder a la tabla de símbolos (para hacer parte del trabajo


del analizador semántico).
2. Chequeo de tipos (del analizador semántico).
3. Generar código intermedio.
4. Generar errores cuando se producen.
Manejo de Errores Sintácticos

• Si un compilador tuviera que procesar sólo programas correctos,


su diseño e implantación se simplificarían mucho. Pero los
programadores a menudo escriben programas incorrectos, y un
buen compilador debería ayudar al programador a identificar y
localizar errores.
• Es más, considerar desde el principio el manejo de errores puede
simplificar la estructura de un compilador y mejorar su respuesta
a los errores.
Tipos de Errores en Programación

• Los errores en la programación pueden ser de los siguientes tipos:


1. Léxicos, producidos al escribir mal un identificador, una
palabra clave o un operador.
2. Sintácticos, por una expresión aritmética o paréntesis no
equilibrados.
3. Semánticos, como un operador aplicado a un operando
incompatible.
4. Lógicos, puede ser una llamada infinitamente recursiva.
Objetivos del Analizador

• El manejo de errores de sintaxis es el más complicado desde el


punto de vista de la creación de compiladores. Nos interesa que
cuando el compilador encuentre un error, se recupere y siga
buscando errores. Por lo tanto, el manejador de errores de un
analizador sintáctico debe tener como objetivos:
1. Indicar los errores de forma clara y precisa. Aclarar el tipo de
error y su localización.
2. Recuperarse del error, para poder seguir examinando la
entrada.
3. No ralentizar significativamente la compilación.
Lenguajes de Programación

• El uso más común de los analizadores sintácticos es como parte de


la fase de análisis de los compiladores. De modo que tienen que
analizar el código fuente del lenguaje.
• Los lenguajes de programación tienden a basarse en gramáticas
libres de contexto, debido a que se pueden escribir analizadores
rápidos y eficientes para estas.
• Las gramáticas libres de contexto tienen una expresividad limitada
y sólo pueden expresar un conjunto limitado de lenguajes.
Tipos de Analizadores Sintácticos

• ASCENDENTE:

En el Análisis Sintáctico Ascendente se parte de las hojas y se


intenta construir el árbol hacia arriba hasta llegar al símbolo inicial
de la gramática.
Analizador Ascendente
Tipos de Analizadores Sintácticos

• Descendente
En el Análisis Sintáctico Descendente se va recorriendo el árbol
sintáctico desde la raíz hasta las hojas, llegando a generar la
sentencia que se está analizando. La raíz representa el símbolo
inicial de la gramática.
Analizador Descendente
Árboles Sintácticos (AST)

• un árbol de sintaxis abstracta (AST), o simplemente un árbol de


sintaxis, es una representación de árbol de la
estructura sintáctica abstracta (simplificada) del código
fuente escrito en cierto lenguaje de programación.

• El Árbol de sintaxis abstracta es una estructura de datos usada


extensamente en compiladores, debido a su propiedad de
representar la estructura del código de un programa.
Arboles Sintácticos

• Un Árbol Sintáctico es usualmente el resultado del analizador


sintáctico en la fase de un compilador.
• A menudo sirve como un intermediario de la representación del
programa a través de etapas que requiere el compilador, y tiene
un impacto fuerte en la salida final del compilador.
• Siendo el producto en la fase análisis sintáctico de un compilador,
el Árbol Sintáctico tiene varias propiedades que son inestimables a
los siguientes pasos del proceso de compilación.
Arboles Sintácticos

• Comparado al código fuente, un Arbol Sintáctico no incluye ciertos


elementos, como puntuación no esencial y delimitadores
(corchetes, punto y coma, paréntesis, entre otros.).
• Una diferencia importante es que el Árbol Sintáctico puede ser
editado y mejorado con propiedades y anotaciones para cada
elemento que contiene.
Arboles Sintácticos

• Al mismo tiempo, un AST usualmente contiene información extra


sobre el programa, debido a las etapas consecutivas de análisis del
compilador.
• Un ejemplo simple de la información adicional presente en un AST
es la posición de un elemento en el código fuente. Esta
información es usada en caso de un error en el código, para
notificar al usuario la locación de un error.
GRACIAS

Anda mungkin juga menyukai