Está en la página 1de 3

Herramienta Visual para el

Estudio de las Gramáticas Formales

Presentación

Esta herramienta es el resultado de un Proyecto de Fin de Carrera en Ingeniería Informática. Se


desarrolló específicamente para ser utilizada por los estudiantes de la asignatura de Teoría de los
Lenguajes de Programación para ayudarles en el estudio de las Gramáticas Formáles y los Árboles
de Derivación.

Breve descripción de la herramienta

Esta herramienta ha sido programada en Java y probada en entornos Windows, Linux y Mac.
Aunque se ha detectado alguna mínima incompatibilidad en los entornos Mac.

Para su ejecución se puede abrir una ventana de comandos y ejecutar

java ­jar HVEGF.jar

tras lo cual aparecerán tres ventanas:

1. Ventana de Símbolos NO TERMINALES: en ella podremos definir los símbolos no


terminales de nuestra gramática.
2. Ventana de Símbolos TERMINALES: en ella podremos definir los símbolos terminales de
nuestra gramática.
3. Ventana de NUEVA GRAMÁTICA: en ella podremos definir las reglas de producción de
nuestra gramática siguiendo la notación BNF. Si alguna regla tiene varias posibilidades,
cada una de ellas deberá ser definida como una regla independiente.
4. Existe una cuarta ventana que será accesible cuando tengamos una gramática totalmente
definida en la herramienta y es la que nos permitirá realizar de forma visual el árbol
sintáctico de una frase del lenguaje generado por la gramática.

Ejemplo de uso

Por ejemplo consideremos la siguiente gramática:

<numero> ::= <parte_entera> | <parte_entera> . <parte_decimal>


<parte_entera> ::= <digito_no_0> <secuencia_digitos> | <digito>
<parte_decimal> ::= <secuencia_digitos> <digito_no_0> | <digito_no_0>
<secuencia_digitos> ::= <secuencia_digitos> <digito> | <digito>
<digito> = 0 | <digito_no_0>
<digito_no_0> ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

cuyo símbolo inicial es <numero>

Para definir la gramática en nuestra herramienta primero deberemos introducir los símbolos
terminales y no terminales en sus correspondientes ventanas:

La propia herramienta se encarga de poner los símbolos NO Terminales en mayúsculas y encerrados


entre corchetes. Los botones de acción tienen asociado un tooltip que muestra su cometido cuando
dejamos el puntero del ratón sobre ellos. Estos botones nos ofrecen la posibilidad de borrar un
símbolo, ordenar alfabéticamente, limpiar la entrada, etc.

Una vez estén definidos todos los símbolos de la gramática, pasaremos a definir todas las reglas de
producción de nuestra gramática. Para ello bastará con hacer doble click sobre el símbolo que
queramos introducir, teniendo en cuenta que el antecedente de las reglas siempre consiste en un
único símbolo NO Terminal.

En nuestro ejemplo, las reglas gramaticales ya introducidas tendrían el siguiente aspecto:


En esta ventana no se ofrece la posibilidad de ordenar las producciones de forma automática, ya que
se toma el NO Terminal que aparece en el antecedente de la primera regla como el símbolo inicial
de la gramática.

Una vez se tenga una gramática definida se puede grabar para volver a cargarla con posterioridad.

Cuando tengamos una gramática totalmente definida, la aplicación ofrece la posibilidad de dibujar
los árboles sintácticos de frases pertenecientes al lenguaje generado por la gramática. Mediante una
derivación por la izquierda se presentan las posibles producciones gramaticales cuyo antecedente
sea el NO Terminal más a la izquierda que aún tenemos pendiente

Por ejemplo, podemos considerar la siguiente secuencia de producciones:

<numero> → <parte_entera> . <parte_decimal>


<parte_entera> → <digito_no_0> <secuencia_digitos>
<digito_no_0> → 8
<secuencia_digitos> → <digito>
<digito> → <digito_no_0>
<digito_no_0> → 3
<parte_decimal> → <digito_no_0>
<digito_no_0> → 1

Si elegimos esas producciones en la herramienta HVEGF, se dibuja el siguiente árbol:

que nos indica que la frase derivada es 83.1

También podría gustarte