Что такое повторно используемый синтаксический анализатор?

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

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

Причем бывший повторно используемая версия позже.

11
задан Josh Lee 14 March 2010 в 06:46
поделиться

2 ответа

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

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


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

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

16
ответ дан 3 December 2019 в 05:33
поделиться

From wiki :

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

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

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

5
ответ дан 3 December 2019 в 05:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: