Você está na página 1de 12

1 Vol. 1 Julio-Dic 2013 www.iiies.org/reedies Copyright 2013 AIIES.

AC

Revista Electrnica de Investigacin en Educacin Superior
Vol. 1, Nm. 1, 2013
Construccin de Traductores con Gold Parser Builder
Surez Amndola Rosario de Ftima
Instituto Tecnolgico de Campeche
rosario.suarez@itcampeche.edu.mx.

Gonzlez Cuevas Cristian Rey
Instituto Tecnolgico de Campeche
crgcgonzalez@gmail.com

Ordaz Palma Fanny Stephanie,
Instituto Tecnolgico de Campeche
fanny866@hotmail.com


Resumen informativo
El diseo y desarrollo de traductores es rea importante de formacin para los ingenieros en sistemas
computacionales, sin embargo desde un punto de vista pedaggico hacerla atractiva para los estudiantes no es
una tarea fcil para el docente, debido a que los estudiantes encuentran bastante difcil adquirir y aprehender
estos conceptos para aplicarlos en la creacin de su propio traductor, en ocasiones porque afortunadamente
existen muchas herramientas de software que ayudan con esta labor ofreciendo un apoyo a los docentes que
imparten estas asignaturas. Este artculo presenta a la herramienta Gold Parser Builder como un software para
la construccin de los traductores porque permite e integra diferentes conceptos tericos asociados con el
tema. El estudiante puede definir un traductor de manera interactiva, pudiendo simular2 y rastrear su
comportamiento a travs de diferentes puntos de vista.
Palabras claves.
Traductores, Software de Sistemas, prctica educativa.
Introduccin
La Asignatura de Lenguajes y Autmatas 1 y 2 son de gran importancia en el plan de estudios de la carrera de
Ingeniera en Sistemas Computacionales de los Institutos Tecnolgicos, lo anterior porque debe el ISC debe
poseer la capacidad de solucionar de manera eficiente los problemas con el proceso de informacin, para ello
es de gran utilidad el conocer los conceptos relacionados con la teora y prctica de los lenguajes de
programacin, porque llega a conocer el mundo abstracto de la computadora en el manejo de los diferentes
dispositivos a bajo nivel, sin embargo estos temas presentan un grado de complejidad, los cuales se hacen
difciles de aprender y de ensear, en parte porque incluyen muchos conceptos abstractos y complejos, por lo
tanto los docentes que imparten estas asignaturas deben realizar actividades que sean innovadoras e inclusive
motivadoras, con el fin de que los estudiantes se puedan comprometan con la construccin de sus
conocimientos y llevarlos a la prctica al realizar la creacin de su propio traductor. Pero esta tarea puede
resultar algo problemtica como se mencion anteriormente, debido a que se utiliza un lenguaje demasiado
tcnico y formal, que en ocasiones se deben tener conocimientos previos muy slidos de otras asignaturas
tales como las matemticas discretas, estructuras de datos, arquitectura de computadoras y lenguajes de
interfaz entre otras, otra barrera a la que se pueden enfrentar los estudiantes en estas asignaturas es que como
hemos estado mencionando los conceptos son demasiado abstractos, el proceso de asimilacin y acomodacin
de los nuevos conocimientos puede resultar algo complejo es importante que estudiante posea una perspectiva
matemtica acompaada de la perspectiva computacional y algortmica. Otro problema es el de la
comunicacin, pero esta es entre la computadora y la persona, aunque esta comunicacin se ha mejorado con
los nuevos software, en especial los que poseen un ambiente grfico, en ocasiones se deben utilizar comandos
en modo de consola, dificultando el entendimiento entre humano mquina.
Para poder entender mejor cmo funciona un traductor, es importante realizar la actividad de desarrollar uno,
al trmino de las dos asignaturas, este traductor debe pasar por sus diversas etapas (anlisis y sntesis), este

2 Vol. 1 Julio-Dic 2013 www.iiies.org/reedies Copyright 2013 AIIES. AC

Revista Electrnica de Investigacin en Educacin Superior
Vol. 1, Nm. 1, 2013
artculo es una experiencia educativa para desarrollar un traductor utilizando el Gold Parser Builder, para ello
abordaremos el tema de la siguiente manera, en primer lugar hablaremos de la teora de traductores y de la
fases que se utilizan para la construccin del mismo. Seguidamente se hablar de la metodologa utilizada y
de los resultados que se obtuvieron al utilizar el software de apoyo.
Traductores.
Un traductor es un software que tiene como entrada un programa fuente escrito en un lenguaje de alto o bajo
nivel y su salida es un programa objeto equivalente que puede ser en un lenguaje de alto o bajo nivel, este
software est escrito en un lenguaje de implementacin denominado host, que puede ser desde un lenguaje de
alto nivel a un lenguaje mquina (Cueva Lovelle, 1998). Segn Terrence Pratt y Marvin Zelkowitz (1998)
existen varios tipos especializados de traductores, entre los cuales podemos mencionar:
Ensambladores (Assembler) su lenguaje de entrada es de bajo nivel llamado ensamblador
(Assembly) y su lenguaje de salida es el lenguaje mquina, generalmente una instruccin en lenguaje
ensamblador corresponde a una instruccin en lenguaje mquina
Compiladores. (Compiler) su lenguaje de entrada es un lenguaje de alto nivel y su lenguaje de salida
es uno de bajo nivel que se aproxima al lenguaje mquina de una computadora real, el tiempo que se
tardan en realizar esta traduccin se le denomina tiempo de compilacin. Y el tiempo en que se est
ejecutando este cdigo se le denomina tiempo de ejecucin.
Cargadores o editores de vnculos. Tambin se les denomina ligadores (linker) Los programas
objetos para ser ejecutados por la computadora es necesario que stos se carguen en la memoria, para
ello es necesario que al cdigo objeto generado por los compiladores o ensambladores utilicen un
localidades reubicables, que al momento de estar en la memoria stas adquieran posiciones de
memorias relativas.
Preprocesadores o macroprocesadores. Son formas ampliadas de lenguajes de alto nivel que se
transforman en la forma estndar del mismo lenguaje.
En la Figura 1 podemos observar cmo interactan los diferentes traductores

Figura 1. Interaccin de los diferentes traductores
Cabe mencionar que los tipos de traductores que mencionamos aqu no son los nicos, sin embargo para
trminos de este tema, slo mencionaremos a ellos. Como podemos observar desde que se genera el programa
ste se realiza en lenguaje fuente llamado Lenguaje de programacin (LP), los cuales son una notacin o
conjunto de smbolos y caracteres combinados entre s de acuerdo con una sintaxis ya definida que posibilita
la transmisin de instrucciones a la Unidad Central de Proceso de una computadora (Quero Catalinas,
2002) en otras palabras podemos decir que cada computadora, segn su diseo puede ejecutar un cierto
nmero de instrucciones elementales escritas en su propio lenguajes al que se denomina lenguaje mquina, sin
embargo para poder comunicarse con la computadora se disearon lenguajes de alto nivel porque son ms
fciles de entender y utilizar para los programadores, sin embargo para que puedan ser ejecutados por la
computadora es necesario que sean traducidos a su propio lenguaje mquina, para ello se utilizan los
traductores. (Rodrguez Sala, Santamara Arana, Rebasa Dolado, & Martnez Bonastre, 2003)
Para poder disear lenguajes de programacin es necesario conocer cul es su estructura interna, para ello el
estudio de los lenguajes se divide en el anlisis de la estructura de las frases (gramtica) y de su significado
(semntica). La gramtica se puede analizar la forma que toman las palabras (morfologa) y su combinacin
para formar frases correctas (sintaxis) en los lenguajes naturales podemos tambin analizar las propiedades
del lenguaje hablado. Por lo tanto ste ltimo punto no es aplicable a los lenguajes de programacin,
conocidos. (Alfonseca Moreno, De la Cruz Echeanda, Ortega de la Puente , & Pulido Caabate, 2006). Los
ambientes modernos sustentan no slo el proceso de traduccin, sino tambin ofrecen un entorno para el
desarrollo de los programas incluyendo un sistema de edicin, generalmente dirigido por la sintaxis y un
sistema de depuracin, sin embargo stos son apoyos y no forman parte del proceso de traduccin.
Lenguaje
Fuente
Lenguaje
Ensamblador
Compilador
Cdigo objeto
Re-localizable
Ensamblador
Cdigo en memoria
ejecutndose
Cargador

3 Vol. 1 Julio-Dic 2013 www.iiies.org/reedies Copyright 2013 AIIES. AC

Revista Electrnica de Investigacin en Educacin Superior
Vol. 1, Nm. 1, 2013
Cmo mencionamos las estructura de un lenguaje nos encontramos las gramticas, las cuales se utilizan para
especificar la sintaxis, las gramticas tienen cuatro componente: un conjunto de smbolos terminales, un
conjunto de smbolos no terminales, un conjunto de producciones y la designacin de una de los no terminales
como smbolo inicial (Aho, Lam, Sethi, & Ullman, 2008).
Proceso de Traduccin
El proceso de traduccin se divide en dos grandes fases, la fase de anlisis y la fase de sntesis, en la primera
fase se realizan los tres tipos de anlisis: el lxico, sintctico y semntico, lo anterior para determinar que las
reglas si el programa est bien escrito de acuerdo a las reglas sintcticas y semnticas definidas por el
lenguajes. La Fase de sntesis realiza la generacin de cdigo objeto y la optimizacin del mismo, cabe aclarar
que ste cdigo se genera siempre y cuando no existan errores en la fase anterior, con el fin del que el
programa se pueda ejecutar eficientemente. (Pratt & Zelkowitz, 1998) Por lo que podemos decir que las tareas
bsicas de cualquier traductor son: (Teufel, Schmidt, & Teufel, 1995)
El anlisis lxico
El anlisis sintctico
El anlisis semntico
La generacin de cdigo.
En este ltimo punto se puede mejorar cuando se incluyen los pasos de generacin de cdigo intermedio y la
optimizacin. En la Figura 2 podemos ver los elementos que intervienen en el proceso de traduccin.


Figura 2 Proceso de Traduccin
El analizador lxico lee el texto del programa fuente carcter a carcter y genera los componentes lxicos
(tokens). El agrupamiento de los caracteres en tokens depende del lenguaje que se vaya a traducir. Los tokens
pueden ser de dos tipos, los especficos y los no especficos, su diferencia radica en si son conocidos o no.
Una vez que se tienen los componentes lxicos, stos sirven de entrada para el analizador sintctico, al que
en ocasiones se le conoce como parser, su funcin consiste en procesar los tokens suministrados por la etapa
anterior, comprobar que estn ordenados de acuerdo a la sintaxis previamente establecida para generar el
rbol de anlisis sintctico. En el analizador semntico se revisan el significado de los que se est leyendo
para determinar si tienen sentido. En la generacin de cdigo (intermedio) se representa de una manera
Programa Fuente
Anlisis Lxico
Anlisis Sintctico
Anlisis Semntico
Generacin de Cdigo
Programa Objeto
Optimizacin
Generacin de Cdigo
Intermedio
Componentes lxicos
rbol de anlisis sintctico
Cdigo Intermedio
Cdigo Intermedio y optimizado
Tablas de Smbolos
Otras Tablas
Gestor de
Errores
rbol semntico terico

4 Vol. 1 Julio-Dic 2013 www.iiies.org/reedies Copyright 2013 AIIES. AC

Revista Electrnica de Investigacin en Educacin Superior
Vol. 1, Nm. 1, 2013
formalizada las operaciones de acorde al lenguaje mquina con el que se est trabajando. En la optimizacin
se realiza el proceso de reutilizar las direcciones temporales con el fin de mejorar el consumo de memoria y
otros recursos. La generacin de cdigo final es un proceso final, porque pasa las instrucciones al lenguaje
ensamblador de la mquina. La tabla de smbolos y otras (la tabla de smbolos) son parte importante del
proceso porque suministran y proporcionan informacin que se utiliza en las diversas fases. El gestor de
errores no ofrece apoyo en el momento en que surja algn error en cualquiera de las fases, porque muestra el
mensaje error y detiene el proceso de traduccin. (Ruiz Cataln , 2010)
Herramientas para la Construccin de un Traductor
El uso de herramientas para la construccin de traductores en la materias de Autmatas y Lenguajes en la
carrera de Ingeniera en Sistemas Computacionales, es parte del proceso de enseanza aprendizaje como un
material didctico que al igual que cualquier desarrollo de software stas ofrecen beneficios, adems de una
plataforma que contiene apoyan en la produccin de los componentes ocultando detalle de algoritmos de
generacin, entre ellos podemos mencionar los generadores de analizadores sintcticos, escneres y de
cdigo, as como los motores de traduccin orientados a la sintaxis y el de anlisis de flujos de datos (Aho,
Lam, Sethi, & Ullman, 2008). El Gold Parser Builder (GPB) fue desarrollado por Devin Cook implementado
un LALR (Look Ahead Left to Right) y el AFD (Autmata finito Determinstico) para la construccin de
proyectos de analizadores o versiones de un lenguaje de programacin, adems puede ser implementada en
varios de ellos. Se compone de dos elementos el constructor y el motor, el primero construye las tablas de
anlisis sintctico y la segunda las utiliza. Adems, se realiza una comprobacin sintctica cuando una regla
se define gracias a las caractersticas que proporciona el propio GPB. Para escribir la gramtica de los
lenguajes que genera utiliza la Gramtica BNF, donde a partir de un anlisis de la misma crea el archivo que
la contiene en la tabla de smbolos en un archivo (CGT) el cual ser utilizado por un motor de compilacin.
Este archivo CGT genera un esqueleto para generar un una clases de analizador personalizado que acta una
plantilla que sirve para examinar los programas fuentes con el fin de satisfacer la gramtica BNF.
En este orden de ideas podemos decir que para generar los traductores en GLP. El primer paso es escribir una
gramtica para el lenguaje de implementacin. Esta descripcin se realiza en el editor que se construye en el
Generador de GLP. Cabe aclarar que para esto no se requiere ningn tipo de codificacin. Seguidamente se
realiza un anlisis por el generador, en este proceso se construyen como hemos mencionado las tablas de
anlisis sintctico LALR y DFA, donde se verifican que no presenten ambigedades o problemas con la
gramtica. Despus de que se analizan se guarda en un archivo que ser utilizados cuando se leen por el motor
de anlisis. El motor se puede implementar en diferentes lenguajes de programacin. (Goldparser , 2002)
Metodologa
La metodologa para desarrollar traductores es un caso particular de la Ingeniera de Software, para ello es
necesario generar la fase de anlisis, la cual est constituida por la definicin de los requisitos del lenguaje
fuente y el lenguaje objeto, por medio de las especificaciones para realizar el anlisis lxico, sintctico y
semntico. El segundo paso es el diseo preliminar donde se definen las caractersticas de los mdulos que
van a componer el sistema, en este caso particular los tres analizadores, la tabla de smbolos, la tabla de tipos,
el tratamiento de errores y el generador de cdigo, su optimizacin e interpretacin. El siguiente paso es el
diseo detallado donde se especifican las operaciones que se realizaran en cada mdulo. El ltimo paso es la
implementacin donde se implementan las clases, los mtodos tanto pblicos como privados. Como podemos
ver son pasos muy similares a los del GLP
Uno de los primeros pasos que se realiz al desarrollar el traductor es la determinacin de la gramtica.
Los caracteres utilizables para el manejo de la gramtica en el programa son los siguientes:
! # $ % & ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I JK L M N O P Q R S T U V W
X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~
Se establecieron tambin caracteres especiales tales como: Espacio en blanco. Espacio en blanco por
tabulador.
Se determin la tabla de smbolos, quedando de la siguiente manera:

5 Vol. 1 Julio-Dic 2013 www.iiies.org/reedies Copyright 2013 AIIES. AC

Revista Electrnica de Investigacin en Educacin Superior
Vol. 1, Nm. 1, 2013
Cdigo Smbolo Descripcin Cdigo Smbolo Descripcin
0 (EOF) Fin de archivo 48 Romper Descriptivo
1 (Error) Smbolo de error 49 Si Descriptivo
2 Comment Ruido 50 'signo_comparacion' Descriptivo
3 NewLine Ruido 51 'signo_logico' Descriptivo
4 Whitespace Ruido 52 Sino Descriptivo
5 '*/' Fin de grupo lxico 53 'sino_si' Descriptivo
6 '/*' Inicio de grupo lxico 54 Switch Descriptivo
7 '+ "' Descriptivo 55 <Asignar> No terminal
8 '-' Descriptivo 56 <Caso> No terminal
9 '!' Descriptivo 57 <CasoDefault> No terminal
10 '*' Descriptivo 58 <Casos> No terminal
11 '/' Descriptivo 59 <Comparacion> No terminal
12 '_cadena' Descriptivo 60 <Comparaciones> No terminal
13 '_caracter' Descriptivo 61 <Condicion> No terminal
14 '_entero' Descriptivo 62 <Declaracion> No terminal
15 '_logico' Descriptivo 63 <Declaraciones> No terminal
16 '_real' Descriptivo 64 <Do-While> No terminal
17 '+' Descriptivo 65 <Expresion> No terminal
18 Abrepar Descriptivo 66 <For> No terminal
19 Cadena Descriptivo 67 <Funcion> No terminal
20 Carcter Descriptivo 68 <Funciones> No terminal
21 Caso Descriptivo 69 <Identificadores> No terminal
22 Cierrapar Descriptivo 70 <Imprimir> No terminal
23 Coma Descriptivo 71 <Incremento> No terminal
24 Continuar Descriptivo 72 <Leer> No terminal
25 Dospuntos Descriptivo 73 <LlamarFuncion> No terminal
26 Entero Descriptivo 74 <MultExp> No terminal
27 Fin Descriptivo 75 <NegateExp> No terminal
28 finPrincipal Descriptivo 76 <NombreFuncion> No terminal
29 Funcin Descriptivo 77 <Param> No terminal
30 Hacer Descriptivo 78 <Params> No terminal
31 Identicador Descriptivo 79 <PosCondiciones> No terminal
32 Identificador Descriptivo 80 <Programa> No terminal
33 Igual Descriptivo 81 <Sentencia> No terminal
34 Imprimir Descriptivo 82 <Sentencias> No terminal
35 Incrementar Descriptivo 83 <Sigcaso> No terminal
36 inicioPrincipal Descriptivo 84 <Sino> No terminal
37 Leer Descriptivo 85 <Sinosi> No terminal
38 Lgico Descriptivo 86 <Switch> No terminal
39 Masmas Descriptivo 87 <Tipos> No terminal
40 Menosmenos Descriptivo 88 <ValLiterales> No terminal
41 Mientras Descriptivo 89 <ValLogicos> No terminal
42 Nombre Descriptivo 90 <ValNumericos> No terminal
43 Opasigna Descriptivo 91 <Valores> No terminal
44 Para Descriptivo 92 <ValoresLiterales> No terminal
45 Predeterminado Descriptivo 93 <Value> No terminal
46 Puntocoma Descriptivo 94 <While> No terminal
47 Real Descriptivo
Se generan las reglas sintcticas en el Gold Parser Builder, cmo podemos observar, siguiente estructura de
acuerdo a la gramtica BNF.
{StringChar} = {Printable} - ["'']
{IDinicio} = {Letter} + [_]
{IDcontinuacion} = {Alphanumeric} + [_]
Comment Line = '//'
Comment Start = '/*'
Comment End = '*/'
identificador = {IDinicio}+ | {IDinicio}{IDcontinuacion}+
_entero = {Number}+
_real = {Number}+'.'{Number}+
_caracter = ''{StringChar}''
_cadena = '"'{StringChar}*'"'
_logico = 'true' | 'false'

6 Vol. 1 Julio-Dic 2013 www.iiies.org/reedies Copyright 2013 AIIES. AC

Revista Electrnica de Investigacin en Educacin Superior
Vol. 1, Nm. 1, 2013
entero = 'entero'
real = 'real'
caracter = 'caracter'
cadena = 'cadena'
logico = 'logico'
nombre = 'Nombre'
dospuntos = ':'
coma = ','
puntocoma = ';'
igual = '='
inicioPrincipal = 'Inicio Principal'
finPrincipal = 'Fin Principal'
imprimir = 'imprimir' | 'imprimirln'
leer = 'leer'
abrepar = '('
cierrapar = ')'
opasigna = '<-'
si = 'si'
sino_si = 'sino_si'
sino = 'sino'
hacer = 'hacer'
fin = 'fin'
switch = 'switch'
caso = 'caso'
romper = 'romper'
continuar = 'continuar'
mientras = 'mientras'
para = 'para'
masmas = '++'
menosmenos = '--'
incrementar = 'incrementar'
funcion = 'funcion'
signo_comparacion = '<' | '>' | '<=' | '>=' | '=='
signo_logico = 'and' | 'or'
"Name" = 'Traductor'
"Author" = 'Ordaz.Arcila.Gonzalez'
"Version" = '1.2'
"About" = 'Gramatica empleada'
"Case Sensitive" = 'True'
"Start Symbol" = <Programa>
<Programa> ::= nombre dospuntos _cadena <Declaraciones> inicioPrincipal <Sentencias> finPrincipal
<Funciones>
<Declaraciones> ::= | <Declaracion> | <Declaraciones><Declaracion>
<Declaracion> ::= <Tipos> dospuntos <Identificadores>
<Identificadores> ::= identificador | <Identificadores> coma identificador
<Tipos> ::= entero | real | cadena | logico | caracter
<Sentencias> ::= | <Sentencia> | <Sentencias><Sentencia>
<Sentencia> ::= <Declaracion> | <Imprimir> | <Asignar> | <Leer> | <Condicion> | <Switch>| <While> |
<Do-While>
| <For> | <Llamar Funcion>
<Valores> ::= <Val Literales> | <Val Numericos> | _logico
<Val Literales> ::= _caracter | _cadena
<Val Numericos> ::= _entero | _real
<Val Logicos> ::= _logico
<Valores Literales> ::= <Val Literales> | <Valores Literales> '+' <Val Literales>
<Expresion> ::= <Expresion> '+' <Mult Exp> | <Expresion> '-' <Mult Exp> | <Mult Exp>
<Mult Exp> ::= <Mult Exp> '*' <Negate Exp>
| <Mult Exp> '/' <Negate Exp> | <Negate Exp>
<Negate Exp> ::= '-'<Value> | <Value>
<Value> ::= abrepar <Expresion> cierrapar | <Val Numericos> | identificador
<Imprimir> ::= imprimir abrepar cierrapar | imprimir abrepar <Valores Literales> cierrapar
| imprimir abrepar <Val Numericos> cierrapar | imprimir abrepar identificador cierrapar

7 Vol. 1 Julio-Dic 2013 www.iiies.org/reedies Copyright 2013 AIIES. AC

Revista Electrnica de Investigacin en Educacin Superior
Vol. 1, Nm. 1, 2013
| imprimir abrepar <Expresion> cierrapar
<Asignar> ::= identificador opasigna <Val Literales> | identificador opasigna <Expresion>
<Leer> ::= leer identificador
<Comparacion> ::= <Expresion> signo_comparacion <Expresion>
| abrepar <Expresion> signo_comparacion <Expresion> cierrapar | <Val Logicos>
| abrepar <Val Logicos> cierrapar | abrepar <Comparacion> cierrapar
<Comparaciones> ::= <Comparacion> | <Comparaciones> signo_logico <Comparacion>
| <Comparacion> signo_logico <Comparaciones> | '!'<Comparaciones>
<Condicion> ::= si abrepar <Comparaciones> cierrapar hacer <Sentencias> <Pos Condiciones> <Sino> fin
<Sino si> ::= sino_si abrepar <Comparaciones> cierrapar hacer <Sentencias>
<Pos Condiciones> ::= | <Sino si> | <Pos Condiciones><Sino si>
<Sino> ::= | sino hacer <Sentencias>
<Switch> ::= switch abrepar <Expresion> cierrapar hacer <Casos> <Caso Default> fin
<Casos> ::= | <Casos><Caso>
<Caso> ::= caso <Expresion> dospuntos <Sentencias> <Sigcaso>
<Sigcaso> ::= romper | continuar
<Caso Default> ::= | predeterminado dospuntos <Sentencias> <Sigcaso>
<While> ::= mientras abrepar <Comparaciones> cierrapar hacer <Sentencias> fin
<Do-While> ::= hacer <Sentencias> fin mientras abrepar <Comparaciones>
<For> ::= para <Asignar> mientras <Comparaciones> incrementar <Incremento> hacer <Sentencias> fin
<Incremento> ::= identificador masmas | identicador menosmenos | <Asignar>
<Llamar Funcion> ::= identificador abrepar <Identificadores> cierrapar
<Funciones> ::= | <Funcion> | <Funciones><Funcion>
<Funcion> ::= <Nombre Funcion> hacer <Sentencias> fin
<Nombre Funcion> ::= funcion identificador abrepar <Params> cierrapar
<Params> ::= | <Param> | <Params> coma <Param>
<Param> ::= <Tipos> dospuntos identificador
El esqueleto generado por el Gold Parser Builder fue el siguiente, ponen algunos fragmentos debido al tamao
del programa
using System;
using System.IO;
using System.Runtime.Serialization;
using com.calitha.goldparser.lalr;
using com.calitha.commons;
using System.Windows.Forms;
using System.Linq;
using System.Collections;
namespace com.calitha.goldparser
{ [Serializable()]
public class SymbolException : System.Exception {
public SymbolException(string message) : base(message) { }
public SymbolException(string message, Exception inner) : base(message, inner) { }
protected SymbolException(SerializationInfo info, StreamingContext context) : base(info, context) { } }
[Serializable()]
public class RuleException : System.Exception {
public RuleException(string message) : base(message) { }
public RuleException(string message, Exception inner) : base(message, inner) { }
protected RuleException(SerializationInfo info, StreamingContext context) : base(info, context) { } }
enum SymbolConstants : int {
SYMBOL_EOF = 0, // (EOF)
SYMBOL_ERROR = 1, // (Error)
SYMBOL_COMMENT = 2, // Comment
SYMBOL_NEWLINE = 3, // NewLine
SYMBOL_WHITESPACE = 4, // Whitespace
SYMBOL_TIMESDIV = 5, // '*/'
SYMBOL_DIVTIMES = 6, // '/*'
SYMBOL_DIVDIV = 7, // '//'
SYMBOL_MINUS = 8, // '-'
SYMBOL_EXCLAM = 9, // '!'
SYMBOL_TIMES = 10, // '*'

8 Vol. 1 Julio-Dic 2013 www.iiies.org/reedies Copyright 2013 AIIES. AC

Revista Electrnica de Investigacin en Educacin Superior
Vol. 1, Nm. 1, 2013
SYMBOL_DIV = 11, // '/'
SYMBOL__CADENA = 12, // '_cadena'
SYMBOL__CARACTER = 13, // '_caracter'
SYMBOL__ENTERO = 14, // '_entero'
SYMBOL__LOGICO = 15, // '_logico'
SYMBOL__REAL = 16, // '_real'
SYMBOL_PLUS = 17, // '+'
SYMBOL_ABREPAR = 18, // abrepar
SYMBOL_CADENA = 19, // cadena
SYMBOL_CARACTER = 20, // caracter
SYMBOL_CASO = 21, // caso
SYMBOL_CIERRAPAR = 22, // cierrapar
SYMBOL_COMA = 23, // coma
SYMBOL_CONTINUAR = 24, // continuar
SYMBOL_DOSPUNTOS = 25, // dospuntos
SYMBOL_ENTERO = 26, // entero
SYMBOL_FIN = 27, // fin
SYMBOL_FINPRINCIPAL = 28, // finPrincipal
SYMBOL_FUNCION = 29, // funcion
SYMBOL_HACER = 30, // hacer
SYMBOL_IDENTICADOR = 31, // identicador
SYMBOL_IDENTIFICADOR = 32, // identificador
SYMBOL_IGUAL = 33, // igual
SYMBOL_IMPRIMIR = 34, // imprimir
SYMBOL_INCREMENTAR = 35, // incrementar
SYMBOL_INICIOPRINCIPAL = 36, // inicioPrincipal
SYMBOL_LEER = 37, // leer
SYMBOL_LOGICO = 38, // logico
SYMBOL_MASMAS = 39, // masmas
SYMBOL_MENOSMENOS = 40, // menosmenos
SYMBOL_MIENTRAS = 41, // mientras
SYMBOL_NOMBRE = 42, // nombre
SYMBOL_OPASIGNA = 43, // opasigna
enum RuleConstants : int {
RULE_PROGRAMA_NOMBRE_DOSPUNTOS__CADENA_INICIOPRINCIPAL_FINPRINCIPAL = 0, //
<Programa> ::= nombre dospuntos '_cadena' <Declaraciones> inicioPrincipal <Sentencias> finPrincipal <Funciones>
RULE_DECLARACIONES = 1, // <Declaraciones> ::=
RULE_DECLARACIONES2 = 2, // <Declaraciones> ::= <Declaracion>
RULE_DECLARACIONES3 = 3, // <Declaraciones> ::= <Declaraciones> <Declaracion>
RULE_DECLARACION_DOSPUNTOS = 4, // <Declaracion> ::= <Tipos> dospuntos <Identificadores>
RULE_IDENTIFICADORES_IDENTIFICADOR = 5, // <Identificadores> ::= identificador
RULE_TIPOS_ENTERO = 7, // <Tipos> ::= entero
RULE_TIPOS_REAL = 8, // <Tipos> ::= real
RULE_TIPOS_CADENA = 9, // <Tipos> ::= cadena
RULE_TIPOS_LOGICO = 10, // <Tipos> ::= logico
RULE_TIPOS_CARACTER = 11, // <Tipos> ::= caracter
RULE_SENTENCIAS = 12, // <Sentencias> ::=
RULE_SENTENCIAS2 = 13, // <Sentencias> ::= <Sentencia>
RULE_SENTENCIAS3 = 14, // <Sentencias> ::= <Sentencias> <Sentencia>
RULE_SENTENCIA = 15, // <Sentencia> ::= <Declaracion>
RULE_SENTENCIA2 = 16, // <Sentencia> ::= <Imprimir>
RULE_SENTENCIA3 = 17, // <Sentencia> ::= <Asignar>
RULE_SENTENCIA4 = 18, // <Sentencia> ::= <Leer>
RULE_SENTENCIA5 = 19, // <Sentencia> ::= <Condicion>
RULE_SENTENCIA6 = 20, // <Sentencia> ::= <Switch>
RULE_SENTENCIA7 = 21, // <Sentencia> ::= <While>
RULE_SENTENCIA8 = 22, // <Sentencia> ::= <Do-While>
RULE_SENTENCIA9 = 23, // <Sentencia> ::= <For>
RULE_SENTENCIA10 = 24, // <Sentencia> ::= <Llamar Funcion>
RULE_VALORES = 25, // <Valores> ::= <Val Literales>
RULE_VALORES2 = 26, // <Valores> ::= <Val Numericos>
RULE_VALORES__LOGICO = 27, // <Valores> ::= '_logico'

9 Vol. 1 Julio-Dic 2013 www.iiies.org/reedies Copyright 2013 AIIES. AC

Revista Electrnica de Investigacin en Educacin Superior
Vol. 1, Nm. 1, 2013
public class MyParser {
private LALRParser parser;
private static String resultado;
private static String declaraciones = "";
private static String identificadores = "";
private static String posiblesCondiciones = "";
private static String casos = "";
public MyParser(string filename)
{ FileStream stream = new FileStream(filename,
FileMode.Open,
FileAccess.Read,
FileShare.Read);
Init(stream);
stream.Close();
resultado = ""; }
public String Resultado
{ get { return resultado; }
Set { resultado = value; } }
public MyParser(string baseName, string resourceName)
{ byte[] buffer = ResourceUtil.GetByteArrayResource(
System.Reflection.Assembly.GetExecutingAssembly(),
baseName, resourceName);
MemoryStream stream = new MemoryStream(buffer);
Init(stream);
stream.Close(); }
public MyParser(Stream stream)
{ Init(stream); }
private void Init(Stream stream) {
CGTReader reader = new CGTReader(stream);
parser = reader.CreateNewParser();
parser.TrimReductions = false;
parser.StoreTokens = LALRParser.StoreTokensMode.NoUserObject;
parser.OnReduce += new LALRParser.ReduceHandler(ReduceEvent);
parser.OnTokenRead += new LALRParser.TokenReadHandler(TokenReadEvent);
parser.OnAccept += new LALRParser.AcceptHandler(AcceptEvent);
parser.OnTokenError += new LALRParser.TokenErrorHandler(TokenErrorEvent);
parser.OnParseError += new LALRParser.ParseErrorHandler(ParseErrorEvent); }
public void Parse(string source)
{ parser.Parse(source); }
private void TokenReadEvent(LALRParser parser, TokenReadEventArgs args)
{ try { args.Token.UserObject = CreateObject(args.Token); }
catch (Exception e) {
args.Continue = false;
//todo: Report message to UI? } }
private Object CreateObject(TerminalToken token)
{ switch (token.Symbol.Id)
{ case (int)SymbolConstants.SYMBOL_EOF :
//(EOF)
//todo: Create a new object that corresponds to the symbol
return null;
case (int)SymbolConstants.SYMBOL_ERROR :
//(Error)
//todo: Create a new object that corresponds to the symbol
return null;
case (int)SymbolConstants.SYMBOL_COMMENT :
//Comment
//todo: Create a new object that corresponds to the symbol
return null;
case (int)SymbolConstants.SYMBOL_NEWLINE :
//NewLine
//todo: Create a new object that corresponds to the symbol
return null;

10 Vol. 1 Julio-Dic 2013 www.iiies.org/reedies Copyright 2013 AIIES. AC

Revista Electrnica de Investigacin en Educacin Superior
Vol. 1, Nm. 1, 2013
case (int)SymbolConstants.SYMBOL_WHITESPACE :
//Whitespace
//todo: Create a new object that corresponds to the symbol
return null;
case (int)SymbolConstants.SYMBOL_TIMESDIV :
//'*/'
//todo: Create a new object that corresponds to the symbol
return null;

Conclusiones
El resultado generado fue un software donde su ventana principal se muestra en la siguiente Figura 3, donde
podemos observar que posee una barra de men, donde contiene diferentes elementos tales como Archivo,
Edicin, Proyecto y Ayuda, la barra de herramientas y la ventana del editor, los cuales explicaremos
brevemente a continuacin

Figura 3 Ventana del traductor generado por GLP
Archivo. Contiene las opciones ms bsicas para el manejo de los archivos generados. Consta de tres
submens:
Abrir. Permite la apertura de un nuevo archivo de texto
Guardar. Permita poder almacenar en un documento
Salir. Cierra la aplicacin.

Edicin. Contiene las opciones ms bsicas para el manejo del proyecto. Consta de cuatro submens:
Deshacer. Deshace una accin del documento
Rehacer. Rehace una accin del editor de texto
Limpiar. Limpia el editor de texto para comenzar de nuevo.
Seleccionar todo. Selecciona todo el texto del editor.
Proyecto. Contiene las opciones para el procesamiento del cdigo escrito. Consta de tres submens:
Analizar. Ejecuta los analizadores de la gramtica para determinar si lo
escrito en el editor es correcto.
Convertir C#. Ejecuta los analizadores y abre una nueva ventana donde
se muestra el cdigo generado en el lenguaje C#.
Convertir Java. Ejecuta los analizadores y abre una nueva ventana
donde se muestra el cdigo generado en el lenguaje Java.

11 Vol. 1 Julio-Dic 2013 www.iiies.org/reedies Copyright 2013 AIIES. AC

Revista Electrnica de Investigacin en Educacin Superior
Vol. 1, Nm. 1, 2013
Ayuda. Contiene las opciones que definen la documentacin del proyecto. Contiene dos submens:
Documentacin. Abre el archivo de la documentacin del sistema.
Acerca de. Abre una ventana de ayuda para conocer algunas de las
caractersticas bsicas del sistema.

La Barra de Herramientas contiene aquellas que son las ms comunes para el usuario con el fin de apoyarlo en
su proceso
Abrir. Permite la apertura de un nuevo archivo de texto plano para que el editor de texto lo
reconozca de manera automtica.
Guardar. Permita poder almacenar en un documento de texto plano el contenido del editor de texto.
Deshacer. Deshace una accin del documento
Rehacer. Rehace una accin del editor de texto
Limpiar. Limpia el editor de texto para comenzar de nuevo.
Analizar. Ejecuta los analizadores de la gramtica para determinar si lo escrito en el editor es
correcto o no.
Convertir C#. Ejecuta los analizadores y abre una nueva ventana donde se muestra el cdigo
generado en el lenguaje C#.
Convertir Java. Ejecuta los analizadores y abre una nueva ventana donde se muestra el cdigo
generado en el lenguaje Java.
El editor de texto es la zona de escritura, en el que el usuario inserta el algoritmo para poder ser procesado
posteriormente, tal como lo podemos observar en la figura siguiente

Como podemos observar el contar con una herramienta facilita el proceso de diseo e implementacin de un
traductor, sin embargo es necesario conocer y entender plenamente la teora que lo sustenta con el fin de
poder utilizar las herramientas como es el caso de Gold Parser Builder, la cual se utiliz dentro de una
prctica para la generacin de un software, que transformaba un pseudocdigo, establecido de acuerdo a las

12 Vol. 1 Julio-Dic 2013 www.iiies.org/reedies Copyright 2013 AIIES. AC

Revista Electrnica de Investigacin en Educacin Superior
Vol. 1, Nm. 1, 2013
reglas gramaticales necesarias para el desarrollo de traductores y que se implement a travs de la
herramienta Gold Parser Builder.
Recomendaciones
Una de las tareas de los docentes es facilitar a los estudiantes la generacin y construccin de sus propios
conocimientos, para ello debe hacer uso de las herramientas tecnolgicas que se ofrecen hoy en da, el uso del
Gold Parser Builder, apoy a los estudiantes en el desarrollo de su propio traductor, lo que constituy un
logro en su desempeo escolar, ayudando tambin a la competencias genricas tales como las instrumentales,
las sistmicas y las interpersonales.
Referencias
Aho, A. V., Lam, M. S., Sethi, R., & Ullman, J. D. (2008). Compiladores, principios, tcnicas y herramientas
(Segunda ed.). (A. V. Romerio Elizondo, Trad.) Mxico: Pearson Educacin.
Alfonseca Moreno, M., De la Cruz Echeanda, M., Ortega de la Puente , A., & Pulido Caabate, E. (2006).
Compiladores e intrpretes: teora y prctcia (1a. ed.). Madrid, Espaa: Pearson Educacin.
Cueva Lovelle, J. M. (1998). Conceptos Bsicos de procesadores de lenguaje (1a ed.). Oviedo, Espaa:
SERVITEC.
Goldparser . (2002). Gold Pasing System. Recuperado el 01 de 12 de 2012, de Multi-Programming Language,
Parser: http://goldparser.org
Pratt, T. W., & Zelkowitz, M. V. (1998). Lenguajes de Programacin. Diseo e Implementacin (Tercera
ed.). (H. J. Escalona y Garca, & R. H. Rangel Gutirrez, Trads.) Mxico: Prentice Hall
Hispanoamericana.
Quero Catalinas, E. (2002). Sistemas Operativos y Lenguajes de Programacin (Primera ed.). Madrid,
Espaa: Thomson Ediciones - Parainfo.
Rodrguez Sala, J. J., Santamara Arana, L., Rebasa Dolado, A., & Martnez Bonastre, O. (2003).
Introduccin a la programacin. Teora y Prctica. San Vicente, Alicante, Espaa: Editorial Club
Universitaria.
Ruiz Cataln , J. (2010). Compiladores. Teora e implementacin (primera ed.). Mxico: Alfaomega grupo
editor.
Teufel, B., Schmidt, S., & Teufel, T. (1995). Compiladores, conceptos fundamentales (primera ed.).
Wilmington, Delaware, EUA: Addison Wesley Iberoamericana.

Você também pode gostar