Меня внезапно осенило, и я сотворил вот такую штуку:
Поясняю:
состояние служит для записи количества входных
символов, но так как
зависит от
таким образом -
-, следовательно в стек надо записывать по 2-а символа, чтобы при следующем проходе
занулил все символы
в стеке. Таким образом обеспечивается соответствие количества первых символов
и зависимого от этого количества
символов.
состояние целиком служит для зануления в стеке символов
силами символов
. Следовательно, по окончании этого цикла мы избавимся от зависимости
и
(который в начале).
Теперь осталось проверить зависимость между
и последними
. Следующий за состоянием
переход соответствует понижению
до
. Это облегчает дальнейшие действия так, что, после заполнения оставшихся
символов, теперь осталось занулить весь стек, посредством следующих символов
в состоянии
.
Если их не осталось, то стек должен быть пуст. Тогда входное слово принадлежит данному языку.
Если
ещё остались, то ими надо занулить весь стек из
. Это должно получиться, так как в стеке их ровно столько, сколько должно быть символов
в конце. Занулив стек, мы увидим дно и не должны больше встречать символов
, да и вообще больше символов быть не должно. Только в этом случае слово распознано и, следовательно, принадлежит языку (заключительное состояние
)
Вот так. Я написал это довольно спонтанно, так как с формальной грамматикой у меня большие проблемы и выстроить всё логично у меня не очень получается. То, что я написал выше - это "отражение" моих мыслей в виде слов, то есть - то, как я понимаю этот автомат :).
Если есть косяки, обязательно напишите! Буду очень признателен.