dmyutro
а. Форматуйте код.
б. Звичайно компілятор показує в якому рядку проблема
б.1. мені каже що в цьому: Sign:(y); а конкретно "Calculator.pas(3) : Встречено ';', а ожидалось '..'"
0.0. Що малось на увазі, я чесно кажучи не збагну
Спробую розібрати Ваші думки:
так як отут:
Ви робите операцію яка порівнює два рядки, причому різні, причому при будь яких обставинах повертає false, я роблю висновок, що Ви хотіли змінну sign порівняти з знаком, а треба це робити отак
...
var Sign : Char; //або String, PChar, PAnsiChar і т.д.
...
if sign='-' then
  //Something
...
Sign : Char;//Один символ, Sign є змінна, Char - тип змінної, спитайте у гугловського, про типи в паскалі, або можете зразу почитати вікікнигу від одного нашого форумчанина
program Calculator;
  var a,b,x:real;
    Sign : Char;  
begin
  writeln('Ця програма розв''язує вирази а+b=х а-b=х');
  write('a=');
  readln(a);
  writeln('Виберіть знак додавання чи віднімання');
  write('');
  readln(Sign); //Отут ми в Sign читаєм наш знак від користувача, пам_ятайте що він може ввести будь-що
  writeln('Виберіть значення  b');
  write('b=');
  readln(b);
  if sign='-' then //змінну sign порівнюємо з рядком '-' (рядок, тому що в лапках одинарних)
    writeln ('x=',a-b) 
  else 
    if sign='+' then 
      writeln ('x=',a+b)
    else 
      writeln('You input error, please try again'); //А тут треба написати якшо нічого не допомогло
  
end.
П.С. Для досліджень використовувався PascalABC.NET, в турбо паскалі, щоб відкомпілювалось коментарі тре писати от в таких лапках {comment}