Czy ktoś może mi to wyjaśnić? W szczególności różnica między:Co to jest parser od nowa?
http://github.com/whymirror/greg i http://piumarta.com/software/peg/
Były będąc re-uczestnik wersja późniejsza.
Czy ktoś może mi to wyjaśnić? W szczególności różnica między:Co to jest parser od nowa?
http://github.com/whymirror/greg i http://piumarta.com/software/peg/
Były będąc re-uczestnik wersja późniejsza.
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.
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.