![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 19.05.2010
Сообщений: 2
|
![]()
Есть программа она по заданым граматикам анализирует строку! Но если я загружаю другую граматику из файла не происходит никоких изменений пока не перезайду! ПОМОГИТЕ ПЛЗ ОЧ НАДО!
procedure TForm1.FormCreate(Sender: TObject); var j,k:integer; begin //при создании окна: //загрузить правила в масив. и вывести их на экран. j:=0; k:=1; {$i-} assignfile(f,'gramatika.txt'); reset(f); {$i+} repeat j:=j+1; readln(f,s); for i:=1 to length(s) do begin if s[i]<>'|' then s1:=s1+s[i] else begin gram[j,k]:=s1; k:=k+1; s1:=''; end; end; k:=1; gr:=gr+1; Memo2.lines.add(s); until EOF(f); closefile(f); end; procedure TForm1.Button2Click(Sender: TObject); var firsttick:longint; begin label2.Caption:='Іде обробка!!!'; memo1.lines.Clear; memo1.lines.add('Починаємо з y1'); slovo:=edit1.text; n:=1; posi:=1; ura:=false; p:=false; repeat //проверка первых букв в правилах for j:=1 to 3 do if (gram[n,j][1]<>#0) and (gram[n,j][1]=slovo[posi]) then begin //если совпала какая-то, то: posi:=posi+1; //сдвинуть позицию в слове на 1 u:=true; memo1.lines.add('Співпало -> '+ gram[n,j]); //пауза для красоты... firsttick:=gettickCount; repeat progressbar1.Position:=gettickcount-firsttick; Application.ProcessMessages; until gettickcount-firsttick > 1000; break; //закончить цикл end; //если проверили и все совпало, то: if (posi>length(slovo)) and u and (gram[n,j][3]=#0) then begin ura:=true; p:=true; end; //если не совпали первые буквы, то выйти... if u<>true then p:=true; //если первая буква совпала в правиле, то проверяем вторую if u and (not p) then if gram[n,j][3]<>#0 then //проверка - не правило ли это? try n:=strtoint(gram[n,j][3]); except if (gram[n,j][3]<>#0) and (gram[n,j][3]=slovo[posi]) then begin posi:=posi+1; if posi-1>=length(slovo) then begin ura:=true; p:=true; end; end else //если вторая буква не совпала, то... end; u:=false; until p; if ura then label2.Caption:='Введене слово є вивідним в даній граматиці > ' + Edit1.Text else begin memo1.lines.Add('Неспівпало -> ' + gram[n,j]); label2.Caption:='Введене слово не є вивідним в даній граматиці > ' + Edit1.Text; end; end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if key=#13 then Button2.Click; end; procedure TForm1.Button3Click(Sender: TObject); begin if OpenDialog.Execute then begin Memo2.Lines.LoadFromFile(OpenDialog .FileName); Memo2.Lines.SaveToFile('gramatika.t xt'); end; end; procedure TForm1.N3Click(Sender: TObject); begin Close; end; end. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 04.05.2010
Сообщений: 495
|
![]()
Прикрепи весь проект.
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948 |
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 19.05.2010
Сообщений: 2
|
![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Лексический анализатор С++ | EniOk | Помощь студентам | 1 | 06.12.2009 15:43 |
морфологический анализатор | Lavisa | Помощь студентам | 0 | 19.10.2009 23:11 |
Спектральный анализатор | Vladya | Общие вопросы Delphi | 4 | 25.05.2009 11:16 |
Логический анализатор | NieL | Общие вопросы Delphi | 1 | 10.03.2009 13:28 |
Анализатор формул | KJIOyH | Помощь студентам | 1 | 05.11.2007 18:18 |