Что такое повторный входящий парсер? - PullRequest
11 голосов
/ 14 марта 2010

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

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

Первый является вернувшейся версией позднего.

Ответы [ 2 ]

15 голосов
/ 14 марта 2010

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

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


Отредактировано, чтобы добавить:

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

5 голосов
/ 14 марта 2010

Из вики :

Для повторного входа, компьютерная программа или рутина:

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

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

...