Categorías: Todo - compilador - gramática - árbol - tokens

por SANCAN MACIAS SANCAN MACIAS hace 4 años

1400

Generador Sintáctico

Un analizador sintáctico es una parte crucial del proceso de compilación de un programa, encargándose de recibir y procesar una cadena de componentes léxicos generados por un analizador léxico o lexer.

Generador Sintáctico

Referencias: http://www.lcc.uma.es/~galvez/ftp/tci/tictema3.pdf https://prezi.com/wh1nkcp-xdbj/69-generadores-de-analizadores-sintacticos/ https://elibro.net/es/ereader/uguayaquil/33847 https://elibro.net/es/ereader/uguayaquil/106460

Generador Sintáctico

The inventor of Eisenhower Matrix is Dwight David Eisenhower – an American army general and statesman who served as the 34th President of the United States from 1953 to 1961. His method helps us prioritize by urgency and importance.

GENERADORES DE ANALIZADORES SINTÁCTICOS

CONCEPTO
Es un programa informático que analiza una cadena de símbolos de acuerdo a las reglas de una gramática formal.Dentro de un compilador su función es transformar una entrada en un árbol de derivación.

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

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

Subtopic

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.

Aplicativos que realizan el analizados sintáctico

Urgent and Important tasks that need to be done now.

Se trata de un programa elaborado con Neobook para ayudar a realizar análisis sintácticos. Hacer análisis sintácticos es una tarea escolar en el área de Lengua castellana y Literatura que muy a menudo genera ansiedad en muchos estudiantes.
La lectura de un lenguaje de programación es realizada por un analizador. Proporciona una estructura de datos al compilador, con la que se puede generar el código máquina o bytecode.
Las aplicaciones que intentan analizar la estructura sintáctica de un lenguaje se enfrentan al fenómeno de la ambigüedad, que se puede dar debido a fenómenos como: redundancia en la definición de las reglas gramaticales y/o variedad de roles sintácticos que pueda tener una palabra; se pueden generar así varias representaciones sintácticas para una misma oración. El analizador muestra los distintos árboles sintácticos que puedan ser generados como consecuencia de la ambigüedad presente

These tasks are still important but they're not urgent so you can schedule a time to do them.

Para analizar un texto, los analizadores suelen utilizar un analizador léxico separado (llamado lexer), que descompone los datos de entrada en fichas (símbolos de entrada como palabras). Los Lexers son por lo general máquinas de finitas, que siguen la gramática regular y por lo tanto aseguran un desglose adecuado. Los tokens obtenidos de esta manera sirven como caracteres de entrada para el analizador sintáctico.
El analizador actual maneja la gramática de los datos de entrada, realiza un análisis sintáctico de éstos y como regla general crea un árbol de sintaxis (árbol de análisis). Esto se puede utilizar para el procesamiento posterior de los datos, por ejemplo, la generación de código por un compilador o ejecutado por un intérprete (traductor). Por lo tanto, el analizador es el software que comprueba, procesa y reenvía las instrucciones del código fuente.
En el modelo del compilador, el analizador sintáctico obtiene una cadena de componentes léxicos del analizador léxico, y comprueba si la cadena puede ser generada por la gramática del programa fuente.

These tasks are not important but they still need to be done. The question you have to address yourself: Who can do this for you?

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(gramática libre o independiente del texto).
Construir el árbol de análisis sintáctico que define la estructura jerárquica de un programa y obtener la serie de derivaciones para generar la cadena de componentes léxicos. El árbol sintáctico se utiliza como representación intermedia en la generación de código.
informar de los errores sintácticos de forma precisa y significativa.Ademas deberá estar dotado de un mecanismo de recuperación de erro es para continuar con el análisis.

Tasks that are not urgent nor important should be eliminated so you will not waste time doing them.

Es la fase del analizador que se encarga de chequear el texto de entrada en base a una gramática dada. Y en caso de que el programa de entrada sea válido, suministra el árbol sintáctico que lo reconoce. En teoría, se supone que la salida del analizador sintáctico es alguna representación del árbol sintáctico que reconoce la secuencia de tokens suministrada por el analizador léxico.

Diseño de gramáticas.

Tipo de Gramáticas:
Gramáticas LR(0): La técnica se denomina análisis sintáctico LR(k); la “L” es por el examen de la entrada de izquierda a derecha (en inglés, left-to-right), la “R” por construir una derivación por la derecha (en inglés, rightmost derivation) en orden inverso, y la k por el número de símbolos de entrada de examen por anticipado utilizados para tomar las decisiones del análisis sintáctico.
Gramáticas LL(1): Una gramática LL(1) es aquella en la que su tabla de chequeo de sintaxis no posee entradas múltiples, o sea, es suficiente con examinar sólo un símbolo a la entrada, para saber qué regla aplicar. Toda gramática reconocible mediante el método de los diagramas de Conway es LL(1).
Ambigüedad: Una gramática es ambigua si derivando de forma diferente con el mismo tipo de derivación se llega al mismo resultado.
Derivaciones
Una regla de producción puede considerarse como equivalente a una regla de reescritur, donde el no terminal de la izquierda es sustituido por la pseudocadena del lado derecho de la producción. Podemos considerar que una pseudocadena es cualquier secuencia de terminales y/o no terminales

Derivación por la derecha: es aquella en la que la reescritura se realiza sobre el no terminal más a la derecha de la pseudocadena de partida.

Derivación por la izquierda: es aquella en la que la reescritura se realiza sobre el no terminal más a la izquierda de la pseudocadena de partida.

La gramática que acepta el analizador sintáctico es una gramática de contexto libre, puesto que no es fácil comprender gramáticas más complejas ni construir automáticamente autómatas reducidos que reconozcan las sentencias que aceptan. Recuérdese que una gramática G queda definida por una tupla de cuatro elementos (N,T, P, S): N = No terminales. T = Terminales. P = Reglas de Producción. S = Axioma Inicial

Manejo de Errores

Aplicativos que realizan
Los Leguajes de progrmacion como JAVA,C#,c,etc. Posee¨compiladores que son capaces de dectectar errores que facilitan al programador saber en que se confundió y como solucionar dicho problema.
Los objetivos que persigue un manejador de errores en el análisis sintáctico son, básicamente, los siguentes: * Informar de los errores con claridad y exactitud. * Recuperrarse de cada error con la suficiente rapidez como para detectar errores posteriores. * No debe retrasar de forma significativa el procesamiento de programas correctos.
Funcionamiento
Estrategias de recuperación de errores en analizadores sintácticos: Estrategias de recuperación de errores en analizadores sintácticos.

Subtométodo 4: Producciones de error Este método es utilizado cuando se tiene una idea de los errores más comunes que pueden encontrarse en los programas fuente. Entonces se puede aumentar la GLC del lenguaje de programación con producciones de error, como parte del lenguaje. Así, utilizaremos esta nueva GLC con las producciones de error para la construcción del analizador sintáctico.

método 3: nivel de frase Este método, al descubrir un error, intenta realizar una corrección local de la entrada restante (como, por ejemplo, sustituir un punto por un punto y coma, eliminar una coma sobrante o insertar un punto y coma faltante) para así poder continuar el análisis sintáctico.

método 2: modo Pánico Este método, al descubrir un error, va ignorando símbolos de entrada hasta encontrar uno que pertenezca a un subgrupo especial designado, denominado componentes léxicos de sincronización (como, por ejemplo, “end”, “;”, “(“, “)”…) cuya función está muy bien delimitada en el programa fuente.

método 1: corrección global Se fundamenta en que el compilador realice el número mínimo de cambios posibles al analizar una cadena de entrada incorrecta. Es decir, para una palabra X incorrecta, buscará otra palabra Y, usando árboles de análisis sintáctico, tal que el número de inserciones, modificaciones y borrados de componentes léxicos en dicho árbol sea mínimo.

Características
Los tipos de error más comunes que podemos encontrar a lo largo del proceso de análisis de un programa escrito en un determinado lenguaje de programación tenemos:

- Errores sintácticos: Una expresión aritmética con paréntesis no equilibrados.

- Errores semánticos: Un operador aplicado a un operando incompatible.

- Errores lógicos: Una llamada infinitamente recursiva.

- Errores léxicos: Escribir mal un identificador, palabra clave u operador.

Definición
Este debe informar del lugar exacto donde se encuentra el error en el programa fuente. Es muy común en los distintos compiladores de lenguajes de programación actuales que se informe de la línea donde se encuentra el error, así como que se facilite un apuntador a la posición del carácter donde comienza dicho error, es decir, el número de línea y carácter implicados. Si, detectando un error, existe una posibilidad factible de corrección, muchos compiladores ofrecen alternativas correctas al error encontrado, como por ejemplo mostrar mensajes de este tipo: “Falta punto y coma al final de la sentencia” o “Falta paréntesis derecho”.