Análisis sintáctico
La sintaxis de construcción de un lenguaje de programación puede especificarse mediante gramáticas libres de contexto o mediante la notación BNF (Backus-Naur form) vista en el tema 2.2. Los beneficios de las gramáticas son muy importantes pues entre otras cosas:
– Proporcionan una especificación precisa, pero fácil de entender, de un lenguaje de programación.
– A partir de ciertos tipos de gramáticas se puede construir automáticamente analizadores sintácticos.
– Son útiles para traducir programas fuente en un adecuado código objeto.
– Detectan errores.
– Permiten a los lenguajes evolucionar o desarrollarse de manera interactiva.
En análisis sintáctico es la segunda fase de un compilador y es conocido también como Parsing. El parser o analizador sintáctico, propiamente dicho, utiliza los primeros componentes de los tokens producidos por el analizador léxico para crear una representación intermedia en forma de árbol que describa la estructura gramatical del flujo de tokens.
Cada nodo interior de ese árbol sintáctico representa una operación y los hijos del nodo representan los argumentos de la operación. El árbol sintáctico se pasa al resto del compilador para que se siga procesando.
Un analizador sintáctico tiene, entre sus objetivos:
Reportar la presencia de errores con claridad y precisión.
Recuperarse de cada error tan rápido como para poder detectar el siguiente error.
Los errores de programación comunes ocurren en diferentes niveles: errores léxicos, errores sintácticos, errores semánticos y errores lógicos.
Los errores semánticos incluyen los conflictos de tipos entre operadores y operandos. Por ejemplo una estructura for que tenga mal escrita la variable de inicialización.
Los errores léxicos incluyen la escritura incorrecta de los operadores, de los identificadores o de las palabras clave.
Los errores sintácticos incluyen la colocación incorrecta de signos de puntuación como el punto y coma ( ; ) y las llaves ( { } ).
Los errores lógicos incluyen razonamientos incorrectos del programador en el uso de operadores.
Fuente: Apuntes de Informática VII de la FCA de la UNAM