Задача: Проверить введеную строку - является она выражением или нет. Выражение задано на БНФ , как : <выражение>::=<логическая переменная>|(<выражение><знак><логическая переменная>) <переменная>::= true | false <знак>::= or | and
Вообщем блок-схемку начертил , перевел в код , но программка работать всеравно отказывается Вот что пока-что у меня получается :
Код | type TL=(znak,logvir,skotkr,skzakr); var a,b:TL; i:integer; s:string;
function chit_leks(s:string):TL; begin case s[i] of 't': begin if (s[i+1]='r')and(s[i+2]='u')and(s[i+3]='e') then begin result:=logvir; i:=i+4; end else halt; end; 'f': begin if (s[i+1]='a')and(s[i+2]='l')and(s[i+3]='s')and(s[i+4]='e') then begin result:=logvir; i:=i+4; end else halt; end; '(': begin result:=skotkr; i:=i+1; end; ')': begin result:=skzakr; i:=i+1; end; 'a': begin if (s[i+1]='n')and(s[i+2]='d') then begin result:=znak; i:=i+3; end else halt; end; 'o': begin if (s[i+1]='r') then begin result:=znak; i:=i+2; end else halt; end; end; end; procedure prov_vir(s:string); begin a:=chit_leks(s); case a of logvir: begin Label1.Caption:='Это выражение'; end; skotkr: begin prov_vir(s); b:=chit_leks(s); if b=znak then begin a:=prov_vir(s); b:=chit_leks(s); if a=skzakr then begin Label1.Caption:='Это выражение'; end else halt end else halt; end; begin s:=Edit1.Text; prov_vir(s); end.
|
|