2010-03-14 14 views

Odpowiedz

13

W najprostszym parser powtórnie wprowadzający nie używa zmiennych globalnych, a zatem może mieć wiele instancji aktywnych jednocześnie (niekoniecznie związanych z wątkami, ale jest to główny przypadek użycia, który podejrzewam).

W bardziej skomplikowanych przypadkach można jednak utworzyć analizator składniowy, który analizuje w efekcie wiele języków w tym samym dokumencie źródłowym. Rozważmy na przykład parser JSP, który musi parsować kod Java i HTML w tym samym pliku. Zamiast tworzenia jednego dużego parsera, który obejmuje oba języki (coś bardzo niepraktycznego), możesz utworzyć dwa parsery i przełączać się między nimi. Jeśli jednak twoje parsery używają globalnego stanu, przełączanie się między nimi może być problematyczne. Parser wielokrotny pozwala łatwo przełączać się między analizatorami, zarówno w postaci coroutines lub w prostym "parser-A wywołuje parser-B dla kodu osadzonego, a następnie zwraca" sytuacje.


Edited by dodać:

Jeśli chcesz ekstremalną formę re-uczestnik parsowania, przyjrzeć kombinatorów parsera (jak parsec), gdzie każdy sub-ekspresyjnych w „gramatyki” jest osobny parser całkowicie. Budujesz duży parser, łącząc niezliczoną liczbę małych.

3

From wiki:

Być wklęsłego, program komputerowy lub rutyna:

  • Musi posiadać nie Statyczny (lub globalne) dane nie stała.
  • Nie może zwracać adresu do statycznych (lub globalnych) danych niestałych.
  • Muszą działać tylko z danymi dostarczonymi przez dzwoniącego.
  • Nie można polegać na blokadach na zasoby singleton.

Niekoniecznie wiąże się z bezpieczeństwem wątków, ale analizuje wiele gramatyk w dokumencie.