Fase sintáctica (Segunda fase)
Análisis sintáctico
El análisis de sintaxis consiste en descubrir la estructura del código.
Determina si un texto sigue o no el formato esperado. El objetivo
principal de esta fase es asegurarse de que el código fuente escrito por
el programador sea correcto o no.
El análisis de sintaxis se basa en las reglas basadas en el lenguaje de
programación específico mediante la construcción del árbol de análisis
con la ayuda de tokens. También determina la estructura del idioma de
origen y la gramática o sintaxis del idioma.
¿Qué es una gramática libre de contexto?
Se llama "libre de contexto" porque las reglas no dependen del contexto en el que se aplican: cada regla se evalúa de manera independiente.
Gramática: G(N,T,P,S)
N=No terminales
T=Terminales
P=Reglas de producción
S=Axioma inicia
Componentes de una GLC para nuestro lenguaje
Conjunto de símbolos no terminales (N):
- Representan conceptos o categorías del lenguaje, como "declaración" o "expresión".
- Ejemplo en nuestro lenguaje:
programa,declaración,expresión.
Conjunto de símbolos terminales (Σ):
- Son los tokens generados por el analizador léxico.
- Ejemplo en nuestro lenguaje: palabras clave (
si,imprime), operadores (+,=), y delimitadores ({,}).
Conjunto de reglas de producción (P):
- Definen cómo los no terminales se expanden en secuencias de terminales y no terminales.
- Ejemplo:
programa → declaración_lista.
Símbolo inicial (S):
- Es el punto de partida de la gramática.
- En nuestro caso:
S = programa
Composición de nuestra gramática
El mini lenguaje de C en español tiene las siguientes características:
Símbolos no terminales (N):
- Programa: Representa el programa completo.
- Declaración_lista: Una lista de declaraciones.
- Declaración: Una declaración individual.
- Asignación, estructura_control, impresión: Tipos de declaraciones.
- Bloque: Un bloque de código delimitado por
{y}. - Expresión, término, factor: Partes de una expresión aritmética.
Símbolos terminales (Σ):
Estos son los tokens producidos por la fase léxica:
- Palabras clave:
si,imprime,mientras. - Operadores:
+,-,*,/,=,>,<,>=,<=,==,!=. - Símbolos especiales:
{,},(,),;. - Otros:
IDENTIFICADOR,NUMERO,CADENA.
Reglas de producción (P):
![]() |
| Figura 6. Reglas de producción. |
Árboles de derivación
Un árbol de derivación es una representación gráfica que muestra cómo una cadena de entrada (como el código fuente) se deriva utilizando una gramática libre de contexto.
En este árbol:
- Cada nodo interno representa un símbolo no terminal.
- Cada hoja representa un símbolo terminal (token generado por el analizador léxico).
- La raíz del árbol es el símbolo inicial de la gramática.
- Las ramas del árbol siguen las reglas de producción de la gramática.
![]() |
| Figura 6. Reglas de producción. |
Esto significa que una asignación está compuesta por:
- Un
IDENTIFICADOR(el nombre de una variable). - El símbolo
"="(el operador de asignación). - Una
expresiónque produce un valor. - El símbolo
";"que marca el final de la asignación.
Árbol Sintáctico:
El árbol sintáctico para el código x = x + 1; es el siguiente:
Basándonos en la gramática y el código, el árbol sintáctico se construye de la siguiente manera:
| Figura 8. Árbol sintáctico. |
Explicación del árbol
Raíz:
- La raíz es
asignación, ya que es el punto de entrada para esta gramática.
- La raíz es
Hijos inmediatos:
- El lado izquierdo de la asignación se deriva como
IDENTIFICADOR(x). - El operador
=aparece directamente como un terminal. - El lado derecho es una
expresión, que se expande según sus reglas.
- El lado izquierdo de la asignación se deriva como
Expansión de la expresión:
- La
expresiónse descompone en términos (término), que se conectan con el operador"+".
- La
Términos y factores:
- El primer término es un
factorque resulta ser unIDENTIFICADOR(x). - El segundo término es un
factorque resulta ser unNUMERO(1).
- El primer término es un
Dejo el link de un video para conocer mas del tema:
Alex Ortega Díaz. (2018, 13 agosto). Fases del compilador Análisis léxico, sintáctico y semántico [Vídeo]. YouTube. https://www.youtube.com/watch?v=7sAU-7z0X1E
Referencias:
Urrutia, D. (2024, 1 noviembre). Qué es un analizador sintáctico o parser | Definición, significado y para qué sirve. Arimetrics. https://www.arimetrics.com/glosario-digital/analizador-sintactico-parser
Cerulean, K. (2024, 26 septiembre). Phases of Compiler with Example: Compilation Process & Steps. Guru99. https://www.guru99.com/es/compiler-design-phases-of-compiler.html


Comentarios
Publicar un comentario