Comprobar que la secuencia de componentes léxicos cumple las reglas de la gramática Generar el árbol sintáctico Ventajas de utilizar gramáticas Son especificaciones sintácticas y precisas de lenguajes Se puede generar automáticamente un analizador El proceso de construcción puede llevar a descubrir ambigüedades Imparte estructura al lenguaje de programación, siendo más fácil generar código y detectar errores Es más fácil ampliar y modificar el lenguaje 2 3 Analizador Sintáctico, Tipos Tres tipos generales de analizadores sintácticos: Métodos Universales: Cocke-Younger-Kasami y Earley Sirven para cualquier gramática Muy ineficientes Descendentes (top-down) Construyen el árbol de análisis sintáctico desde arriba (raíz, axioma) hasta abajo (hojas, terminales) Analizadores Descendentes Recursivos Analizadores LL(1) con tabla Ascendentes (bottom-up) Construyen el árbol de análisis sintáctico desde abajo hacia arriba Analizadores de Precedencia de Operador Analizadores LR(1) 4 Analizador Sintáctico Tanto para el análisis descendente como para el ascendente: La entrada se examina de izquierda a derecha, un símbolo cada vez Trabajan con subclases de gramáticas En general las gramáticas serán LL y LR LR(k) LL(k) En la práctica solo se utilizan LR(1) y LL(1) Muchos compiladores se llaman "parser-driven" debido a que el analizador sintáctico es el que llama al léxico Existen herramientas para generar automáticamente analizadores sintácticos (YACC, Bison) 5 Análisis Sintáctico Descendente Algoritmo 1. Poner el axioma como raíz del árbol de derivación 2. Hasta que solo haya símbolos terminales, derivar más a la izquierda