2010-03-14 6 views

Respuesta

13

En su forma más simple, un analizador reentrante no usa variables globales y por lo tanto puede tener múltiples instancias activas al mismo tiempo (no necesariamente relacionadas con el enhebrado, pero este es el caso de uso principal que sospecho).

En casos de uso más complejos, sin embargo, puede tener un analizador que analiza, en efecto, varios idiomas en el mismo documento fuente. Considere un analizador JSP, por ejemplo, que tiene que analizar el código Java y HTML en el mismo archivo. En lugar de hacer un analizador enorme que cubra ambos idiomas (algo que probablemente sea muy poco práctico) puede hacer dos analizadores y cambiar entre ellos. Sin embargo, si sus analizadores utilizan el cambio de estado global entre ellos podría ser problemático. Un analizador reentrante le permite cambiar fácilmente entre analizadores sintácticos, ya sea en forma de corrutinas o en un simple "analizador-Un analizador de llamadas B-para código incrustado y luego regresa".


Editado para añadir:

Si desea una forma extrema de reentrante análisis, echar un vistazo a los combinadores de analizadores sintácticos (como Parsec), donde cada sub-expresión en la "gramática" es un analizador separado por completo. Construyes un analizador grande combinando una miríada de pequeños.

3

From wiki:

Para ser de reentrada, un programa informático o rutina de :

  • debe sostener sin estática (o global) de datos no constantes.
  • No debe devolver la dirección a datos no constantes estáticos (o globales).
  • Debe funcionar solo en los datos que le proporciona la persona que llama.
  • No debe confiar en los bloqueos de los recursos singleton.

no necesariamente relacionado con el hilo de seguridad, pero al analizar múltiples gramáticas dentro de un documento.

Cuestiones relacionadas