Что такое парсер для повторного входа?

Может кто-нибудь объяснить это мне? В частности, разница между:

http://github.com/whymirror/greg и http://piumarta.com/software/peg/ p >

Первая является повторной версией более поздней версии.

Ответ 1

В своем простейшем синтаксическом анализаторе не используются глобальные переменные и, следовательно, могут одновременно иметь несколько экземпляров (не обязательно связанных с потоковой обработкой, но это основной случай, который я подозреваю).

В более сложных случаях использования, однако, вы можете иметь парсер, который анализирует, по сути, несколько языков в одном исходном документе. Рассмотрим JSP-парсер, например, который должен разбирать код Java и HTML в том же файле. Вместо того, чтобы сделать один огромный парсер, который охватывает оба языка (что-то, вероятно, очень непрактичное), вы можете сделать два парсера и переключиться между ними. Однако, если ваши парсеры используют глобальное переключение состояний между ними, это может быть проблематично. Парсер-ретранслятор позволяет легко переключаться между синтаксическими анализаторами либо в виде сопрограмм, либо в простом "парсере-анализах парсеров-A" для встроенного кода, а затем возвращается ".


Отредактировано для добавления:

Если вам нужна сильная синтаксическая разборка, взгляните на комбинаторы парсеров (например, Parsec), где каждое подвыражение в грамматике полностью является отдельным парсером. Вы создаете большой парсер, комбинируя множество маленьких.

Ответ 2

Из wiki:

Чтобы быть реентерабельной, компьютерная программа или Режим дня:

  • Нельзя хранить статические (или глобальные) непостоянные данные.
  • Нельзя возвращать адрес в статические (или глобальные) непостоянные данные.
  • Должен работать только с данными, предоставленными ему вызывающим абонентом.
  • Не следует полагаться на блокировки для ресурсов singleton.

Не обязательно связано с безопасностью потоков, но разбор нескольких грамматик в документе.