TabSheet1: TTabSheet;
PageControl2: TPageControl;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
GroupBox4: TGroupBox;
GroupBox5: TGroupBox;
GroupBox6: TGroupBox;
GroupBox7: TGroupBox;
Memo2: TMemo;
Memo3: TMemo;
Memo4: TMemo;
Memo5: TMemo;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
mas_zn=array [0..2] of string;
var
Form1: TForm1;
LexTable: array of string;
mas_k, mas_i, mas_o, mas_r, mas_n, mas_a, mas_v :array of mas_zn;
rav1,rav2:integer;
implementation
uses Unit2;
{$R *.dfm}
procedure MakeStringrid;
var
i, j:integer;
begin
for i:=1 to 7 do
begin
TStringGrid(form1.FindComponent('StringGrid' + IntToStr(i))).RowCount := 2;
for j:=0 to 2 do
TStringGrid(form1.FindComponent('StringGrid' + IntToStr(i))).Cells[j,1] := '';
TStringGrid(form1.FindComponent('StringGrid' + IntToStr(i))).Cells[0,0] := 'N';
TStringGrid(form1.FindComponent('StringGrid' + IntToStr(i))).Cells[1,0] := 'Знач.';
TStringGrid(form1.FindComponent('StringGrid' + IntToStr(i))).Cells[2,0] := 'Kод';
end;
end;
function MakeString(kod:TStrings):string;
var
i:integer;
s:string;
begin
for i:=0 to kod. Count-1 do s:=s+kod[i]+' ';
result:=s;
end;
function DeleteSpace(s:string):string;
var
i, j:integer;
new_s:string;
begin
new_s:='';
for i:=1 to length(s) do
if length(new_s)>0 then
begin
if (s[i]=' ') and (new_s[length(new_s)]<>' ') then
new_s:=new_s+s[i]
else
if (s[i]<>' ') then
new_s:=new_s+s[i];
end
else
new_s:=new_s+s[i];
if new_s[1]=' ' then
new_s:=copy(new_s,2,length(new_s));
if new_s<>'' then
if new_s[length(new_s)]=' ' then
new_s:=copy(new_s,1,length(new_s)-1);
result:=new_s;
end;
procedure AddToMas(str:string;num:integer);
var
p1,p2,p3:integer;
b:boolean;
s1,s2:string;
begin
setlength(LexTable, length(LexTable)+1);
LexTable[length(LexTable)-1]:=str;
case num of
1: begin
b:=false;
if length(mas_k)=0 then
b:=true
else
begin
b:=true;
for p1:=0 to length(mas_k)-1 do
if mas_k[p1][1]=str then
begin
b:=false;
s1:='('+'key,'+inttostr(p1+1)+')';
s2:=mas_k[p1][2];
end;
end;
if b then
begin
SetLength(mas_k, length(mas_k)+1);
mas_k[length(mas_k)-1][0]:=inttostr(length(mas_k));
mas_k[length(mas_k)-1][1]:=str;
mas_k[length(mas_k)-1][2]:=str;
s1:='('+'key,'+mas_k[length(mas_k)-1][0]+')';
s2:=mas_k[length(mas_k)-1][2];
end
end;
2: begin
b:=false;
if length(mas_o)=0 then
b:=true
else
begin
b:=true;
for p1:=0 to length(mas_o)-1 do
if mas_o[p1][1]=str then
begin
b:=false;
s1:='('+'oper,'+inttostr(p1+1)+')';
s2:=mas_o[p1][2];
end;
end;
if b then
begin
SetLength(mas_o, length(mas_o)+1);
mas_o[length(mas_o)-1][0]:=inttostr(length(mas_o));
mas_o[length(mas_o)-1][1]:=str;
mas_o[length(mas_o)-1][2]:=str;
s1:='('+'oper,'+mas_o[length(mas_o)-1][0]+')';
s2:=mas_o[length(mas_o)-1][2];
end
end;
3: begin
b:=false;
if length(mas_i)=0 then
b:=true
else
begin
b:=true;
for p1:=0 to length(mas_i)-1 do
if mas_i[p1][1]=str then
begin
b:=false;
s1:='('+'id,'+inttostr(p1+1)+')';
s2:=mas_i[p1][2];
end;
end;
if b then
begin
SetLength(mas_i, length(mas_i)+1);
mas_i[length(mas_i)-1][0]:=inttostr(length(mas_i));
mas_i[length(mas_i)-1][1]:=str;
mas_i[length(mas_i)-1][2]:='id';
s1:='('+'id,'+mas_i[length(mas_i)-1][0]+')';
s2:=mas_i[length(mas_i)-1][2];
end
end;
4: begin
b:=false;
if length(mas_r)=0 then
b:=true
else
begin
b:=true;
for p1:=0 to length(mas_r)-1 do
if mas_r[p1][1]=str then
begin
b:=false;
s1:='('+'razd,'+inttostr(p1+1)+')';
s2:=mas_r[p1][2];
end;
end;
if b then
begin
SetLength(mas_r, length(mas_r)+1);
mas_r[length(mas_r)-1][0]:=inttostr(length(mas_r));
mas_r[length(mas_r)-1][1]:=str;
mas_r[length(mas_r)-1][2]:=str;
s1:='('+'razd,'+mas_r[length(mas_r)-1][0]+')';
s2:=mas_r[length(mas_r)-1][2];
end
end;
5: begin
b:=false;
if length(mas_n)=0 then
b:=true
else
begin
b:=true;
for p1:=0 to length(mas_n)-1 do
if mas_n[p1][1]=str then
begin
b:=false;
s1:='('+'num,'+inttostr(p1+1)+')';
s2:=mas_n[p1][2];
end;
end;
if b then
begin
SetLength(mas_n, length(mas_n)+1);
mas_n[length(mas_n)-1][0]:=inttostr(length(mas_n));
mas_n[length(mas_n)-1][1]:=str;
mas_n[length(mas_n)-1][2]:='num';
s1:='('+'num,'+mas_n[length(mas_n)-1][0]+')';
s2:=mas_n[length(mas_n)-1][2];
end
end;
6: begin
b:=false;
if length(mas_a)=0 then
b:=true
else
begin
b:=true;
for p1:=0 to length(mas_a)-1 do
if mas_a[p1][1]=str then
begin
b:=false;
s1:='('+'ar,'+inttostr(p1+1)+')';
s2:=mas_a[p1][2];
end;
end;
if b then
begin
SetLength(mas_a, length(mas_a)+1);
mas_a[length(mas_a)-1][0]:=inttostr(length(mas_a));
mas_a[length(mas_a)-1][1]:=str;
mas_a[length(mas_a)-1][2]:='ar';
s1:='('+'ar,'+mas_a[length(mas_a)-1][0]+')';
s2:=mas_a[length(mas_a)-1][2];
end
end;
7: begin
b:=false;
if length(mas_v)=0 then
b:=true
else
begin
b:=true;
for p1:=0 to length(mas_v)-1 do
if mas_v[p1][1]=str then
begin
b:=false;
s1:='('+'id,'+inttostr(p1+1)+')';
s2:=mas_v[p1][2];
end;
end;
if b then
begin
SetLength(mas_v, length(mas_v)+1);
mas_v[length(mas_v)-1][0]:=inttostr(length(mas_v));
mas_v[length(mas_v)-1][1]:=str;
mas_v[length(mas_v)-1][2]:='real';
s1:='('+'id,'+mas_v[length(mas_v)-1][0]+')';
s2:=mas_v[length(mas_v)-1][2];
end
end;
end;
Form1.Memo2.Text:=Form1.Memo2.Text+s2+' ';
Form1.Memo3.Text:=Form1.Memo3.Text+s1;
end;
//лексический разбор
function Razbor(s:string):boolean;
var
i, j,q:integer;
res:string;
str:string;
chr:char;
otvet:boolean;
begin
setlength(LexTable,0);
SetLength(mas_k,0);
SetLength(mas_o,0);
SetLength(mas_i,0);
SetLength(mas_r,0);
SetLength(mas_n,0);
SetLength(mas_a,0);
SetLength(mas_v,0);
Form1.Memo2.Clear;
otvet:=true;
q:=0;
i:=1;
s:=LowerCase(s);
j:=length(s);
res:='';
while i<=j do
case q of
0: case s[i] of
'p': begin //public private protected published
q:=1;
res:=s[i];
inc(i);
end;
'c': begin //class
q:=20;
res:=s[i];
inc(i);
end;
'i': begin //int
q:=50;
res:=s[i];
inc(i);
end;
'r': begin //real
q:=54;
res:=s[i];
inc(i);
end;
//=================================
'=': begin
q:=0;
res:=s[i];
AddToMas(res,2);
res:='';
inc(i);
end;
'<': begin
q:=24;
res:=s[i];
inc(i);
end;
'>': begin
q:=25;
res:=s[i];
inc(i);
end;
';': begin
q:=0;
res:=s[i];
AddToMas(res,4);
res:='';
inc(i);
end;
'.': begin
q:=0;
res:=s[i];
AddToMas(res,4);
res:='';
inc(i);
end;
',': begin
q:=0;
res:=s[i];
AddToMas(res,4);
res:='';
inc(i);
end;
':': begin
q:=2005;
res:=s[i];
inc(i);
end;
'(': begin
q:=0;
res:=s[i];
AddToMas(res,4);
res:='';
inc(i);
end;
')': begin
q:=0;
res:=s[i];
AddToMas(res,4);
res:='';
inc(i);
end;
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 |


