close

Вход

Забыли?

вход по аккаунту

?

4 (4)

код для вставкиСкачать
Лабораторная работа №4
Разработка лексического анализатора
Задание: Данной программе будет дано 2 текстовых документа: в одном будет находиться исходный текст, в во втором - ключевые слова. Программа будет выбирать из исходного текста перечисленные во втором файле ключевые слова и записывать их в массив TAB_K. Аналогично в массив TAB_I будут записываться идентификаторы.
Текст программы:
program LeksAnal;
var s,c:string;
k,kl,id,tab_i,tab_k:array [1..100] of string;
f,kluch:text;
st,i,x,n,o,j,d,d2,l,q,r,r2:integer;
begin d:=1;
d2:=1;
assign(kluch,'Ключ слова.txt');
reset(kluch);
i:=0;
r:=0;
r2:=0;
repeat i:=i+1;
readln (kluch,c);
kl[i]:=c;
until eof(kluch);
o:=i;
close(kluch);
assign(f,'Текст.txt');
reset(f);
repeat
readln(f,c);
if (((c[1]>='A') and (c[1]<='Z')) or ((c[1]>='a') and (c[1]<='z'))) then
begin
k[1]:=c[1];
i:=1; x:=2;
st:=1;
end;
repeat
case st of
1: begin if (((c[x]>='A') and (c[x]<='Z')) or ((c[x]>='a') and (c[x]<='z')) or ((c[x]>='0') and (c[x]<='9'))) then
begin
k[i]:=k[i]+c[x];
inc(x);
end
else begin st:=2; x:=x+1; end;
end;
2: begin if (((c[x]>='A') and (c[x]<='Z')) or ((c[x]>='a') and (c[x]<='z'))) then
begin
i:=i+1;
k[i]:=c[x];
x:=x+1;
st:=1;
end
else x:=x+1;
end; end;
until length(c)=x;
n:=i;
for i:=1 to n do
begin l:=1;
for j:=1 to o do
if k[i]=kl[j] then l:=0;
if l=1 then begin for q:=1 to d do
if k[i]=tab_i[q] then l:=0;
if l=1 then begin r:=r+1; tab_i[r]:=k[i]; d:=d+1;end;
end;
end;
for i:=1 to n do
begin l:=0;
for j:=1 to o do
if k[i]=kl[j] then l:=1;
if l=1 then begin for q:=1 to d2 do
if k[i]=tab_k[q] then l:=0;
if l=1 then begin r2:=r2+1; tab_k[r2]:=k[i]; d2:=d2+1;end;
end;
end;
until eof(f);
close(f);
for i:=1 to r do
writeln (tab_i[i]);
writeln;
for i:=1 to r2 do
writeln (tab_k[i]);
end.
Пример:
В файле Текст.txt находится:
var x,y:integer;
f:real;
begin x:=5+6;
y:=x^2;
readln (c);
f:=(y*x)/c
writeln (f);
end.
В файле Ключ слова.txt находится:
var
integer
begin
writeln
end
real
readln
В результате компиляции:
x
y
fидентификаторы
c
var
integer
real
beginключи
readln
writeln
end
Документ
Категория
Рефераты
Просмотров
5
Размер файла
21 Кб
Теги
1/--страниц
Пожаловаться на содержимое документа