Categories: All - sintáctico - xml - gramática - compiladores

by Sergio Cunduri 4 years ago

546

ANÁLISIS SINTÁCTICO

Los analizadores de URI descomponen esquemas complejos como las URLs en su estructura jerárquica, mientras que los analizadores de XML procesan documentos XML para preparar la información contenida.

ANÁLISIS SINTÁCTICO

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.