Я смущен следующим quote из Википедии:LR (л) LR (1) преобразование грамматики
Другими словами, если язык был достаточно разумным, чтобы позволить эффективный один проход парсера он может быть описан грамматикой LR (k). И эта грамматика всегда может быть механически преобразована в эквивалентную (но большую) грамматику LR (1) в . Таким образом, метод парсинга LR (1) был, в теории, , достаточно мощным, чтобы обрабатывать любой разумный язык. В практики, естественные грамматики для многих языков программирования близко к LR (1). [Править]
Это означает, что генератор синтаксических анализаторов, как bison
, является очень мощным (так как он может обрабатывать LR(k)
грамматики), если вы можете преобразовать грамматику LR(k)
в грамматику LR(1)
. Есть ли некоторые примеры этого или рецепт того, как это сделать? Я хотел бы знать об этом, так как у меня конфликт смены/сокращения в моей грамматике, но я думаю, что это потому, что это грамматика LR(2)
и хотел бы преобразовать ее в грамматику LR(1)
. Боковой вопрос: C++
необоснованный язык, так как я читал, что bison
-генерированные парсеры не могут его разобрать.