2012-01-26 1 views
3

Я знаю, что анализатор снизу вверх лучше, чем синтаксический анализатор сверху вниз, потому что он может принимать леворекурсивную грамматику, что может быть и другими причинами, которые мы предпочитаем синтаксический анализ снизу вверх, вниз синтаксический анализ?Разбор контекстно-бесплатных-грамматик

ответ

1

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

Кроме того, сложное доказательство показывает, что любой детерминированный CFL (CFL, принятый детерминированным автоматом push down) имеет грамматику LR (1), что означает, что грамматики LR соответствуют именно тем языкам, которые имеют эффективный синтаксический анализ на основе стека алгоритмы.

При этом, если вы разрешаете использовать более общие алгоритмы разбора, такие как алгоритм Унгера, алгоритм Эрли или алгоритм CYK, тогда существуют методы «сверху вниз» и «снизу вверх» для разбора произвольных CFG. Однако эти алгоритмы могут быть намного медленнее, чем методы прогнозирования, поэтому они обычно не используются для языков программирования.

Надеюсь, это поможет!

0

У нас есть генераторы синтаксического анализа, такие как byson. Использование их намного проще, чем вручную писать парсеры.
Кроме того, рекурсивные анализаторы спуска делают все операции право-ассоциативными по умолчанию, что неверно для арифметики. Возвращая их обратно к лево-ассоциативному, требуются дополнительные шаги при разборе.

 Смежные вопросы

  • Нет связанных вопросов^_^