Просто пройдитесь по строке по одному символу слева направо (для этого подходит ранжирование) и отслеживайте уровень вложенности (количество несовпадающих [
).
Правило 1 : очевидный тест на персонаже
Правило 2: если [
увеличивает уровень вложенности, если ]
уменьшает уровень вложенности. Если уровень становится отрицательным, это ошибка. Если он не возвращается к нулю в конце строки, это ошибка.
Правило 3: если ;
, то уровень вложенности должен быть не менее 1, если он (меньше или) равен до нуля, что является ошибкой.