Obecnie studiuję na temat kompilatorów i jak rozumiem w LR (0) zdarzają się przypadki, w których mamy "przesunięcie/zmniejszenie" lub "zredukowanie/zmniejszenie" konfliktów, ale nie można mieć konfliktów "shift/shift"! Dlaczego nie możemy mieć konfliktu "shift/shift"?Dlaczego kompilator nie może mieć konfliktu "shift/shift"?
Odpowiedz
Konflikty zmiany/zmniejszenia występują, gdy analizator składni nie może stwierdzić, czy należy przesunąć (przesuń następny znacznik wejściowy na szczycie stosu analizowania), czy zmniejsz (przeciągnij szereg terminali i nieterminali ze stosu analizowania). Konflikt redukuj/zmniejszaj występuje wtedy, gdy analizator składni wie, że można go zredukować, ale nie może stwierdzić, jakie zmniejszenie ma wykonać.
W przypadku konfliktu przesunięcia/przesunięcia analizator składni wiedział, że musiał przesłać kolejny token na stos analizowania, ale nie wiedziałby, jak to zrobić. Ponieważ istnieje tylko jeden sposób na przeniesienie tokena na stos analizowania, generalnie nie może być żadnych konfliktów tego formularza.
Powiedziawszy, teoretycznie jest możliwe, że konflikt shift/shift istnieje, jeśli miałeś dziwną konfigurację, w której istniały dwa lub więcej przejść, wychodzących z danego stanu analizy, które zostały oznaczone tym samym symbolem terminala. Konflikt w tym przypadku polegałby na tym, aby przesunąć się i przejść do jednego stanu lub zmiany i przejść do innego. Może się to zdarzyć, jeśli próbowałeś skompresować automat do mniejszej liczby stanów i zrobiłeś to niepoprawnie lub gdy próbujesz zbudować niedeterministyczny automat parsujący. W praktyce tak się nigdy nie stanie.
Mam nadzieję, że to pomoże!
Trzeci akapit jest bardzo przydatny, dziękuję! – alcuadrado
Występują konflikty ograniczające redukcję, ponieważ są to 2 produkcje, które można wybrać w celu zmniejszenia uchwytu. Występują konflikty ograniczające przesunięcie, ponieważ można je z jednej strony przesuwać i zmniejszać, az drugiej nadal analizować. Shift oznacza tylko jedno, przesuwa strumień wejściowy, więc nie może być konfliktu przesunięcia shift. – axiom