Analizador Sintactico Y Casting

  • Uploaded by: Cheng Lin
  • 0
  • 0
  • February 2021
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Analizador Sintactico Y Casting as PDF for free.

More details

  • Words: 1,565
  • Pages: 5
Loading documents preview...
ANALIZADOR SINTÁCTICO El análisis sintáctico es una aplicación que resulta del estudio de la Teoría de Autómatas y Lenguajes Formales. El análisis sintáctico es la base del Demostrador de Teoremas, ya que le permite analizar los componentes léxicos y sintácticos que forman una fórmula para después poderla evaluar, o no en caso de error, correctamente. Es una de las partes de un compilador que transforma su entrada en un árbol de derivación. El análisis sintáctico convierte el texto de entrada en otras estructuras (comúnmente árboles), que son más útiles para el posterior análisis y capturan la jerarquía implícita de la entrada. Un analizador léxico crea tokens de una secuencia de caracteres de entrada y son estos tokens los que son procesados por el analizador sintáctico para construir la estructura de datos, por ejemplo un árbol de análisis o árboles de sintaxis abstracta. El objetivo del analizador sintáctico es determinar si el código fuente es correcto desde el punto de vista de la sintaxis del lenguaje, es decir, comprueba si el programa fuente (PF) es correcto sintácticamente. Analizar sintácticamente una secuencia de tokens consiste en encontrar para dicha secuencia un árbol sintáctico o árbol de derivación que, partiendo del axioma inicial de la gramática y a través de las reglas (también llamadas producciones), nos lleve a obtener en las hojas la secuencia de tokens analizada. Si se consigue este resultado, se dice que la secuencia de tokens pertenece al lenguaje generado por la gramática y pudiendo generar el código correspondiente a la sentencia. En caso contrario, se genera el error adecuado a la situación y no se genera el código de esa sentencia. Es posible seguir analizando el resto del programa fuente para buscar más errores pero no ya no se generará ningún código. La complejidad de generar el árbol de una sentencia de n tokens es O(n3). Es muy costoso porque la gramática puede ser cualquiera de tipo 2. Por ello, se elige un subconjunto de este tipo de gramáticas de manera que podamos encontrar procedimientos que agilizan la generación del árbol , obteniendo así una complejidad menor que la anterior. El análisis sintáctico también es un estado inicial del análisis de frases de lenguaje natural. Es usado para generar diagramas de lenguajes que usan flexión gramatical, como los idiomas romances o el latín. Los lenguajes habitualmente reconocidos por los analizadores sintácticos son los lenguajes libres de contexto. Cabe notar que existe una justificación formal que establece que los lenguajes libres de contexto son aquellos reconocibles por un autómata de pila, de modo que todo analizador sintáctico que reconozca un lenguaje libre de contexto es equivalente en capacidad computacional a un autómata de pila. Los analizadores sintácticos fueron extensivamente estudiados durante los años 70 del siglo XX, detectándose numerosos patrones de funcionamiento en ellos, cosa que permitió la creación de programas generadores de analizadores sintáticos a partir de una especificación de la sintaxis del lenguaje en forma Backus-Naur por ejemplo, tales y como yacc, GNU bison y javacc.

Un claro ejemplo: Es el proceso que permite determinar si una cadena puede ser generada por una gramática. En nuestro caso es el proceso que permite determinar si una fórmula está bien generada o no. Este proceso es fundamental en el Demostrador de Teoremas ya que una cadena que no sea una fórmula no servirá para realizar los razonamientos o pruebas. Por tanto es importante definir precisamente un analizador para esta tarea. Desde el punto de vista formal un analizador es un Autómata equivalente a una gramática.

Objetivos del analizador sintáctico (AS)

El AS es la parte principal de un compilador. Las funciones de AS son:

Principales: · Comprobar si el programa es sintácticamente correcto. · Generar las estructuras de datos (árboles sintácticos u otras estructuras) que representan el programa y sirven para el analizador semántico y el generador de código. · En el caso de compilación dirigida por sintaxis -- llamar al analizador semántico y al generador de código. Otras: · Reaccionar frente a los errores e intentar acotar la propagación de los errores (intentar evitar que un error produzca muchos mensajes de error). · Hacer los siguientes pasos del compilador más independientes de la sintaxis del lenguaje. Un analizador sintáctico, tal y como se ha enfocado en esta librería es una clase que recibe lo siguiente: 1. Una clase donde se almacenarán los atributos de cada símbolo. 2. Una gramática libre de contexto donde el símbolo de inicio solo produce una variable. 3. Una función de síntesis para cada producción, encargada de sintetizar los atributos necesarios. 4. Para cada producción una opcional regla para deshacer ambigüedades. 5. Una instancia de una clase de léxico que derive de la clase abstracta de léxico básico. 6. Una opcional función de error para manejarlos y recuperarse en la medida de lo posible.

El analizador ira leyendo del léxico y aplicando las reducciones necesarias (llamando a las funciones de síntesis proporcionadas). El resultado habitual es un árbol sintáctico construido de manera ascendente. Cada nodo de ese árbol es del tipo genérico que se le pasa como parámetro al parser mencionado en la lista anterior. FUNCIÓN DEL ANÁLISIS SINTÁCTICO. Analizar sintácticamente una tira o cadena de tokens no es más que encontrar para ella el árbol sintáctico o de derivación que tiene como raíz el axioma de la gramática, y como nodos terminales la sucesión ordenada de símbolos que componen la cadena analizada. En caso de no existir este árbol sintáctico, la cadena no pertenecerá al lenguaje, y el analizador sintáctico ha de emitir el correspondiente mensaje de error. Existen dos formas de analizar sintácticamente una cadena: · Análisis descendente: Partiendo del axioma inicial de la gramática se va descendiendo utilizando las derivaciones izquierdas, hasta llegar a construir la cadena analizada. · Análisis ascendente: Se va construyendo el árbol desde sus nodos terminales. Es decir, se construye desde los símbolos de la cadena hasta llegar al axioma de la gramática. En este caso, se emplean normalmente las derivaciones más a la derecha hasta la localización de la raíz.

Los principales métodos de análisis sintáctico son: o Análisis descendente: § § o § § § § § §

Análisis descendente con retroceso. Análisis de gramáticas LL . Análisis ascendente: Análisis ascendente con retroceso. Análisis de gramáticas de precedencia simple. Análisis de gramáticas de precedencia generalizada. Análisis de gramáticas por el método mixto. Análisis de gramáticas de precedencia de operador. Análisis de gramáticas LR.

Los análisis con retroceso se basan en la prueba sistemática de todas las alternativas posibles, dando marcha atrás tan pronto como se detecte que el camino seguido es erróneo. Pueden usarse para cualquier gramática de contexto libre, aunque tienen tres grandes inconvenientes: Primero , emplean mucho más tiempo para el análisis que los demás analizadores, dependiendo éste incluso de la ordenación de las reglas gramáticales; Segundo ,

no dan un buen diagnóstico de los errores que encuentran; Tercero , complican la generación de código cuando ésta se realiza al par que el análisis sintáctico. Los métodos más eficientes de análisis (tanto ascendente como descendente) no funcionan para todas las gramáticas de contexto libre, sino sólo para las gramáticas que cumplen unas determinadas condiciones. Afortunadamente, en la mayoría de los casos, pueden encontrase para los lenguajes de programación gramáticas de tipo LL o LR que los generen. Para representar el árbol sintáctico que conduce hasta una cadena se asigna a cada regla de la gramática un número. Se define el parse como la secuencia ordenada de números (de reglas) aplicadas para construir dicho árbol. Hay dos tipos de parse , que son: · El parse-izquierdo: Son los números de las reglas de derivacion izquierda utilizadas para generar la cadena a partir del axioma, por tanto correspondiente a un análisis descendente . · El parse-derecho: Son los números de las reglas de derivación derecha utilizadas para generar la cadena a partir del axioma, en orden inverso. El tomar el orden inverso viene condicionado por ser el análisis ascendente el que normalmente utiliza las reglas de derivación derecha, con lo que el orden en el que aparecen al realizar el análisis es invertido.

CASTING

En programación, un casting (o cast ) sirve para cambiar el tipo de dato del valor resultante de una expresión. Conversión entre tipos primitivos (casting) El casting es un procedimiento para transformar una variable primitiva de un tipo a otro. También se utiliza para transformar un objeto de una clase a otra clase siempre y cuando haya una relación de herencia entre ambas. En este caso nos centraremos en el primer ripo de casting. Dentro de este casting de variables primitivas se distinguen dos clases: Casting implícito En este caso no se necesita escribir código para que la conversión se lleve a cabo. Ocurre cuando se realiza lo que se llama una conversión ancha ( widening casting ), es decir, cuando se coloca un valor pequeño en un contenedor grande. Casting explícito En el casting explícito sí es necesario escribir código. Ocurre cuando se realiza una conversión estrecha ( narrowing casting ), es decir, cuando se coloca un valor grande en un contenedor pequeño. Son susceptibles de pérdida de datos. Para finalizar con el casting entre primitivas, conviene tener en cuenta lo siguiente: • No es posible realizar casting entre una variable primitiva

booleana y cualquier otra

variable primitiva. • Sí es posible realizar casting entre una variable primitiva char y una variable primitiva que almacene enteros

Related Documents


More Documents from "Kyaw Bhone Win"