Разбор дел, которые требуют много внимания - PullRequest
2 голосов
/ 17 сентября 2011

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

Ответы [ 2 ]

2 голосов
/ 17 сентября 2011

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

Также см. Выбранный ответ для Почемунельзя ли анализировать C ++ с помощью анализатора LR (1)? .В частности, цитата:

«Грамматика C ++ неоднозначна, зависит от контекста и потенциально требует бесконечного взгляда для устранения некоторых неясностей».

2 голосов
/ 17 сентября 2011

Кнут доказал, что любая грамматика LR (k) может быть механически преобразована в грамматику LR (1).Также, AFAIK, любая грамматика LR (k) может быть проанализирована во времени, пропорциональном длине анализируемой строки.Поскольку он включает в себя LR (1), я не вижу, какой смысл использовать для анализа LR (k) с k> 1.

Я никогда не изучал LR (k) -> LR (1)трансформация, поэтому может случиться так, что в некоторых случаях это не очень удобно.

...