МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний університет «Львівська політехніка»
РОБОТА З ФАЙЛАМИ.
ЛАБОРАТОРНА РОБОТА № 4
З КУРСУ «АЛГОРИТМІЧНІ МОВИ І ПРОГРАМУВАННЯ»
для студентів спеціальності 6.0914
«Комп’ютеризовані системи, автоматика і управління»
Львів 2008
ПОВНИЙ ТЕКСТ ЗАВДАННЯ
Дано текстовий файл в якому міститься програма мовою Турбо Паскаль (Лабораторна робота №3). Словами є слова в коментарях, назви ідентифікаторів, зарезервовані слова, які розділяються між собою згідно із синтаксисом мови Турбо Паскаль.
Написати програму мовою Турбо Паскаль обробки текстового файлу з використанням розроблених процедур та функцій для роботи зі стрічками.
Сформувати із заданого текстовий файл в якому вилучити символи “(”, “)”. Написати підпрограму, яка здійснює аналіз програми мовою Паскаль, представленої у вигляді заданого текстового файлу на наявність помилок по написанню процедур введення “READ”, “READLN”. Перевірити заданий та одержаний текстові файли на наявність помилок в процедурах введення.
БЛОК-СХЕМА АЛГОРИТМУ ПРОГРАМИ
ПРОЦЕДУРА ПОШУКУ ПОМИЛКИ ERROR_SEARCH :
СПИСОК ІДЕНТИФІКАТОРІВ КОНСТАНТ, ЗМІННИХ, ПРОЦЕДУР ТА ФУНКЦІЙ, ВИКОРИСТАНИХ У ПРОГРАМІ, ТА ЇХ ПОЯСНЕННЯ
СПИСОК :
CH
CHECK
SYMBOL
X
Y
I
V
K
C
M
N
ERROR_SEARCH
ПОЯСНЕННЯ ІДЕНТИФІКАТОРІВ :
CH – змінна для зберігання символів файлу під час читання
CHECK – змінна для накопичення символів під час читання у змінній SYMBOL
SYMBOL – накопичувач символів для порівняння
X – ідентифікатор текстового файлу Lab_3 – з якого читаються дані
Y – ідентифікатор текстового файлу Lab_3(Copied) – куди записуються дані
I – лічильник для накопичення у SYMBOL
V – логічна змінна для перевірки вірності умови
K – логічна змінна для перевірки вірності умови
C – логічна змінна для перевірки вірності умови
M – логічна змінна для перевірки вірності умови
N – логічна змінна для перевірки вірності умови
ERROR_SEARCH – процедура сортування матриці A
Змінні V,K,C,M,N – ВИКОРИСТОВУЮТЬСЯ У ДВОХ ПІДПРОГРАМАХ ДЛЯ ДІАГНОСТИКИ ПОМИЛКИ :
ПЕРЕВІРКА НАЯВНОСТІ ДУЖОК
СИНТАКСИС ПРОЦЕДУРИ ЯК ЗАРЕЗЕРВОВАНОГО СЛОВА
НАЯВНІСТЬ ;
ПОСЛІДОВНОСТІ У ДУЖКАХ ТИПУ : ІДЕНТИФІКАТОР , …
ОСТАТОЧНО ВІДЛАГОДЖЕНИЙ ТЕКСТ ПРОГРАМИ
program Lab_4;
uses crt;
var ch:char;
check,symbol:string;
x,y:text;
i:integer;
v,k,c,m,n:boolean;
procedure Error_Search;
begin
writeln('Program file check :');
assign(y,'d:\lab_3(copied).txt');
writeln;
writeln('External Read procedure Analyse');
reset(y);
while not(eof(y)) do begin
read(y,ch);
check:=ch;
symbol:='';
if(ch='r') then
for i:=1 to 4 do begin symbol:=(Symbol+check);read(y,ch);check:=ch;end;
if symbol='read' then begin k:=true;if ch='(' then m:=true;
repeat if ch='(' then c:=true;if ch=')' then begin v:=true;read(y,ch);
if ch=';' then n:=true;end;
read(y,ch);
until eoln(y);
end;
end;
if (c=true)and(m=true) then writeln('Left ( present')
else if k=true then writeln('Error.No symbol (');
if v=true then writeln('Right ) present')
else if k=true then writeln('Error.No symbol )');
if k=false then writeln('Syntax read as word false.Analyse aborted')
else writeln('Syntax read as word true');
if v=true then if n=true then writeln('Symbol ; present in order for read procedure')
else writeln('No symbol ;.Error.Syntax read procedure false')
else if k=true then writeln('Error.Can not finish symbol ; check - there is no )');
reset(y);
Writeln;
writeln;
writeln('Internal Procedure read analyse');
while not(eof(y)) do begin
read(y,ch);
check:=ch;
symbol:='';
if(ch='r') then
for i:=1 to 4 do begin symbol:=(Symbol+check);read(y,ch);check:=ch;end;
if symbol='read' then if ch='(' then begin read(y,ch); while not(ch=')') do begin
if (ch in['a'..'z']) then m:=true
else c:=false;read(y,ch);
if (m=true)and((ch=',')or(ch='[')or(ch=']')) then n:=true
else v:=false;read(y,ch);
end end
else begin writeln('Error.Internal read procedure check failed - no (');k:=false;end;
end;
if Not(k=false) then
if (m=true)and(c=false) then writeln('Error.No idenefier after symbol ( or after ,,[,]')
else
if (n=true)and not(v=false) then writeln('Internal Syntax check ok')
else writeln('Error.No symbol ,,[,] after idenefier');
close(y);
assign(x,'d:\lab_3.pas');
writeln;
writeln('Lab_3 file check :');
writeln;
writeln('External Read procedure Analyse');
reset(x);
while not(eof(x)) do begin
read(x,ch);
check:=ch;
symbol:='';
if(ch='r') then
for i:=1 to 4 do begin symbol:=(Symbol+check);read(x,ch);check:=ch;end;
if symbol='read' then begin k:=true;if ch='(' then m:=true;
repeat if ch='(' then c:=true;if ch=')' then begin v:=true;read(x,ch);
if ch=';' then n:=true;end;
read(x,ch);
until eoln(x);
end;
end;
if (c=true)and(m=true) then writeln('Left ( present')
else if k=true then writeln('Error.No symbol (');
if v=true then writeln('Right ) present')
else if k=true then writeln('Error.No symbol )');
if k=false then writeln('Syntax read as word false.Analyse aborted')
else writeln('Syntax read as word true');
if v=true then if n=true then writeln('Symbol ; present in order for read procedure')
else writeln('No symbol ;.Error.Syntax read procedure false')
else if k=true then writeln('Error.Can not finish symbol ; check - there is no )');
reset(x);
Writeln;
writeln;
writeln('Internal Procedure read analyse');
while not(eof(x)) do begin
read(x,ch);
check:=ch;
symbol:='';
if(ch='r') then
for i:=1 to 4 do begin symbol:=(Symbol+check);read(x,ch);check:=ch;end;
if symbol='read' then if ch='(' then begin read(x,ch); while not(ch=')') do begin
if (ch in['a'..'z']) then m:=true
else c:=false;read(x,ch);
if (m=true)and((ch=',')or(ch='[')or(ch=']')) then n:=true
else v:=false;read(x,ch);
end end
else begin writeln('Error.Internal read procedure check failed - no (');k:=false;end;
end;
if Not(k=false) then
if (m=true)and(c=false) then writeln('Error.No idenefier after symbol ( or after ,,[,]')
else
if (n=true)and not(v=false) then writeln('Internal Syntax check ok')
else writeln('Error.No symbol ,,[,] after idenefier');
close(x);
writeln;
writeln('No procedure Readln available.Check impossible');
end;
begin
clrscr;
assign(x,'d:\lab_3.pas');
assign(y,'D:\Lab_3(copied).txt');
reset (x);
rewrite(y);
while not(eof(x)) do begin
read(x,ch);
if (ch=')') or (ch='(') then
while (ch=')') or (ch='(') do
read(x,ch);
write(y,ch);
end;
close(x);
close(y);
Error_Search;
readln;
end.
РЕЗУЛЬТАТИ ВИКОНАННЯ ПРОГРАМИ
Program file check :
External Read procedure Analyse
Error.No symbol (
Error.No symbol )
Syntax read as word true
Error.Can not finish symbol ; check - there is no )
Internal Procedure read analyse
Error.Internal read procedure check failed - no (
Lab_3 file check :
External Read procedure Analyse
Left ( present
Right ) present
Syntax read as word true
Symbol ; present in order for read procedure
Internal Procedure read analyse
Internal Syntax check ok
No procedure Readln available.Check impossible