Math, logic and romantic nonsense

Recent played songs

scastillo's total tracks. scastillo's top artists. scastillo's total tracks.

Thursday, September 21, 2006

Parser LL(1), LR(0), SLR

Luego de comer una deliciosa pizza, en compañia de unos muy buenos amigos... nada peor que pasar el resto de la noche aprendiendo procedimientos rigurosos para construir artefactos que permitan analizar la estructura gramatical de una palabra, dada una gramatica formal, o analisis sintáctico. Suena bastante aburrido y yo esparaba que fuera así, pero sin embargo fue un proceso divertido y ahora rondan en mi cabeza estos 3 parsers y no puedo evitar cada que cierro los ojos ver una imagen de alguno de ellos y escuchar voces repitiendo los pasos a seguir para construir las tablas de parsing.

Construcción de parsers, dada una gramatica formal:

LL(1): Left to right Left-most derivations, lookahead by 1
  1. Se construye la tabla de primeros y siguientes
  2. Se construye tabla (terminales vs no-terminales)
    para cada producción M->a se ubica en la posicion (M,prim(a)) = M->a
    si la cadena vacia pertenece al conjutno prim(a), entonces se procede asi:
    (M,sig(a)) = M->a , para cada sig(a)
  3. con esta tabla se puede verificar la validez de una cadena de entrada, construyendo la tabla (pila-cadena-producción). Se comienza con el simbolo noterminal principal en la pila ($M) y la cadena de entrada con signo pesos al final. Luego se busca en la tabla de parsing que produccion se debe seguir estando en el simbolo del tope de la pila con el simbolo terminal de la cadena de entrada.
  4. si se tiene pesos en la pila y pesos en la entrada, se acepta la palabra
mas sobre parsers LL

1 comentarios:

Alberto said...

Lo de los pasos es genial. Me encantaría, sin embargo, ver un ejemplo, siguiendo los pasos y con una explicación lo más detallada posible, ya que tengo dificultades para captar cómo funciona en la práctica. Mil gracias.