viernes, 10 de febrero de 2017

Parseo simple



El siguiente ejercicio proviene del mismo lugar que uno publicado unos días atrás. Los datos del ejercicio que se mantienen igual, no se vuelven a exponer. En particular, la Parsing Action y Goto table son los mismos que en dicho artículo.


Lo que cambia es el input string, y obviamente el seguimiento del parser, manteniéndose iguales la pa (parsing action), la goto (goto table) y las reglas gramaticales.


Input string: a,,b
Acción
Raíces del árbol de derivación (y estado asociado)*
Input remanente
Inicialización: 0
(0)
a,,b $end
pa(0, ‘a’) => apilar
(0), ‘a’
,,b $end
goto(0, ‘a’) => 3
(0), ‘a’ (3)
,,b $end
pa(3, ‘,’) => reducir (3)
(0), ‘ELEMENT’
,,b $end
goto(0, ‘ELEMENT’) => 2
(0), ‘ELEMENT’ (2)
,,b $end
pa(2, ‘,’) => reducir (2)
(0), ‘LIST’
,,b $end
goto(0, ‘LIST’) => 1
(0), ‘LIST’ (1)
,,b $end
pa(1, ‘,’) => apilar
(0), ‘LIST’ (1), ‘,’
,b $end
goto(1, ‘,’) => 5
(0), ‘LIST’ (1), ‘,’ (5)
,b $end
pa(5, ‘,’) => error
(0), ‘LIST’ (1), ‘,’ (5)
,b $end

* Solamente el estado inicial (0) no está asociado a ninguna raíz.

lunes, 6 de febrero de 2017

Otro ejercicio del artículo "LR Parsing"

El siguiente ejercicio proviene del mismo lugar que uno publicado unos días atrás. Los datos del ejercicio que se mantienen igual, no se vuelven a exponer. En particular, la Parsing Action y Goto table son los mismos que en dicho artículo.
Lo que cambia es el input string, y obviamente el seguimiento del parser, manteniéndose iguales la pa (parsing action), la goto (goto table) y las reglas gramaticales.

Input string: a,ba
Acción
Raíces del árbol de derivación (y estado asociado)*
Input remanente
Inicialización: 0
(0)
a,ba $end
pa(0, ‘a’) => apilar
(0), ‘a’
,ba $end
goto(0, ‘a’) => 3
(0), ‘a’ (3)
,ba $end
pa(3, ‘,’) => reducir (3)
(0), ‘ELEMENT’
,ba $end
goto(0, ‘ELEMENT’) => 2
(0), ‘ELEMENT’ (2)
,ba $end
pa(2, ‘,’) => reducir (2)
(0), ‘LIST’
,ba $end
goto(0, ‘LIST’) => 1
(0), ‘LIST’ (1)
,ba $end
pa(1, ‘,’) => apilar
(0), ‘LIST’ (1), ‘,’
ba $end
goto(1, ‘,’) => 5
(0), ‘LIST’ (1), ‘,’ (5)
ba $end
pa(5, ‘b’) => apilar
(0), ‘LIST’ (1), ‘,’ (5), ‘b’
a $end
goto(5, ‘b’) => 4
(0), ‘LIST’ (1), ‘,’ (5), ‘b’ (4)
a $end
pa(4, ‘a’) => error
(0), ‘LIST’ (1), ‘,’ (5), ‘b’
a $end

 * Solamente el estado inicial (0) no está asociado a ninguna raíz.

viernes, 3 de febrero de 2017

Ejercicios del artículo "LR Parsing",

A continuación, un ejercicio propuesto por el artículo LR Parsing, de A.V. Aho y S. C. Johnson


pa (Parsing Action)

Siguiente símbolo de entrada
Estado
'a'
'b'
','
'$'
0
shift
shift
error
error
1
error
error
shift
accept
2
error
error
Red. 2
Red 2
3
error
error
Red. 3
Red. 3
4
error
error
Red. 4
Red. 4
5
shift
shift
error
error
6
error
error
Red. 1
Red 1
Ejemplo: pa(5, ‘b’)= shift;  pa(4, 'a')= error

Nota de traducción: shift=apilar; Red.=reducir

Reglas gramaticales
(1) LIST --> LIST ',' ELEMENT
(2) LIST --> ELEMENT
(3) ELEMENT --> 'a'
(4) ELEMENT --> 'b'


goto (Goto table)

Label of new root
Estado de más a la derecha
LIST
ELEMENT
‘a’
‘b’
‘,’
0
1
2
3
4

1




5
2





3





4





5

6
3
4

6





Ejemplo: goto(0, LIST)= 1;   goto(1, ',')= 5
Los espacios vacíos nunca deberían ser consultados por el parser.



Input string: a,b,a
Acción
Raíces del árbol de derivación (y estado asociado)*
Input remanente
Inicialización: 0
(0)
a,b,a $end
pa(0, ‘a’) => apilar
(0), ‘a’
,b,a $end
goto(0, ‘a’) => 3
(0), ‘a’ (3)
,b,a $end
pa(3, ‘,’) => reducir (3)
(0), ‘ELEMENT’
,b,a $end
goto(0, ‘ELEMENT’) => 2
(0), ‘ELEMENT’ (2)
,b,a $end
pa(2, ‘,’) => reducir (2)
(0), ‘LIST’
,b,a $end
goto(0, ‘LIST’) => 1
(0), ‘LIST’ (1)
,b,a $end
pa(1, ‘,’) => apilar
(0), ‘LIST’ (1), ‘,’
b,a $end
goto(1, ‘,’) => 5
(0), ‘LIST’ (1), ‘,’ (5)
b,a $end
pa(5, ‘b’) => apilar
(0), ‘LIST’ (1), ‘,’ (5), ‘b’
,a $end
goto(5, ‘b’) => 4
(0), ‘LIST’ (1), ‘,’ (5), ‘b’ (4)
,a $end
pa(4, ‘,’) => reducir (4)
(0), ‘LIST’ (1), ‘,’ (5), ‘ELEMENT’
,a $end
goto(5, ‘ELEMENT’) => 6
(0), ‘LIST’ (1), ‘,’ (5), ‘ELEMENT’ (6)
,a $end
pa(6, ‘,’) => reducir (1)
(0), ‘LIST’
,a $end
goto(0, ‘LIST’) => 1
(0), ‘LIST’ (1)
,a $end
pa(1, ‘,’) => apilar
(0), ‘LIST’ (1), ‘,’
a $end
goto(1, ‘,’) => 5
(0), ‘LIST’ (1), ‘,’ (5)
a $end
pa(5, ‘a’) => apilar
(0), ‘LIST’ (1), ‘,’ (5), ‘a’
$end
goto(5, ‘a’) => 3
(0), ‘LIST’ (1), ‘,’ (5), ‘a’ (3)
$end
pa(3, $end) => reducir (3)
(0), ‘LIST’ (1), ‘,’ (5), ‘ELEMENT’
$end
goto(5, ‘ELEMENT’) => 6
(0), ‘LIST’ (1), ‘,’ (5), ‘ELEMENT’ (6)
$end
pa(6, $end) => reducir (1)
(0), ‘LIST’
$end
goto(0, ‘LIST’) => 1
(0), ‘LIST’ (1)
$end
pa(1, $end) => accept
(0), ‘LIST’ (1)
$end


* Solamente el estado inicial, [0], no está asociado a ninguna raíz.

viernes, 6 de enero de 2017

Dos herramientas útiles para el cliente de correo Lotus

"Mostrar sólo mensajes no leídos" y "Revisar Agenda", 2 botones muy útiles que se pueden agregar al Lotus:


  • Recomendación: agregarlos a la barra de herramientas que esté más a mano, por ejemplo, "Vista de Navegación" está la mayoría del tiempo accesible.
  • Botón "Mostrar sólo mensajes no leídos": este botón funciona como un mutador que al cliquearlo cambia alternadamente entre filtrado de mensajes no leídos y todos los mensajes. Sirve para ver rápidamente los mails que tenemos pendientes.


  1. Ir a preferencias de barra de herramientas (clic derecho en la barra misma)
  2. Seleccionar del árbol de opciones de la izquierda, la opción "Barras de herramientas", desplegarla y seleccionar "Personalizar"
  3. Elegir la barra sobre la cual se va a agregar el botón, que sea "Vista de Navegación", de acuerdo a la recomendación dada.
  4. Como es un botón que no existe de forma predefinida, hay que crearlo manualmente. Ir al botón "Crear", luego cliquear en el submenú "Botón".
  5. Escribir un título y un texto emergente, sugerencia: "Mostrar sólo no leídos", si se desea también se puede cambiar el ícono que viene predeterminadamente (mi favorito es uno que se llama "19x19_todo.gif").
  6. En fórmula, introducir "@Command([ViewShowOnlyUnread])" (sin las comillas).
  7. Para cerrar todas las ventanas de configuración y volver a la vista principal de Lotus, ir haciendo clic sucesivamente en todas los botones de confirmación ("Aceptar", "Guardar", etc.), hasta que no haya otras ventanas más que la principal.


  • Botón "Revisar Agenda": Abre el Calendario de Lotus, con la fecha, hora y posiblemente más información de todas las reuniones que tenemos programadas.
    • El procedimiento es idéntico al anterior, diferenciándose en que la fórmula que hay que ingresar en este caso es "@Command([CheckCalendar])", y obviamente el texto y posiblemente el ícono van a ser diferentes, se sugiere "Ver Calendario" como texto y por ícono "19x19_calendar.gif".

miércoles, 4 de enero de 2017