Introducción a los Parsers
Tabla de contenido
- Introducción a los compiladores
- ¿Qué es un analizador sintáctico o parser?
- Definición formal de un parser
- Generación de árboles de análisis sintáctico
- Enfoque de arriba hacia abajo
- Enfoque de abajo hacia arriba
- Clasificación de los parsers
- Parsers de arriba hacia abajo
- Parsers de fuerza bruta
- Parsers descendentes recursivos
- Parsers predictivos
- Parsers de abajo hacia arriba
- Parsers de precedencia de operadores
- Parsers LR
- Conclusiones
¿Qué es un analizador sintáctico o parser? 🧩
Un parser es un programa que Genera un árbol de análisis sintáctico para una cadena de texto dada, siempre y cuando esa cadena de texto pueda ser generada a partir de una gramática subyacente. En pocas palabras, el parser Toma la cadena como entrada y con la ayuda de la gramática subyacente, genera el árbol de análisis sintáctico correspondiente. Existen diferentes enfoques para generar los árboles de análisis sintáctico, como el enfoque de arriba hacia abajo y el enfoque de abajo hacia arriba.
Generación de árboles de análisis sintáctico 🌳
La generación de árboles de análisis sintáctico puede llevarse a cabo de dos maneras distintas: el enfoque de arriba hacia abajo y el enfoque de abajo hacia arriba.
Enfoque de arriba hacia abajo
En el enfoque de arriba hacia abajo, se comienza con el símbolo inicial y se va derivando la cadena de texto paso a paso. Se elige una producción para expandir el símbolo no terminal más a la izquierda y se repite el proceso hasta que se obtiene la cadena completa. Este enfoque utiliza una derivación más a la izquierda, es decir, se expanden los símbolos no terminales más a la izquierda en cada paso.
Enfoque de abajo hacia arriba
En el enfoque de abajo hacia arriba, se comienza con la cadena de texto misma y se va reduciendo utilizando las reglas de producción hasta llegar al símbolo inicial. Se reduce la cadena paso a paso siguiendo las reglas de producción inversamente, es decir, se reducen los símbolos más a la derecha en cada paso. Este enfoque utiliza una derivación más a la derecha.
Clasificación de los parsers 📇
Existen diferentes categorías de parsers, los cuales pueden clasificarse en función de su enfoque y características particulares. Las dos categorías principales son los parsers de arriba hacia abajo y los parsers de abajo hacia arriba.
Parsers de arriba hacia abajo
Los parsers de arriba hacia abajo pueden dividirse en dos categorías adicionales: parsers de arriba hacia abajo con retroceso y parsers de arriba hacia abajo sin retroceso. Los parsers de arriba hacia abajo con retroceso utilizan el método de retroceso, el cual permite manejar gramáticas no deterministas. Por otro lado, los parsers de arriba hacia abajo sin retroceso pueden clasificarse en parsers de descenso recursivo y parsers predictivos. Algunos ejemplos de parsers predictivos son ll1 y llk.
Parsers de abajo hacia arriba
Los parsers de abajo hacia arriba también se conocen como parsers de desplazamiento-reducción. Estos parsers se dividen en dos categorías principales: parsers de precedencia de operadores y parsers LR. Los parsers LR se pueden subdividir en lr0, slr1, llr1 y clr1. El parser clr1 es el más poderoso dentro de la categoría de parsers LR.
En resumen, existen diferentes tipos de parsers que se utilizan para generar árboles de análisis sintáctico a partir de cadenas de texto. Los parsers pueden clasificarse de diferentes maneras en función de su enfoque y características específicas. En el próximo capítulo, nos enfocaremos en los parsers de arriba hacia abajo sin retroceso.