T1

February 3, 2019 | Author: Jerzain Carrillo | Category: Parsing, Compiler, Areas Of Computer Science, Linguistics, Computer Engineering
Share Embed Donate


Short Description

Download T1...

Description

INSTITUTO INSTITUT O TECNOLOGICO DE ACAPULCO

 Ingeniería en Sistemas Computacionales

LENGUAJES Y AUTOMATAS II PROFESOR: PR OFESOR: ING. MARIO VAZQUEZ VAZQUEZ JIMENEZ JIMEN EZ

1.4 Pila Semántica en un Analizador Sintáctico

Elaborado por: ERICK JERZAIN CARRILLO CALLEJA 

LENGUAJES Y AUTOMATAS AUTOMATAS II II

11320154

1

INTRODUCCIÓN

ANÁLISIS SEMÁNTICO Un analizador sintáctico (en inglés parser ) 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 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.

LENGUAJES Y AUTOMATAS II

2

Se compone de un conjunto de rutinas independientes, llamadas por los analizadores morfológico y sintáctico.

El análisis semántico utiliza como entrada el árbol sintáctico detectado por el análisis sintáctico para comprobar restricciones de tipo y otras limitaciones semánticas y preparar la generación de código.

En compiladores de un solo paso, las llamadas a las rutinas semánticas se realizan directamente desde el analizador sintáctico y son dichas rutinas las que llaman al generador de código. El instrumento más utilizado para conseguirlo es la gramática de atributos.

En compiladores de dos o más pasos, el análisis semántico se realiza independientemente de la generación de código, pasándose información a través de un archivo intermedio, que normalmente sintáctico

en

forma

linealizada

contiene

información

sobre

el

árbol

(para facilitar su manejo y hacer posible su

almacenamiento en memoria auxiliar).

En cualquier caso, las rutinas semánticas suelen hacer uso de una pila (la pila semántic a) que contiene la información semántica asociada a los operandos (y a veces a los operadores) en forma de registros semánticos. El problema es que no tenemos garantía de que los dos procedimientos sean equivalentes. El segundo puede dar overflow, el primero pérdida de precisión. La definición del lenguaje debe especificar estos casos.

Las transformaciones posibles se pueden representar mediante un grafo cuyos nodos son los tipos de datos y cada arco indica una transformación. Dado un operando de tipo A que se desea convertir al tipo B, se trata de encontrar una cadena de arcos que pase de A a B en el grafo anterior. Podría haber varios grafos, cada uno de los cuales se aplicará en diferentes condiciones, por ejemplo, uno para las asignaciones, otro para las expresiones, etc.

LENGUAJES Y AUTOMATAS II

3

PILA SEMÁNTICA EN UN ANALIZADOR SINTÁCTICO

Las rutinas semánticas suelen hacer uso de una pila (la pila semántica) que contiene la información semántica asociada a los operandos (y a veces a los operadores) en forma de registros semánticos.

Pila: Una colección de datos a los cuales se les puede acceder mediante un extremo,

que se conoce generalmente como tope.

Las Pilas tienen dos operaciones básicas:

•Push (para insertar un elemento) •Pop (para extraer un elemento). Su característica fundamental es que al extraer se obtiene siempre el último elemento que acaba de insertarse. Por esta razón también se conocen como estructuras de datos LIFO (del inglés Last In First Out). Una posible implementación mediante listas enlazadas sería insertando y extrayendo siempre por el principio de la lista.

Gracias a las pilas es posible el uso de la recursividad. La variable que llama al mismo procedimiento en el que está, habrá que guardarla así como el resto de variables de la nueva llamada, para a la vuelta de la recursividad ir sacándolas, esto es posible a la implementación de pilas.

Las pilas se utilizan en muchas aplicaciones que utilizamos con frecuencia. Por ejemplo, la gestión de ventanas en Windows (cuando cerramos una ventana siempre recuperamos la que teníamos detrás). Las pilas y colas son estructuras de datos que se utilizan generalmente para simplificar ciertas operaciones de programación. Estas estructuras pueden implementarse mediante arrays o listas enlazadas.

Si esto ocurre, en otras palabras si la pila está llena y se intenta insertar un nuevo

LENGUAJES Y AUTOMATAS II

4

elemento, se producirá un error conocido como desbordamiento – overflow.

Una posible solución a este tipo de inconvenientes consiste en definir pilas de gran tamaño, pero esto resultará ineficiente y costoso. No siempre es viable saber con exactitud el número de elementos a tratar, y siempre existe la posibilidad de que ocurra un error de desbordamiento.

 Análisis Sintáctico  Analiza el símbolo, la pila y el estado del autómata, produce las estructuras necesarias para la siguiente etapa y en el caso de compilación dirigida por la sintaxis invoca llamadas directas al analizador semántico y al generador de código. Escribe mensajes de errores y trata de limitar el efecto de estos errores.

El analizador sintáctico es un Autómata de pila que reconoce la estructura de una cadena de componentes léxicos.

 Analizador Sintáctico Descendente

Parten del axioma inicial de la gramática, se va descendiendo utilizando las derivaciones izquierdas, hasta llegar a construir la cadena analizada.

 Analizador Sintáctico 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.

Un Analizador Sintáctico Ascendente utiliza durante el análisis una pila. En esta va guardando datos que le permiten ir haciendo las operaciones de reducción que necesita para incorporar acciones semánticas como lo es construir el árbol sintáctico,

LENGUAJES Y AUTOMATAS II

5

es necesario incorporar a la pila del analizador sintáctico ascendente otra columna que guarde los atributos de los símbolos que se van analizando; para la integración total del sistema.

El Diseño Descendente es un método para resolver el problema que posteriormente se traducirá a un lenguaje comprensible por la computadora. Es el proceso mediante el cual un problema se descompone en una serie de niveles o pasos sucesivos de refinamiento. La metodología descendiente consiste en efectuar una relación entre las sucesivas etapas de estructuración de modo que se relacionen unas con otras mediante entradas y salidas de información.

 Al decir, Pila Semántica no se refiere a que hay varios tipos de Pila; hace referencia a que se debe programar única y exclusivamente en un solo lenguaje, es decir, no podemos mezclar código de C++ con Visual Basic; ya que se trabaja con los mismos comandos.

Ventajas: • Los problemas de integración entre los subsistemas son sumamente costosos y muchos de ellos no se solucionan hasta que la programación alcanza la fecha límite para la integración total del sistema. • Se necesita una memoria auxiliar que nos permita guardar los datos intermedios para poder hacer la comparación.

El objetivo teórico es construir un árbol de análisis sintáctico, este raramente se construye como tal, sino que las rutinas semánticas integradas van generando el árbol de Sintaxis abstracta. Se especifica mediante una gramática libre de contexto.

LENGUAJES Y AUTOMATAS II

6

Compatibilidad de tipos:

Durante la fase de análisis semántico, el compilador debe verificar que los tipos y valores asociados a los objetos de un programa se utilizan de acuerdo con la especificación del lenguaje.

 Además debe detectar conversiones implícitas de tipos para efectuarlas o insertar el código apropiado para efectuarlas así como almacenar información relativa a los tipos de los objetos y aplicar las reglas de verificación de tipos.

Bottom up. Es un principio de muchos años del estilo de programación que los

elementos funcionales de un programa no deben ser demasiado grandes. Si un cierto componente de un programa crece más allá de la etapa donde está fácilmente comprensible, se convierte en una masa de la complejidad que encubre errores tan fácilmente como una ciudad grande encubre a fugitivos.

Técnica top-down.  Este método consiste en dividir los problemas en subproblemas

más sencillos para conseguir una solución más rápida. El diseño descendente es un método para resolver el problema que posteriormente se traducirá a un lenguaje comprensible por la computadora.

LENGUAJES Y AUTOMATAS II

7

Bibliografía - Aho, Ullman, Sethi. 1998. "Compiladores, principios, técnicas y herramientas".  Addison Wesley. 324 paginas

- http://progsistemasf7.blogspot.mx/2010/10/pila-semantica-en-un-analizador.html - http://es.scribd.com/doc/49289218/ANTOLOGIA-DE-PRO-TODO - http://www.itescam.edu.mx/principal/sylabus/fpdb/recursos/r35533.PDF - http://www.uaeh.edu.mx/docencia/P_Presentaciones/icbi/asignaturaCap3PilasColas.pdf  - http://www.oocities.org/mx/amigos2365/anteproyecto.html - http://www.geocities.ws/apuntesitpn/dise/deacuatro.htm - http://progsistemasf7.blogspot.mx/2010/10/ulises-cruz-santiago.html - http://cursocompiladoresuaeh.blogspot.mx/2010/11/unidad-vi-analisis-semantico.html - http://www.uhu.es/francisco.moreno/gii_pl/docs/Tema_3.pdf 

LENGUAJES Y AUTOMATAS II

8

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF