2. Análisis sintáctico: Verificando la estructura del código.

El análisis sintáctico es la etapa en la que el compilador verifica que los tokens generados en el análisis léxico sigan las reglas gramaticales del lenguaje. Estas reglas se definen mediante una gramática libre de contexto.
En términos simples, esta etapa responde a la pregunta: ¿El código tiene sentido desde un punto de vista estructural?

Cómo funciona el análisis sintáctico

Para entenderlo, imaginemos que nuestro mini lenguaje tiene una gramática que define cómo deben escribirse las instrucciones.
El resultado de esta etapa es un árbol sintáctico (parse tree), que representa la estructura jerárquica del programa.

Para el Ejemplo 4, podemos ver la declaración de una variable llamada suma la cuales se le asigna la suma de dos variables x, y:

entero suma = x + y;

Ejemplo 4. Suma de dos variables. 
Fuente: Eduardo, O. Q. E. (2024). Ejemplo 4 [Fragmento de código].

La gramática podría definir que una declaración de variable debe seguir esta estructura como se muestra en el Ejemplo 5, donde se define la declaración de un tipo de dato seguido por un nombre asignado para identificar la declaración seguido de una expresion que contienen dos operandos y un operador:

<declaración> ::= <tipo> <identificador> "=" <expresión> ";"

<expresión> ::= <identificador> <operador> <identificador>

Ejemplo 5. Gramática del lenguaje.
Fuente: Eduardo, O. Q. E. (2024). Ejemplo 5 [Fragmento de gramática].

Usando esta gramática, el compilador genera el siguiente árbol sintáctico que se muestra en el Ejemplo 6 donde el árbol sintáctico se encarga de validar que todos los datos desde la declaración hasta la asignación sean válidos para nuestro lenguaje:

                                                                        Declaración

                                                                           ├── Tipo: entero

                                                                           ├── Identificador: suma

                                                                           └── Expresión:

                                                                               ├── Operando: x

                                                                               ├── Operador: +

                                                                               └── Operando: y

Ejemplo 6. Árbol sintáctico.
Fuente: Eduardo, O. Q. E. (2024). Ejemplo 6 [Árbol sintáctico].

Herramienta utilizada: Gramáticas libres de contexto.

Se utilizan algoritmos como LL o LR para construir este árbol y detectar errores de sintaxis. Por ejemplo, si falta el punto y coma al final de la declaración, el compilador generará un error de sintaxis.

  •     LL (Top-Down Parsing): Construye el árbol de arriba hacia abajo.
  •     LR (Bottom-Up Parsing): Construye el árbol de abajo hacia arriba.


En el siguiente video te comparto la explicación más a detalle sobre la fase sintáctica:

Fuente: Alex Ortega Díaz. (2018, August 13). Fases del compilador Análisis léxico, sintáctico y semántico [Video]. YouTube. https://www.youtube.com/watch?v=7sAU-7z0X1E


Referencia en APA: Alfred, A. V., & Ullman, J. D. (1998). Análisis sintáctico. En Principles of compiler design (Capítulo 3). Compiladores. (n.d.). Google Books. https://books.google.com.gt/books?id=yG6qJBAnE9UC&printsec=frontcover#v=onepage&q&f=false

Comentarios