Как работают парсеры LL (*)? - PullRequest
9 голосов
/ 31 мая 2010

Я не могу найти полное описание синтаксического анализатора LL (*), такого как ANTLR, в Интернете.

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

Ответы [ 2 ]

4 голосов
/ 31 мая 2010

Вот статья (автор Теренс Парр, автор antlr ) о LL(*) грамматическом анализе: статья с хорошим примером того, что такое LL(*), но не LL(k), для любого k.

Еще одна хорошая справка (и гораздо более полная) - это «Определенная ссылка ANTLR» , опять же от Теренса Парра, и оригинальная журнальная статья , описывающая, как antlr работает [pdf] .

1 голос
/ 31 мая 2010

Всякий раз, когда вы видите это, как правило, количество токенов рассчитывается для анализа языка.

Это то же самое для парсера LR.

Таким образом, k - это максимальное число токенов, которое соберет парер перед принятием решения. Помните, что чем больше k, тем тяжелее будет парсер, если вы не используете генератор (ANTLR, yacc, bison, ...).

LL-парсер использует нисходящий подход, который означает, что он будет искать самое глубокое дерево. Из-за этого левая рекурсия создаст бесконечно глубокое дерево и сломает синтаксический анализатор.

AFAIK. Большинство языков используют парсер LR.

...