Есть ли LL(*) парсер, который не генерируется

Мне нужно изменить грамматические правила моего синтаксического анализатора во время выполнения, и я бы хотел избежать повторной генерации синтаксического анализатора при каждом изменении правил.

Есть ли парсер, который не использует генерацию кода?

С Уважением,

2 ответа

Вы могли бы использовать PEG (или рукописный или что-то вроде boost: spirit)

PEG не являются строгим расширенным набором грамматик LL, но, как правило, более выразительны, поскольку имеют различные дополнительные функции, такие как ограниченное отрицание и последующее контекстное тестирование.

Вы можете использовать (то есть реализовать себя, скорее всего, не библиотеку, лежащую вокруг) анализатор Earley.

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

В противном случае вы могли бы пересмотреть; почему вы не хотите перестраивать парсер? Большинство генераторов парсеров работают намного быстрее, чем люди могут редактировать правила.

Другие вопросы по тегам