Классический dragon book очень хорошо объясняет, как работают парные анализаторы LR. Существует также Parsing Techniques. A Practical Guide., где вы можете прочитать о них, если я хорошо помню. Статья в Википедии (по крайней мере, введение) неверна. Они были созданы Дональдом Кнутом, и он объясняет их в «Искусстве компьютерного программирования» Том 5. Если вы понимаете испанский, есть полный список книг here, размещенных мной. Не все эти книги находятся на испанском языке.
Прежде чем понимать, как они работают, вы должны понимать несколько концепций, таких как, в первую очередь, следующие и взгляды. Кроме того, я действительно рекомендую вам понять концепции парсеров LL (потомков), прежде чем пытаться понять парсер LR (восходящий).
Существует семейство парсеров LR, в частности LR (K), SLR (K) и LALR (K), где K - это то, сколько нужно, чтобы они работали. Yacc поддерживает парсер LALR (1), но вы можете делать хитрости, а не теорию, чтобы заставить ее работать с более мощными типами грамматик.
О производительности, это зависит от анализируемой грамматики. Они выполняются в линейном времени, но сколько места им нужно, зависит от того, сколько состояний вы создаете для окончательного анализатора.
+1 Я интересно то же самое. Рекурсивные парсеры спуска настолько просты в понимании, но так трудно получить право. Парсеры LR легко писать с генератором (например, YACC), но я никогда не понимал, как это работает «под капотом». – Zifre
Значок «Хороший вопрос» :) –