Resumen Análisis sintáctico

4
Walter Alexander Ajtún Pisquiy Carné: 201208103 Resumen Análisis sintáctico La tarea del analizado sintáctico es determinar la estructura sintáctica de un programa a partir de los tokens producidos por el analizado léxico, ya sea de manera explícita o implícita construir un árbol de análisis gramatical o árbol sintáctico que represente esta estructura. De este modo, se puede ver el analizador sintáctico como una función que toma como su entrada la secuencia de tokens producidos por el analizador Léxico y que produce como su salida el árbol sintáctico. La implementación de un compilador seria de una manera más sencilla si solo tuviera que procesar los programas correctos, pero los programadores a menudo escribir programas incorrectos, y un buen compilador debería ayudar al programador a identificar y localizar sus errores. Existen diferentes tipos de errores en programación pueden ser de tipos léxicos, sintácticos, semánticos y lógicos. Manejo de errores sintácticos El manejador de errores de un analizador sintáctico debe tener como objetivos; indicar los errores de forma clara y precisa, recuperarse del error para poder seguir examinando la entrada y no ralentizar significativamente la compilación. Es ideal al momento de crear un compilador tener en mente los errores que se puedan producir. Existen varias estrategias para corregir los errores una vez detectados: Ignorar el problema: Ignora el resto de entradas hasta llegar a una condición de seguridad. Para poder reconocer los errores Corrección Global Dada una secuencia completa de tokens a ser reconocida, si hay algún error por el que nos puede reconocer, busca la secuencia completa más parecida que si se pueda reconocer, en otras palabras el analizador sintáctico le pide toda la secuencia de tokens al léxico, y lo que hace es devolver lo mas parecido a la cadena de entrada pero sin errores. Tipos de gramática que acepta un analizador sintáctico Se centra más en el análisis sintáctico para lenguajes basados en gramáticas formales, ya que hacerlo de otra forma hace difícil la comprensión del compilador, errores de muy difícil localización, como es la ambigüedad en el reconocimiento de las sentencia.

description

Resumen Analisis sintactico

Transcript of Resumen Análisis sintáctico

Walter Alexander Ajtún Pisquiy Carné: 201208103

Resumen Análisis sintáctico La tarea del analizado sintáctico es determinar la estructura sintáctica de

un programa a partir de los tokens producidos por el analizado léxico, ya sea de

manera explícita o implícita construir un árbol de análisis gramatical o árbol

sintáctico que represente esta estructura. De este modo, se puede ver el

analizador sintáctico como una función que toma como su entrada la secuencia

de tokens producidos por el analizador Léxico y que produce como su salida el

árbol sintáctico.

La implementación de un compilador seria de una manera más sencilla si

solo tuviera que procesar los programas correctos, pero los programadores a

menudo escribir programas incorrectos, y un buen compilador debería ayudar al

programador a identificar y localizar sus errores. Existen diferentes tipos de

errores en programación pueden ser de tipos léxicos, sintácticos, semánticos y

lógicos.

Manejo de errores sintácticos

El manejador de errores de un analizador sintáctico debe tener como

objetivos; indicar los errores de forma clara y precisa, recuperarse del error para

poder seguir examinando la entrada y no ralentizar significativamente la

compilación. Es ideal al momento de crear un compilador tener en mente los

errores que se puedan producir.

Existen varias estrategias para corregir los errores una vez detectados:

Ignorar el problema: Ignora el resto de entradas hasta llegar a una condición de

seguridad.

Para poder reconocer los errores

Corrección Global

Dada una secuencia completa de tokens a ser reconocida, si hay algún error por

el que nos puede reconocer, busca la secuencia completa más parecida que si

se pueda reconocer, en otras palabras el analizador sintáctico le pide toda la

secuencia de tokens al léxico, y lo que hace es devolver lo mas parecido a la

cadena de entrada pero sin errores.

Tipos de gramática que acepta un analizador sintáctico

Se centra más en el análisis sintáctico para lenguajes basados en gramáticas

formales, ya que hacerlo de otra forma hace difícil la comprensión del

compilador, errores de muy difícil localización, como es la ambigüedad en el

reconocimiento de las sentencia.

Walter Alexander Ajtún Pisquiy Carné: 201208103

La gramática que acepta el analizador sintáctico es una gramática de contexto

libre:

Gramática: G (N, T, P, S) N = No terminales.

T = Terminales.

P = Reglas de Producción. S = Axioma Inicial.

Derivaciones

Una derivación comienza con un nombre de estructura simple y termina con una

cadena de símbolos de token. En cada etapa de una derivación se hace un

reemplazo simple utilizando una selección de una regla gramatical

Derivación por la izquierda

Es la derivación donde el no terminar de más a la izquierda de cualquier forma

sea la frase se sustituye en cada paso.

Derivación por la derecha o canónica:

Es la derivación donde el no terminal más a la derecha se sustituye en cada paso

Árbol sintáctico de una sentencia de un lenguaje

Es una representación que se utiliza para describir el proceso de derivación de

dicha sentencia. Como nodos internos del árbol, se sitúan los elementos no

terminales de reglas de producción que se hayan aplicado.

Ambigüedad

Una gramática suele ser ambigua si derivando de forma diferente con el mismo

tipo de derivación se llega al mismo resutado.

Ejemplo: Considérese la gramática

E -> E + E

E ->E * E

E ->( E )

E ->id | num

Forma secuencial: Es cualquier secuencia de terminales y no terminales

obtenida mediante derivaciones a partir del axioma inicial.

Tipos de Análisis

Se desprender dos tipos o clases de analizadores sintácticos al construir el árbol

sintáctico, los cuales son los siguientes:

Descendentes

Walter Alexander Ajtún Pisquiy Carné: 201208103

Estos parten del axioma inicial, y van efectuando derivaciones a la izquierda

hasta obtener la secuencia de derivaciones que reconoce a la sentencia.

Pueden ser:

Con retroceso

Con recursión

Ascendentes

Estas parten de la sentencia de entrada, y van aplicando reglas de producción

hacia atrás, hasta llegar al axioma inicial.

Pueden ser

Con retroceso

LR(1)

Análisis descendente con retroceso

Este método parte del axioma inicial y aplica todas las posibilidades reglas al no

terminal más a la izquierda.

Problemas

Este método no funciona con gramáticas recursivas a la izquierda, ya que puede

ocurrir entre en un bucle infinito.

No existen muchos analizadores sintácticos con retroceso.

Análisis descendente con recursión

Las reglas gramaticales libres de contexto determinan el conjunto de cadenas

sintácticamente legales de símbolos de token para las estructuras definidas por

las reglas, también expresan un lenguaje al igual que puede hacerlo la notación

BNF, y los diagramas de Conway.

Conway: Un diagrama de Conway es un grafo dirigido donde los elementos no

terminales aparecen como rectángulos, y los terminales como círculos.

Análisis descendente de 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 Conwayes LL(1)

El método consiste en seguir un algoritmo partiendo de:

La cadena a reconocer, junto con un apuntador, que nos indica cual es el

tokenactual.-Unapila de símbolos( terminalesy no terminales)

Walter Alexander Ajtún Pisquiy Carné: 201208103

Una tabla asociada de forma unívoca a una gramática. En esta asignatura

no vamos a ver como calcular dicha tabla.

La cadena de entrada acabará en el símbolo $,