Więc uczę się na test, który wymyśliłem na automatach i językach bezkontekstowych i utknąłem na tej jednej konstrukcji.Przesuwanie/popping stack w odwrotnej kolejności w automatach ze stosem
Mam wszystkie części tego automatu całkowicie działa idealnie, z wyjątkiem jednej części, które wyjaśnię poniżej.
Językiem, który musi rozpoznać, jest: {x # y # z # w | x, y, z, w {0, 1} + zx ≠ w i y ≠ z}.
Więc problem, który mam, polega na porównaniu Xi do Wi, ponieważ elementy Wi nie są znane w chwili, gdy automat przechodzi do przetwarzania W, sposób, w jaki go zaprojektowałem.
Jeśli przechowuję zawartość X, gdy nadejdzie czas na wyskoczenie i porównanie każdego elementu z tymi w W, wyskoczą w odwrotnej kolejności i dlatego uznają 000111 i 111000 za ten sam ciąg, a PDA odrzuci , kiedy powinna wyraźnie zaakceptować (są to różne ciągi). To tylko jeden z przykładów, spowoduje to również niepoprawną analizę innych danych wejściowych.
Jeśli istnieje sposób na przesuwanie zawartości X na stos w odwrotnej kolejności, wyskakują w oryginalnej formie, co pozwala mi poprawnie porównać zawartość napisów.
Jeśli istnieje sposób na odwrócenie zawartości stosu po normalnym naciśnięciu, to również pozwoli mi dojść do rozwiązania.
Każda pomoc zostanie bardzo doceniona. Dzięki.
Nie jestem do końca pewien na temat twojej notacji. Czy 'x # 'jest równe * dowolnym powtórzeniom jakiejś postaci *' x'? – dhke
@dhke to po prostu znak "#" w ciągu znaków.Przykładem napisu w języku może być "01 # 01 # 10 # 10" lub "0 # 00 # 000 # 0000". Aby wyjaśnić, jeśli nie jest oczywiste, jeśli x nie jest równe y, oznacza to x> y, x
JayB