Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> синтаксический контроль заданного оператора 
:(
    Опции темы
lusuy
Дата 5.12.2008, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 1.12.2008

Репутация: нет
Всего: нет



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

Очен признателен за любую помощь.
PM MAIL   Вверх
cemick
Дата 6.12.2008, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 416
Регистрация: 6.7.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 6



Врядли кто поможет, тут либо гуглить, либо читать книгу дракона.. Поуму если делать, то разработка граматики, лексический анализатор, потом синтаксический.. Либо регулярными выражениями дешево и средито)))
PM MAIL WWW   Вверх
lusuy
Дата 10.12.2008, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 1.12.2008

Репутация: нет
Всего: нет



что-то написал, было условие что Отдельные части оператора разделяются группой пробелов:
Код

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.

подскажите пожалуйста как проверить порядок выполнения операторов, и число
      

Это сообщение отредактировал(а) lusuy - 10.12.2008, 11:40
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0441 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.