2010-03-14 10 views

risposta

13

Al suo più semplice parser re-entrant non utilizza variabili globali e quindi può avere più istanze attive contemporaneamente (non necessariamente correlate al threading, ma questo è il caso d'uso principale che sospetto).

In casi di utilizzo più complessi, tuttavia, è possibile avere un parser che analizza, in effetti, più lingue nello stesso documento di origine. Prendi in considerazione un parser JSP, ad esempio, che deve analizzare codice Java e HTML nello stesso file. Invece di creare un parser enorme che copra entrambe le lingue (una cosa probabilmente molto poco pratica) puoi fare due parser e passare da una all'altra. Se i tuoi parser, tuttavia, usano il cambio di stato globale tra di loro potrebbero essere problematici. Un parser rientrante consente di passare facilmente da un parser all'altro, sia in forma di coroutine che in semplice "parser: A chiama parser-B per codice incorporato e restituisce" situazioni ".


A cura di aggiungere:

Se si desidera una forma estrema di rientrante analisi, dare un'occhiata a combinatori parser (come Parsec) in cui ogni sotto-espressione nella "grammatica" è un parser separato interamente. Costruisci un parser grande combinando una miriade di piccoli.

3

From wiki:

Per essere rientrante, un programma per computer o di routine:

  • Deve contenere non statico (o globali) i dati non costanti.
  • Non restituire l'indirizzo a dati statici (o globali) non costanti.
  • Deve funzionare solo sui dati forniti dal chiamante.
  • Non si deve fare affidamento sui blocchi alle risorse Singleton.

non necessariamente legata ad infilare sicurezza, ma l'analisi multiple grammatiche all'interno di un documento.