Análisis sintáctico 


En esta etapa, el analizador sintáctico utiliza los tokens producidos por el analizador léxico para crear una representación intermedia en forma de un árbol sintáctico, que es una representación jerárquica que muestra cómo se organizan los tokens según las reglas gramaticales. Las reglas gramaticales son aquellas que validan cadenas dentro de un lenguaje de programación. En términos sencillos, una gramática especifica la estructura y las reglas para organizar los símbolos que forman una secuencia.

El objetivo principal del análisis sintáctico es verificar si el código escrito sigue las reglas gramaticales del lenguaje de la (Figura3). Esto implica comprobar que los elementos del código estén organizados correctamente según la gramática definida.


¿Por qué es importante el análisis sintáctico?

  • Garantiza que el código fuente sigue las reglas gramaticales definidas por el lenguaje de programación.
  • Detecta errores de sintaxis, como una instrucción malformada o la falta de un delimitador, asegurando que el programa sea interpretable por la máquina.
  • Convierte el código fuente en estructuras jerárquicas, como árboles de derivación o árboles sintácticos abstractos , que son más fáciles de manipular durante etapas posteriores, 
  • Al interpretar la estructura sintáctica del código, el compilador puede entender cómo se deben ejecutar las instrucciones, identificar dependencias, y garantizar la correcta aplicación de reglas semánticas.
  • El análisis sintáctico prepara el camino para el análisis semántico, donde se verifican aspectos más profundos como los tipos de datos, el alcance de las variables, y las reglas de contexto.  
  • Una representación sintáctica clara permite realizar optimizaciones del programa, como la eliminación de redundancias o la reorganización de instrucciones para mejorar el rendimiento. 
  • Proceso de análisis

    El analizador sintáctico toma los tokens y los compara con las reglas del lenguaje para verificar su validez. Si alguna parte del código no cumple con estas reglas, se lanza un error indicando el problema.

    1. Entrada: Secuencia de tokens proporcionada por el análisis léxico.
    2. Construcción del árbol sintáctico: Organiza los tokens en un árbol siguiendo las reglas de la gramática del lenguaje.
    3. Manejo de errores: Se detectan y reportan errores de sintaxis en el código.
    4. Salida: El árbol sintáctico, que se utiliza para la siguiente fase del compilador (análisis semántico, optimización, etc.).

    En la Figura6 se presenta una determinada gramática que se puede utilizar para la suma de dos dígitos, como 

    3 + 5.

    Figura6.Gramatica para suma de dos números.Elaborado por el autor.23/Nov/2024
    Figura6.Gramatica para suma de dos números.Elaborado por el autor.23/Nov/2024

    Se compone con los siguientes elementos:

    Expresión: es el símbolo que representa una operación o una expresión completa, donde se está iniciando nuestra gramática. En este caso, una Expresión consiste en un Término, seguido del operador +, y luego otro Término.
    Término: es otro símbolo no terminal que representa los componentes básicos que forman las expresiones aritméticas. Un Término puede ser simplemente un Número en este caso.
    Número: es otro símbolo no terminal que representa un número entero (en este caso, de una sola cifra). Un Número está compuesto por uno o más Dígitos.
    Dígito: es un símbolo terminal que representa cualquiera de los números del 0 al 9

    En la Figura7 se representa el árbol de la siguiente expresión. Este árbol construye visualmente cómo se estructura la expresión según la gramática. Cada nodo del árbol representa un símbolo no terminal, y las hojas representan los terminales (como números y operadores). 

    Figura7.Árbol sintáctico.Elaborado por el autor.23/Nov/2024
    Figura7.Árbol sintáctico.Elaborado por el autor.23/Nov/2024

    Cómo leer el árbol:

    • Raíz: La parte superior del árbol, en este caso "Expresión", es la raíz. Representa la estructura completa que se está analizando.
    • Nodos: Cada círculo en el árbol es un nodo. Cada nodo representa una parte de la expresión.
    • Hijos: Las líneas que conectan un nodo con otros nodos debajo de él representan una relación padre-hijo. Los nodos inferiores son hijos del nodo superior.
    • Hojas: Los nodos que no tienen hijos se llaman hojas. En este caso, las hojas son los números (3 y 5).

    Interpretación del árbol:

    En este árbol, se representa una expresión aritmética muy simple: 3 + 5.

    • La expresión completa se descompone en dos términos: un término a la izquierda del signo "+" y otro a la derecha.
    • Cada término está compuesto por un único número.
    • Los números 3 y 5 son los valores concretos de cada término.

    Te dejo un video para que puedas entender mucho mejor cómo se construyen los árboles sintácticos. 

    Pérez, J. A. (2023, 15 de marzo). El analizador sintáctico -parser- [Video]. YouTube.  

    Referencias:

    Tema 12: Analizadores sintácticos funcionales. (s. f.). https://www.cs.us.es/~jalonso/cursos/i1m-15/temas/tema-12.html

    Aho, A. V. (2007). Compilers: Principles, Techniques, & Tools. Pearson.

    ¿Qué es un Analizador Sintáctico? - Ryte Marketing Wiki. (s. f.). https://es.ryte.com/wiki/Analizador_Sint%C3%A1ctico

    ¡Crea tu página web gratis! Esta página web fue creada con Webnode. Crea tu propia web gratis hoy mismo! Comenzar