Автор: Пользователь скрыл имя, 12 Октября 2011 в 11:45, курсовая работа
Текст программы на Паскале хранится в файле на диске. Распечатать на экране текст программы, таким образом, чтобы в каждой строке размещался только один оператор. Организовать смещение операторов относительно операторных скобок, как это принято в Паскале. Для выполнения поставленной задачи использовалась среда программирования ИСР Delphi 7.0.
Введение………………………………………………………………………………….3
1. Разработка эскизного и технического проектов программы………………………..4
1.1 Назначение, область применения, постановка задачи …………………………4
1.2 Описание алгоритма………………………………………………………………5
1.3 Организация входных и выходных данных……………………………………..6
1.4 Выбор состава технических и ПС. Условия выполнения программы…………7
2. Разработка рабочего проекта…………………………………………………….……9
2.1 Разработка программы и написание …………. ………………………………….9
2.2 Спецификации программы……………………………………………………….13
2.3 Текст программы………………………………………………………………….13
2.4 Тестирование программы…………………………………………………………16
Заключение……………………………………………………………………………….17
Глоссарий………………………………………………………………………………...18
Список использованных источников……………..……………………………………20
Приложения……………………………………………………………………………...21
свойства:
Align = alClient
ScrollBars = ssBoth
Событий нет.
2 – компонент Panel1: Tpanel
Свойства:
Align = alRight
Событий нет.
3 - компонент Button1: Tbutton
Свойства:
Сaption = 'Открыть Паскаль файл'
События:
OnClick – открытие и обработка файла
4 – компонент OpenDialog: TopenDialog
Свойства:
Filter = 'Программа
на Паскале|*.pas|Все файлы|*.*
Событий нет.
Программную реализацию описанного алгоритма содержит единственный в коде обработчик события - Button1Click. Обобщенна блок – схема процедуры приведена в разделе «Описание алгоритма» на рисунке 1. Далее приводится более детальное описание данной процедуры.
В процедуре используются локальные переменные, описанные в разделе «Организация входных и выходных данных» в таблице 1.
После нажатия на кнопку Button1 вызывается диалоговое окно выбора файла для чтения. Если файл выбран, то происходит очистка поля (Memo1), в которое будет выведена программа, прочитанная из файла с новым форматированием. Далее присваиваются начальные значения всем переменным, и открывается файл для чтения, выбранный в диалоговом окне. Затем начинается цикл посимвольного перебора открытого файла. По мере того, как читаются новые символы, формируются слова, которые затем добавляются в переменную, хранящую новый текст программы из файла. К словам применяется необходимое форматирование (добавляются отступы, убираются лишние пробелы и переходы на новую строку).
Описание цикла. Сначала читается символ из открытого файла в переменную S. Если прочитанный символ – «(», то переменной, означающей что скобка открыта (Skobka), присваивается значение истины. Если же прочитанный символ – «)», то переменной, присваивается значение ложно. Далее в программе следуют аналогичные операции для тех случаев, если прочитанный символ – «’», «{», «}». А вот проверка на комментарий, обозначающийся в тексте программы знаком «//», осуществляется с помощью переменной, хранящей предыдущий символ - PS.
Например, если первый прочитанный символ - «/» и следующий символ такой же, то переменной означающей, что текущий читаемый из файла текст комментарий (KommenSL), присваивается истинное значение.
Далее в программе проверяется: если прочитанный символ не пробел и не один из двух знаков перехода на новую строку (#13, #10), то этот символ к переменной хранящей слово прибавляется и сохраняется в переменной PS. Таким образом, из файла посимвольно будет прочитано слово. Затем встречается еще одно условие, с помощью которого определяется конец слова: если прочитанный символ равен одному из значений – « », «;», #13, #10, то обрабатываются ниже описанные действия, иначе пропускаются.
Блок – схема5 описанных ниже действий приведена на рисунке 3. Далее в программе формируется из полученного слова новый текст программы. На рисунке 3 видно, что почти весь алгоритм состоит из многочисленных проверок разных условий, но именно благодаря им, формируется новый текст программы с необходимым форматированием.
После действий детально представленных на рисунке, новый полученный текст, хранящийся в переменной NewText, в водится в поле Memo1. После проделанных операций открытый файл закрывается и выводится сообщение об окончании процесса форматирования.
Рисунок 3 Блок – схема процедуры Button1Click
Исполняемый файл программы имеет название Project1.exe. Наименования файлов входящих в проект и краткая информация об их содержании отображены в таблице 2.
Таблица 2 - файлы проекта
Наименование | Назначение | Примечание |
Project1.dof | Файл параметров проекта | Содержит текущие установки проекта: настройки компилятора и компоновщика, имена служебных каталогов, условные директивы |
Project1.dpr | Файл проекта | Связывает все файлы, из которых состоит приложение |
Project1.cfg | Файл, содержащий настройки проекта | Содержит информацию о том, какие окна открыты и в каких позициях они расположены. |
Project1.res | Файл ресурсов | Содержит пиктограммы, графические изображения |
Unit1.pas | Файл программного модуля для формы Form1 | Определяет функциональность формы Form1 |
Unit1.dfm | Файл формы Form1 | Содержит список свойств всех компонентов, включённых в форму Form1 |
Unit1.dcu | Объектный файл для Unit1.pas | Откомпилированная версия Unit1.pas |
Текст программы
для формы – Form1
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Panel1: TPanel;
OpenDialog: TOpenDialog;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var PlusTab, //Указывает что нужно увеличить Tab (отступ)
Perevod, //Указывает что нужно добавить переход
Zapret,
Skobka, //Указывает что открыта скобка
Apostrof, //Указывает что открыты ковычки
KommenSK, KommenSL:Boolean; //Указывают что текущий текст - комментарий ({, //)
Slovo, //Хранит слово
Tab,
NewText:string; //Новый текст программы
PS,
S:Char; //Текущий прочитанный из файла символ
F:File of Char; //Файл с программой для обработки
begin
if OpenDialog.Execute then begin
Memo1.Clear; //Очистка поля для вывода нового текста программы
//Начальные значения
PlusTab:=False; Perevod:=False; Zapret:=False; Skobka:=False; Apostrof:=False;
KommenSK:=False; KommenSL:= False;
PS:=' '; Slovo:=''; Tab:=''; NewText:='';
//Открытие файла
AssignFile(f,OpenDialog.
Reset(F);
//Посимвольное считывание данных из файла
while not Eof(F) do begin
Read(F, S); //Читаем символ из открытого файла
//Если скобка открыта, то перенос после ';' не добавляется
if S='(' then Skobka:=True;
if S=')' then Skobka:=False;
//Если ковычки открыты, то перенос после ';' не добавляется
if S=#39 then Apostrof:=not Apostrof;
//Если фиг. скобки открыты, то перенос после ';' не добавляется
if S='{' then KommenSK:=True; //Если KommenSK = True, то
if S='}' then KommenSK:=False; //текущий текст - комментарий
//Если встретится в тексте '//', то далее следует комментарий
if (S='/') and (PS='/') then KommenSL:=True;
//Посимвольно формируется слово из считываемых символов
if (S<>' ') and (S<>#13) and (S<>#10) then begin
Slovo:=Slovo + S; //Прочитанный символ добавляется к слову
PS:=S; //Сохраняется прочитанный символ
end;
//Если слово заканчивается, то происходит его обработка
if (S=' ') or (S=';') or (S=#13) or (S=#10) then begin
//Если полученное слово такое, то будет добавлен
//к тексту переход и увеличится отступ
if (LowerCase(Slovo)='begin') or (LowerCase(Slovo)='repeat') or
(LowerCase(Slovo)='type') or (LowerCase(Slovo)='try')
then begin Perevod:=True; PlusTab:=True end;
//Если полученное слово такое, то уменьшится отступ, будет добавлен
//переход и если в конце нового текста нет перехода то перед словом
//добавляется переход
if (LowerCase(Slovo)='end;') or (LowerCase(Slovo)='end.')
or (LowerCase(Slovo)='end') then begin
if Tab<>'' then begin delete(Tab,1,2); Perevod:=True; end;
if copy(NewText, length(NewText),1)<>#10 then NewText:=NewText+#13#10;
end;
//Если полученное слово такое, то просто уменьшится отступ
if LowerCase(Slovo)='until' then if Tab<>'' then delete(Tab,1,2);
//Если встретится ';' и нет открытых скобок и ковычек,
//текст не комментарий, то будет добавлен переход
if (S=';') and (not Skobka) and (not Apostrof)
and (not KommenSK) and (not KommenSL) then Perevod:=True;
//Если слово имеется, то оно будет добавлено к новому тексту
if Slovo<>'' then begin
//Если последним в тексте стоит переход, то добавляется отступ
if copy(NewText, length(NewText),1)=#10 then NewText:=NewText+tab;
NewText:=NewText+Slovo; //К тексту добавляется слово
end;
//Добавление к тексту перехода
if Perevod then begin
NewText:=NewText + #13#10;
PS:=#10; //Запоминание последнего символа
Perevod:=False; //Чтобы далее не добавился еще переход
end;
//Устанавливается допуск к тексту на добавление прочитанного символа
if S=';' then Zapret:=True; //В добавленом слове уже присутствует ';'
//Запрет на добавление лишних пробелов и переходов на новую строку
if (S=' ') or (S=#13) then
if (PS=' ') or (PS=#10) then Zapret:=True else Zapret:=False;
//Если нет запрета, то прочитанный символ добавляется к тексту
if not Zapret then NewText:=NewText + S;
Slovo:=''; //Очищается слово
if (S=#10) or (S=' ') then PS:=S; //Запоминается текущий символ
//Если был добавлен переход то комментарий полученный от '//' закрывается
if S=#10 then KommenSL:=False;
//Если слово было 'begin' и т. п., то отступ увеличивается
if PlusTab then begin Tab:=Tab+' '; PlusTab:=False end;
Информация о работе Разработка программы обработки текста программы на языке Паскаль