Паскаль - проверка правильности расстановки открывающих и закрывающих скобок в Бесконечном выражении

Рассматривая предыдущее решение, можно заметить, что там ввод пользователя считывался разом в одну переменную типа string, но на длину переменной этого типа имеется ограничение в 255 символов, таким образом, на экзамене оценка может быть снижена за не универсальность кода.

Ниже приведен пример решения задачи, где последовательность вводится посимвольно пользователем то того момента, пока не будет встречена точка или же запись ещё до точки станет явно некорректной (число закрывающих скобок начнёт превышать число открывающих).

Так как число повторений цикла заранее не известно, в этом решении используется цикл while:

Program BracketsTesting2;
var // секция объявления переменных
   i,
   bracketsDif: Integer; // счётчик разницы между открытыми и закрытыми скобками

   my_sequence:  String; // сюда считаем последовательность символов (можно вообще не использовать)
   stop_symb: char;
   currentSymbol: char;
   
begin // тело программы
 
   stop_symb := '.'; // точка как признак конца последовательности
   bracketsDif := 0; // условно "правильное" состояние расстановки скобок
   
   //my_sequence := ''; // (для понимания) изначально ничего не введено (вспомогательная переменная)
   currentSymbol := '#'; // значение по-умолчанию (можно брать любое отличное от точки)

   while (currentSymbol <> stop_symb) do // пока пользователь не введёт точку
   begin
   
      {предложим вести и считаем очередной символ}
      Writeln('Введите очередной символ последовательности: ');
      Readln(currentSymbol);  // считываем очередной символ
   
      //my_sequence += currentSymbol; // (для понимания) добавляем очередной символ к последовательности (не обязательно)
    
      {проверим, что за очередной символ
         в последовательности мы встретили и отреагируем,
         если это скобка}
      if (currentSymbol = '(') then // если это открывающая скобка
         bracketsDif :=  bracketsDif + 1 // увеличим разницу
      else if (currentSymbol = ')') then // если это закрывающая скобка
         bracketsDif :=  bracketsDif - 1; // уменьшим разницу
    
    
      {далее проверим - не пора ли уже прервать цикл}
 
      if (bracketsDif < 0) then  // если число закрывающих скобок превысило число открывающих
          break; // выходим из текущего цикла
         
   end; // конец цикла перебора символов последовательности
    
   {выведем ответ} 
   if (bracketsDif = 0) then
      Writeln ('YES') // скобки в порядке
   else
      Writeln ('NO'); // что-то не то
      
   //Writeln('Получили последовательность: ' + my_sequence); // (для понимания) - не обязательно
    
end.

Строки работающие с my_sequence можно расскомментировать для не очень длинных последовательностей, чтобы посмотреть какую последовательность мы получаем в итоге.