Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2008, 21:14   #1
lusuj
 
Аватар для lusuj
 
Регистрация: 11.11.2008
Сообщений: 9
По умолчанию delphi синтаксический контроль заданного оператора

помогите пожалуйста кто чем может. Нужно разработать программу, проводящую синтаксический контроль введенного оператора паскаля (If <имя1> = <имя2> Then Goto <метка> else <имя3>:=<число>). Проверяются: числа, имена, баланс скобок, знаки операций. Должны быть подпрограммы проверки имени и проверки числа. При обнаружении ошибок выводить сведения: тип ошибки и место ошибки в операторе.

Очен признателен за любую помощь.
lusuj вне форума Ответить с цитированием
Старый 10.12.2008, 22:42   #2
lusuj
 
Аватар для lusuj
 
Регистрация: 11.11.2008
Сообщений: 9
По умолчанию

что-то написал, было условие что отдельные части оператора разделяются группой пробелов:
Код:
procedure TForm1.Button1Click(Sender: TObject);
procedure name(str:string; var q,w,r,t:integer);
  begin
   q:=pos(' If ',str);
   if  q=0 then label7.Caption:='ошибка, в имени: "if"; If <имя1> =  <имя2> '  ;
   w:=pos(' Then ',str);
   if  w=0 then label8.Caption:='ошибка, в имени: "Then"; if .. Then Goto <метка> else .. ';
    r:=pos(' Goto ',str);
   if  r=0 then label9.Caption:='ошибка, в имени: "Goto"; Then Goto <метка> else <имя3>:=<число> ';
t:=pos(' else ',str);
   if  t=0 then label10.Caption:='ошибка, в имени: "else"; Then Goto <метка> else <имя3>:=<число> '
    end;
var
str,s1,s2,s3,s4,s5:string;
F : TextFile;
x,y,a,i,s,d,k,j,h,g:integer;
begin
   Label2.Caption:='';
   Label3.Caption:='';
   Label4.Caption:='';
   Label5.Caption:='';
   Label6.Caption:='';
   Label7.Caption:='';
   Label8.Caption:='';
   Label9.Caption:='';
   Label10.Caption:='';
   Label11.Caption:='';
   AssignFile(F, 'text.txt');
   Rewrite(F);
     s1:='ошибка"="; If <имя1> =  <имя2> ';
     s2:='ошибка ":="; Then Goto <метка> else <имя3>:=<число> ';
     s3:='превышено количество оператора "=" ';
     s4:='превышено количество оператора ":=" ';
     s5:='баланс скобок нарушен';
       str:= edit1.Text;
       x:=pos(' = ',str);
       y:=pos(' := ',str);
       if  x=0 then label2.Caption:=s1;
       if  x=0 then writeln(F, s1);
       if  y=0 then label3.Caption:=s2;
       if  y=0 then writeln(F, s1);
       s:=0;
       d:=0;
       for i:=1 to length(str) do
       begin
       if str[i]='=' then inc(s);
       if str[i]=':=' then inc(d);
       end;
       if s>2 then label5.Caption:=s3;
       if s>2 then writeln(F, s3);
       if d>1 then label6.Caption:=s4;
       if d>1 then writeln(F, s4);
       a:=0;
       for i:=1 to length(str) do
         begin
         if str[i]='(' then inc(a);
         if str[i]=')' then dec(a);
         end;
       if a<>0 then label4.Caption:=s5;
       if a<>0 then writeln(F, s5);
       name(str,k,j,h,g);
       if k=0 then writeln(f,'ошибка, в имени: "if"; If <имя1> =  <имя2> ') ;
       if j=0 then writeln(f,'ошибка, в имени: "Then"; if .. Then Goto <метка> else .. ');
       if h=0 then writeln(f,'ошибка, в имени: "Goto"; Then Goto <метка> else <имя3>:=<число> ');
       if g=0 then writeln(f,'ошибка, в имени: "else"; Then Goto <метка> else <имя3>:=<число> ');
   CloseFile(F)
end;
end.
подскажите пожалуйста как проверить порядок выполнения операторов, и число
lusuj вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Синтаксический анализатор delphin100 Общие вопросы Delphi 10 01.05.2010 12:50
Синтаксический анализ оператора языка Паскаль Dawystrik Паскаль, Turbo Pascal, PascalABC.NET 2 24.10.2008 09:48
Перегрузка оператора Crucian Общие вопросы C/C++ 2 22.10.2007 09:44
Поиск числа, большего заданного pirozho4ek Паскаль, Turbo Pascal, PascalABC.NET 5 21.05.2007 21:39