Descargar

Generación de código en C# para un reconocedor sintáctico ascendente

Enviado por FRANCISCO RIOS ACOSTA


Partes: 1, 2

  1. Introducción
  2. Iniciando la aplicación Windows C#
  3. Clases lexico y autómata
  4. Prueba de funcionamiento del análizador léxico o analex
  5. Clases propuestas
  6. Atributos en las clases
  7. Constructores en las clases
  8. Métodos de la clase
  9. Métodos de la clase
  10. El programa RA-SLR
  11. Carpeta generar gramática
  12. Carpeta generación de código
  13. Inscrustación de código en la aplicación C#
  14. Puesta a punto de la aplicación Windows C#
  15. Salvando y cargando una gramática
  16. Limpiar la rejilla de ingreso de gramática
  17. Visualización de la colección canónica de items
  18. Visualización de la tabla de reconocimiento
  19. Restricción importante
  20. Simulando el reconocimiento de una sentencia

1. Introducción

En las secciones siguientes voy a escribir acerca de 4 cuestiones fundamentales :

• Aplicación Windows C# típica para un reconocedor sintactico ascendente.

Resúmen y prueba de la propuesta de clases R.A.F. para un analizador léxico. Construcción de un analizador léxico usando el código generado por SP-PS1.

• Mi propuesta de clases para un objeto reconocedor sintactico ascendente SLR, -propuesta R.A.F.-.

Atributos, propiedades y métodos.

• Presentación y manejo del programa RA-SLR que genera código de acuerdo a lo tratado en el libro del dragón –Ulman- sobre un reconocedor sintactico ascendente SLR, tomando en cuenta también a la propuesta de clases de R.A.F.

Este esfuerzo de programación del software RA-SLR, comenzó durante el periodo de clases del semestre AGO-DIC del 2007. Agradezco a todos mis alumnos de la materia "Programación de Sistemas" de dicho periodo, ya que ellos me tuvieron mucha paciencia durante el desarrollo de los algoritmos presentados aquí. Todos los algoritmos que desarrollé en clase fueron probados por mis alumnos –cuestión que les agradezco-, retroalimentandome los errores que fueron corregídos en equipo maestro-alumno. Al final del curso, tomé la tarea de programar la aplicación RA-SLR que genera el código C# de 4 clases : SintAscSLR, Item, Pila y SimbGram. La clase Pila la tomamos de los apuntes de mi clase "Estructura de Datos".

2. Iniciando la aplicación Windows C#

Iniciaremos con una aplicación típica. que permite la entrada de un texto para luego analizarlo léxicamente finalizando con un análisis sintactico usando un reconocedor ascendente SLR.

La interfase gráfica de la aplicación es la mostrada en la figura #2.1.

edu.red

Fig. No. 2.1 Interfase gráfica típica para un análisis sintactico – ascendente SLR.

De la figura #2.1 podemos observar que visualizamos las parejas token-lexema reconocidas y almacenadas en un objeto al que llamaremos oAnaLex. Este objeto analiza lexicamente al texto de entrada. El componente utilizado para la visualización es el dataGridView1.

El componente label2 es usado para visualizar un mensaje de análisis sintactico EXITOSO, o de otra forma un ERROR DE SINTAXIS.

La idea es que al hacer click sobre el componente button1 con la propiedad Text = "ANALISIS SINTACTICO", realicemos un análisis léxico y luego un análisis sintactico (en adelante supondré que es lo mismo análisis sintactico que reconocedor ascendente SLR).

El código para el botón button1 es –en negritas-:

edu.red

Notemos que usamos 2 objetos dentro del evento Click del button1 : oAnaLex y oAnaSintAscSLR. Estos 2 objetos son definidos como atributos de la forma Form1.

edu.red

Lo que sigue es definir las clases Lexico y SintAscSLR. La primera de ellas ya ha sido probada y la segunda, es tema que debemos desarrollar en este trabajo.

Desde luego que antes, tenemos que establecer que tipo de instrucciones vamos a reconocer con nuestro analizador sintactico ascendente. La gramática de contexto libre G=(Vt, Vn, S, O) que contiene la sintaxis de las sentencias, tiene los siguientes valores en sus componentes :

edu.red

edu.red

Recomiendo que el lector agrupe las producciones de la gramática. ¿Cuántas producciones tiene la gramática G?.

La gramática G reconoce sentencias de declaración de constantes, declaración de variables, de asignación, de entrada –lectura– y salida –visualización-. Todas estas sentencias existen en el ámbito acotado por una sentencia de inicio y una sentencia de fin. Un ejemplo es :

edu.red

El lector deberá de derivar a la derecha el ejemplo anterior, utilizando la gramática G.

La gramática G tiene restricciones y le corresponde al lector experimentarlas. La gramática sería mejor escribirla en notación Backus-Naur, sin embargo el alcance de estas propuestas no es suficiente.

He seleccionado mostrar los símbolos terminales Vts y los símbolos no terminales Vns, usando la notación de constante cadena –valor entre comillas-.

Además, el símbolo "$" lo incluí en los Vts aunque en realidad, este caracter no forma parte de los símbolos terminales.

Antes de hacer el análisis sintactico, debemos construir la clase Lexico (y la clase Automata) que permita definir al objeto oAnaLex en la aplicación sin error, que reconozca a todos los símbolos terminales –tokens- definidos en Vt, incluyendo al $.

3. Clases lexico y autómata

Los atributos de la clase Lexico son :

edu.red

A continuación describo a los atributos de la clase Lexico :

edu.red

edu.red

La clase Automata :

edu.red

Atributos de la clase Automata :

edu.red

Partes: 1, 2
Página siguiente