ANÁLISIS SINTÁCTICO
(Martínez López, F. (2015). Teoría, diseño e implementación de compiladores de Lenguajes. RA-MA Editorial. https://elibro.net/es/lc/uguayaquil/titulos/106460)
Conflict is present everywhere in the world around us. We experience conflict on a daily basis, and it can be minor or major.Conflict in a story is a struggle between opposing forces. Characters must act to confront those forces and there is where conflict is born. If there is nothing to overcome, there is no story. Conflict in a story creates and drives the plot forward.
GENERADORES DE ANALIZADORES SINTÁCTICOS
https://prezi.com/wh1nkcp-xdbj/69-generadores-de-analizadores-sintacticos/
Deberá de ser llamada desde el código del usuario.
Devolverá 0 si el análisis tuvo éxito y 1 si el análisis falló
yyparse() simula el analizador LALR(1)
El fichero xxxx.tab.c contiene las tablas del analizador y la función int yyparse(void).
GOLD
El código fuente está disponible también en numerosos lenguajes.
Incluye análisis léxico
Multilenguaje
LALR(1)
Ascendente
GRAMÁTICA
Características
Mensajes de error detallados durante el análisis
Genera código legible y comentado
Soporte para depurar las gramáticas sin necesidad de generar el analizador
Código Generado
JAVA
C#
Tipo de analizador
LL (K)
Descendente
TIPOS
DESCENDENTES
EJEMPLOS: JAVA CC, ANTLR, LLGen, COCO/R
Se utiliza más reglas.
Construcciones de derivaciones por la izquierda de una sentencia o enunciado.
Se construye el árbol de arriba hacia abajo.
ASCENDENTES
EJEMPLOS: YACC, BISON, AYACC, BYACC, PCYACC, LEMON, CUP
Disminuye el número de reglas mal aplicadas.
Desde los tokens hacia el axioma inicial.
Consiste en construir el árbol sintáctico desde abajo hacia arriba.
CONCEPTO
Dentro de un compilador su función es transformar una entrada en un árbol de derivación.
Es un programa informático que analiza una cadena de símbolos de acuerdo a las reglas de una gramática formal.
DISEÑO DE GRAMÁTICAS
(Martínez López, F. (2015). Teoría, diseño e implementación de compiladores de Lenguajes. RA-MA Editorial. https://elibro.net/es/lc/uguayaquil/titulos/106460)
TIPOS DE GRAMÁTICA
Gramática LR (0)
La variable inicial no aparece a la derecha de ninguna producción.
Gramática LL(1)
El (1) indica la cantidad de símbolos de entrada que se deben conocer antes del análisis.
L: Significa que las derivaciones en el árbol se hacen de izquierda a derecha
L: Significa que la entrada se lee de izquierda a derecha
AMBIGÜEDAD
Eliminación de la ambigüedad
Agruparemos todos los operadores de igual precedencia en grupos y asociaremos a cada uno una regla, de forma que los que tengan menor precedencia aparezcan más cercanos al símbolo de inicio (precedencia en cascada).
Definición
Una gramática es ambigua si el lenguaje que define contiene alguna cadena que tenga más de un árbol de derivación para esa gramática.
DERIVACIONES
Arboles de derivación
Si un nodo tiene etiqueta E entonces es una hoja y es hijo único.
La raiz se etiqueta con S
Cada nodo tiene una etiqueta que es un símbolo.
Tipos
Derivación más a la derecha
Se sustituye en cada paso la variable más a la derecha de la forma de frase.
Derivación más a la izquierda.
Se sustituye en cada paso la variable más a la izquierda de la forma de frase.
Es la que considera una producción como una regla de reescritura donde el no terminal de la izquierda es sustituido por la cadena del lado derecho de la producción
GRÁMATICA DE CONTEXTO LIBRE
Una GLC viene dada por la cuádrupla (N,T,P,S)
AXIOMA INICIAL (S)
REGLAS DE PRODUCCIÓN (P)
TERMINALES (T)
NO TERMINALES (N)
MANEJO DE ERRORES
(Martínez López, F. (2015). Teoría, diseño e implementación de compiladores de Lenguajes. RA-MA Editorial. https://elibro.net/es/lc/uguayaquil/titulos/106460)
APLICATIVOS
Aplicado dentro del mismo campo, los lenguajes de programación tales como JAVA te señalan desde un principio los errores cometido a nivel semántico permitiendo corregir dichos errores antes de su compilación.
Los diferentes lenguajes de programación (JAVA, C#, etc) posee compiladores que son capaces de detectar errores que facilitan al programador saber en que se confundió y como solucionar dicho problema.
FUNCIONAMIENTO
No ralentizar significativamente la compilación.
Mejorar la respuesta ante los errores.
Simplificar la estructura del compilador
Recuperarse del error, para poder seguir examinando la entrada.
Existen MÉTODOS tales:
4. PRODUCCIÓNES DE ERRORES
La gramática se aumenta con respecto a los errores más comunes.
3. CORRECCIÓN GLOBAL
Si existe un error que no puede reconocer, encuentra otra secuencia completa más parecida para que pueda reconocer.
Se da una vez culminada la secuencia completa de reconocimiento de tokens
2. RECUPERACIÓN A NIVEL DE FRASE
Intenta recuperar el error una vez descubierto
1. IGNORAR EL PROBLEMA
Consiste en ignorar el resto de la entrada hasta llegar a una condición de seguridad (";" o "END").
Aclarar el tipo de error y su localización.
Intercepta todos los errores para presentarlos en un mensaje al final de la compilación.
Indicar los errores de forma clara y precisa
DEFINICIÓN
Es un modulo en la fase del compilador que recepta los errores encontrados en las distintas fases del analizador y muestra un mensaje con el error respectivo.
Aplicativos
Los motores de búsqueda como Google extraen (analizan) texto relevante para ellos de las páginas web descargadas con rastreadores. Se procesan y los datos analizados se pueden utilizar para la navegación.
Los analizadores de URI descomponen esquemas complejos tales como URLs en su estructura jerárquica.
Los analizadores especiales de XML son responsables del análisis de los documentos XML y preparan la información contenida en ellos para su uso posterior.
Funcionamiento
Construir el árbol de análisis sintáctico que define la estructura jerárquica de un programa
El árbol sintáctico se utilizará como representación intermedia en la generación de código.
Obtiene la serie de derivaciones para generar la cadena de componentes léxicos.
Validar las declaraciones de identificadores
Completar la tabla de simbolos
Informar de los errores sintácticos de forma precisa y significativa.
En muchos lenguajes no se pueden usar una variable si no ha sido declarada con anterioridad
Comprobar si la cadena de componentes léxicos, proporcionada por el analizador léxico puede ser generada por la gramática que define el lenguaje fuente
Ejemplos: Componentes de tipos, unicidad de etiquetas e identificadores
Hacen referencia a aspectos que solo pueden ser conocidos en tiempos de ejecución
Aquellas que el compilador incorpora al programa traducido
Identificar cada tipo de instrucción y sus componentes
Se realizan durante la compilación del programa
Concepto
El analisis sintáctico es un analisis a nivel de sentencias y es mucho mas complejo que el analisis léxico
Y en caso de que el programa de entrada sea valido, suministra el árbol sintactico que lo reconoce.
Fase del analizador que se encarga de chequear el texto de entrada en base a una gramática dada.