Я пытаюсь реализовать алгоритм Warshall для быстрого вычисления замыканий LR (1).Как использовать алгоритм Варшалла для транзитивного замыкания для определения канонических замыканий парсера LR (1)?
Я думаю Я понимаю, как это работает для LR (0):
- Узлы графа являются LR items, как
A → B • C
- Края "переходы", начиная с
A → B • C
вC → • D
Беда в том, что LR (1) требует вычисления взглядов, и я не могу понять, как включить их в algori THM.
Мне кажется, что , даже если я знаю транзитное закрытие любого данного элемента LR I еще нужно пройти все те же вычисления, чтобы выяснить, что представляет собой набор для каждого элемента.
Можно ли использовать алгоритм Варшалла для вычисления канонических замыканий LR (1), или это возможно только для более ограниченных случаев (например, LR (0), SLR (1) и т. Д.)?
+1 спасибо! На самом деле (долгое время спустя) я не использовал какой-либо конкретный алгоритм, потому что чем дольше я смотрел на него, тем меньше возможностей я видел для улучшения. Я закончил создание собственного генератора парсеров LR (k), хотя это было довольно болезненно! (Он работает для каждого k, но он может занимать экспоненциально длинный k в зависимости от грамматики.) – Mehrdad