Próbuję wdrożyć algorytm Warshall, aby szybko obliczyć zamknięcia LR (1).Jak używać algorytmu Warshall do przechodzenia w tryb przechodni w celu określenia zamknięć kanonicznych LR (1)?
myślę rozumiem jak to działa dla LR (0):
- Węzły grafu są LR items, jak
A → B • C
- Krawędzie są "przejścia", począwszy od
A → B • C
doC → • D
Problem polega na tym, że LR (1) wymaga obliczenia wyprzedzającego i nie mogę wymyślić, jak włączyć je do algorytmu thm.
Wydaje mi się, że , nawet jeśli znam, przechodnie zamknięcie dowolnego elementu LR I nadal musi przejść przez te same obliczenia tylko po to, aby dowiedzieć się, co to jest wcześniej ustawiony dla każdego elementu.
Czy możliwe jest wykorzystanie algorytmu Warshall do obliczania zamknięć LR (1) kanonicznych, czy jest to możliwe tylko w przypadku bardziej ograniczonych przypadków (takich jak LR (0), SLR (1) itp.)?
+1 dziękuję! Właściwie (dawno później) nie korzystałem z żadnego konkretnego algorytmu, ponieważ im dłużej na niego patrzyłem, tym mniej możliwości widziałem dla poprawy. Skończyłem na tworzeniu własnego generatora parsera LR (k), choć było to dość bolesne! (Działa na każde k, ale może zająć wykładniczo długie k w zależności od gramatyki.) – Mehrdad