Исправил всё, кроме одного.

Тот кусочек излишнего кода с огромным комментарием отслеживает что лежит
в части строки после последней точки с запятой. Если этого куска не
будет -- он бросит "Empty string" и будет прав. Если просто это не
обрабатывать, то тогда существует случай, например "dir;cd ..;dir" когда
он не обработает вполне корректную последнюю команду. Или я чего-то не
понимаю в формулировке задания.