Насколько я понимаю, программа должна определять правильность расстановки скобок?
Меня здесь смущает строчка 
Код:
new(l);
 (по-моему, вместо этого должно быть l := nil;)
и строчка 
Код:
if s<>nil then t^.next:=s;
(в случае, когда s = nil, поле t^.next оказывается неинициализированным). Лучше просто 
Код:
  t^.next := s;
 (т.е. убрать if).
И, таки да, напишите, в каких случаях не идёт Ваша программа.