Код
 Type
point = ^MyWord;
MyWord = record
ch: char;
next: point
end;
var
slovo:point;
 point = ^MyWord;
MyWord = record
ch: char;
next: point
end;
var
slovo:point;
  writeln('HABEPuTE C/\OBO C "." HA KOHCE ');
  while r^.ch <> '.' do begin ...
   writeln('HABEPuTE C/\OBO C "." HA KOHCE ');
  repeat
      new( r );
      r^.next := nil;
      read(r^.ch);
      if first = nil then first := r
      else last^.next := r;
      last := r;
  until r^.ch = '.';
 , тогда ошибка уйдет, и больше не вернется procedure printreverse(first: point);
begin
if first^.ch <> '.' then
printreverse(first^.next);
write(first^.ch);
end;