Я пытаюсь реализовать алгоритм Уоршалла для быстрого вычисления замыканий LR(1).
Думаю, я понимаю, как это работает для LR(0):
- Узлы графа — это элементы LR, например
A → B • C
- Ребра являются «переходами», начиная с
A → B • C
доC → • D
Проблема в том, что LR(1) требует вычисления опережающего просмотра, и я не могу понять, как включить их в алгоритм.
Мне кажется, что даже если я знаю транзитивное замыкание любого заданного элемента LR мне все еще нужно выполнить все те же вычисления только для того, чтобы выяснить, какой упреждающий набор для каждого элемента.
Можно ли вообще использовать алгоритм Уоршелла для вычисления канонических замыканий LR(1) или это возможно только для более ограниченных случаев (таких как LR(0), SLR(1) и т. д.)?