  
                                     \\|//
                                     (@ @)
                       ---------oOO---(_)---OOo---------
                       :       MANUAL DE TROSKY        :
                       ---------------------------------
                                   |__|__|
                                    || ||
                                   ooO Ooo
  
   Contenido

   [1]. Qu es trosky?
   [2]. Cmo se usa?

       [2.1]. Ejemplos bajo D.O.S
       [2.2]. Ejemplos bajo Linux

   [3]. Sintaxis de la gramtica
   [4]. Cdigo generado
   [5]. Autores


[1]. Qu es Trosky?

   El programa  Trosky  genera  el cdigo fuente  en lenguaje C  para
   reconocer una gramtica LL(1).   Fue desarrollado en el transcurso
   de la materia Laboratorio de teora de lenguajes en la Universidad
   del Magdalena bajo la direccin del  profesor Roberto Florez de la
   Universidad de Antioquia.

[2]. Cmo se usa?

   Es muy fcil =)

   El programa  es invocado desde la lnea de comandos, la  salida
   puede ser dirigida hacia la salida estndar (stdout)  hacia un
   archivo.      Dirigir  la  salida  hacia  la salida estndar es
   especialmente til cuando se desea redireccionar  la salida del
   programa.   Para  ilustrar lo anterior se entregarn aparte los
   ejemplos bajo D.O.S. y bajo Linux. Se  recomienda  imprimir  el
   presente documento de ayuda.

       trosky fuente [destino]

   -Fuente:
     El archivo fuente  puede  ser escrito en un editor de texto.
     Ver [3] para detalles acerca de la sintaxis de la gramtica.

   -Destino(Opcional):
     Archivo de destino para el cdigo C.

[2.1]. Ejemplos bajo D.O.S

   Un  archivo conteniendo la gramtica puede  ser escrito en un editor
   de texto convencional,  si se desea se puede leer la gramtica desde
   la consola.   Note que para Trosky es lo mismo leer desde la consola
   que leer desde un archivo  por lo que esta opcin puede parecer poco
   amigable, pero til en ciertas ocasiones.

   Ejemplo: leyendo desde la consola

         c:\>trosky con
         <s>->1<s>1
         <s>->0
         ^Z

   El ingreso de producciones terminar si un error es encontrado, o
   cuando el  usuario lo desee pulsando Ctrl+Z y luego ENTER,    F6
   y luego ENTER.

   Es  recomendable escribir la gramtica usando un editor  de  texto
   disponible en el sistema, como el EDIT en este caso. Esto facilita
   la correccin   de  errores  y permite  conservar  el  archivo que
   contiene el fuente de la gramtica.

   Ejemplo: Leyendo desde un archivo

         Escribir en un editor de texto la siguiente gramtica
         y  guardarla en el archivo  gic01,  Trosky diferencia
         las maysculas de las minsculas.

         ----listado de gic01 ------

         * Gramtica de ejemplo # 1
         <s> -> 1<s>1
         <s> -> 0<s>0
         <s> -> m

         ---------------------------

         Luego la gramtica puede ser ingresada a travs de la
         lnea de comandos.

         C:\>trosky gic01

         Escribe el cdigo  fuente  del reconocedor de la gramtica
         que se encuentra en el archivo gic01 en la salida estndar,
         por defecto la pantalla.

         C:\>trosky gic01 | more

         Muestra el texto con pausas entre pantallas, permitiendo
         as ver el cdigo del reconocedor completo.

         C:\>trosky gic01 prn

         Escribe el cdigo fuente del reconocedor en la impresora.

         C:\>trosky gic01 gic01.c

         Escribe el cdigo fuente  del  reconocedor  en  el  archivo
         gic01.c que puede ser compilado ms tarde con un compilador
         de  C, tal como TURBO-C o Borland C++.

  Ejemplo: Compilacin usando Borland C++

         C:\>trosky gic01 gic01.c
         C:\>bcc  gic01.c
         C:\>gic01.exe
   
[2.2]. Ejemplos bajo Linux

                               .~.
                               /V\   L   I   N   U   X
                              // \\  where do you want
                             /(   )\  to go tomorrow?
                              ^^-^^
 
   Un  archivo conteniendo la gramtica puede  ser escrito en un editor
   de texto convencional,  si se desea se puede leer la gramtica desde
   la consola.   Note que para Trosky es lo mismo leer desde la consola
   que leer desde un archivo  por lo que esta opcin puede parecer poco
   amigable, pero til en ciertas ocasiones.

  Ejemplo: leyendo desde la consola

         $trosky /dev/console
         <s>->1<s>1
         <s>->0
         Ctrl+D

        El ingreso de producciones terminar  si un error es
        encontrado, o cuando el  usuario lo  desee  pulsando
        Ctrl+D.

   Es recomendable escribir la gramtica usando un editor de  texto
   disponible en el sistema, como el vi en este caso. Esto facilita
   la correccin   de  errores  y permite  conservar el archivo que
   contiene el fuente de la  gramtica.  El  editor  de texto vi se
   encuentra disponible en casi todas las versiones de UNIX.     El
   editor  de texto pico es ms cmodo  que el vi,  pero  puede  no
   estar en su sistema.

   Ejemplo: Leyendo desde un archivo

         Escribir en un editor de texto la siguiente gramtica
         y  guardarla en el archivo  gic01,  Trosky diferencia
         las maysculas de las minsculas.

         ----listado de gic01 ------

         * Gramtica de ejemplo # 1
         <s> -> 1<s>1
         <s> -> 0<s>0
         <s> -> m

         ---------------------------

         Luego la gramtica puede ser ingresada a travs de la
         lnea de comandos.

         $trosky gic01

         Imprime el  cdigo  fuente  del reconocedor de la gramtica
         que se encuentra en el archivo gic01 en la salida estndar,
         por defecto la pantalla.

         $trosky gic01 | more

         Muestra el texto con pausas entre lneas.
         
         $trosky gic01 | less

         Nota: presione 'q' para salir del programa less.

         Si el programa less se encuentra en su sistema, redireccionar
         la   salida  puede ser una  buena  forma de revisar el cdigo
         generado debido  a que el programa  less permite desplazar el
         texto en cualquier direccin.

         $trosky gic01 /dev/lp0
         
         $trosky gic01 /dev/lp1

         Escribe el cdigo fuente del reconocedor en la impresora.
         Se debe tener permiso para usar le impresora.
                 
         $trosky gic01 /dev/null

         Enva el cdigo fuente de la gramtica a la basura.  Esto
         es  til  cuando  se  desea  saber  si  el archivo fuente
         contiene errores de sintaxis pero no se desea conocer  el
         cdigo del reconocedor.
    
         $trosky gic01 gic01.c

         Escribe el cdigo fuente  del  reconocedor  en  el  archivo
         gic01.c que puede ser compilado ms tarde con un compilador
         de cdigo C, cmo el GNU C Compiler.

  Ejemplo: Compilacin usando GNU C Compiler

         $trosky gic01 gic01.c
         $gcc gic01.c -o gic01
         $./gic01

[3]. Sintaxis de la gramtica

  Si  existe  un error de sintaxis en el archivo fuente que contiene la
  gramtica se mostrar un mensaje explicando lo ocurrido y el programa
  terminar.  Se  explicar  brevemente la sintaxis  que debe ser usada
  para ingresar gramticas al programa.

        Los nodos no-terminales deben estar encerrados entre el
        caracter '<' y el caracter '>',sin espacios. El  nombre
        de la  produccin  puede  incluir letras,  nmeros y el
        caracter '_'. Ejemplo:

         <S>
         <prod_1>

        Se hace diferencia entre maysculas  y minsculas  tanto
        para los no-terminales como para los terminales,  por lo
        que los no-terminales <s> y <S> son diferentes entre si.

        Se admiten lneas de comentarios siempre y cuando  estas
        comiencen por un  asterisco '*'.

        Se  utiliza  una  flecha  '->'  para  separar   el  lado
        izquierdo del lado derecho de una produccin.

        No  se  admiten  espacios  entre  los  smbolos del lado
        derecho, una produccin escrita de  la  siguiente  forma
        genera un error de sintaxis.

        <S> -> <S>a <T>
                   |
                   Espacio no permitido.
 

        Se  admiten  producciones  nulas,  la  definicin de una
        produccin termina con un caracter  nueva lnea o con el
        fin de archivo, ejemplo:

        <S> -> a<s>
        <S> ->

  Ejemplos :
  
  -----------------------------------
  * Gramtica de ejemplo #2
  * Reconocedor bsico de expresiones
  * de dos operaciones, suma y producto

  <e> -> <t><lista_e>
  <lista_e> -> +<t><lista_e>
  <lista_e> ->
  <t> -> <p><lista_t>
  <lista_t> -> *<p><lista_t>
  <lista_t> ->
  <p> -> (<e>)
  <p> -> d
  -----------------------------------
  * Gramtica de ejemplo #3

  <a> -> <b><c>c
  <a> -> e<d><b>
  <b> ->
  <b> -> b<c><d><e>
  <c> -> <d>a<b>
  <c> -> ca
  <d> ->
  <d> -> d<d>
  <e> -> e<a>f
  <e> ->c
  -----------------------------------
  * Gramtica de ejemplo #4
  
  <S> -> x<S>
  <S> -> a<S>b
  <S> -> w
  -----------------------------------

[4]. Cdigo generado

 El  cdigo generado escrito en lenguaje C, puede ser compilado  con un
 compilador  de  cdigo  C++  estndar.  Se compil exitosamente usando
 TURBO-C, Borland C++ 4.5/5.0 (bcc) bajo  D.O.S. y  el GNU  C  COMPILER
 (gcc) bajo Linux.    El cdigo generado hace uso de memoria dinmica e
 incluye las  funciones  necesarias  para el manejo de una pila con una
 lista ligada.

 El  reconocedor  descendente  generado  es  una  mquina de pila.   El
 programa   genera  comentarios apropiados que le permitirn comprender
 el  cdigo  generado si usted se encuentra familiarizado con este tipo
 de reconocedores.

 Al  compilar  el cdigo generado puede mostrarse un warning por el uso
 de la funcin gets.    No se recomienda el uso de esta funcin  porque
 no revisa el desbordamiento  del buffer de lectura.  Si piensa emplear
 el programa generado continuamente, se recomienda   editar el cdigo y
 utilizar otra forma de lectura. Se decidi  dejar la funcin gets para
 mantener el cdigo generado legible, se opt  por utilizar  un  buffer
 de  512 caracteres,  tamao aceptable para  el  propsito del programa
 generado.

[5]. Autores

 Nelson Enrique Castillo Izquierdo
 <nelsoneci@hotmail.com>
 http://www.geocities.com/ResearchTriangle/Thinktank/7379/

 Eduardo de Jess Daza Castillo
 <edazc@hotmail.com>

 Universidad del Magdalena
 Facultad de Ingeniera
 Programa de Ingeniera de Sistemas
 VII semestre

 Agosto de 1999
