Разработка программы обработки текста программы на языке Паскаль
Основные данные о работе
| Версия шаблона | 2.1 |
| Филиал | Самарский |
| Вид работы | Курсовая работа |
| Название дисциплины | Программирование на языке высокого уровня |
| Тема | Разработка программы обработки текста программы на языке Паскаль |
| Фамилия студента | Шавшин |
| Имя студента | Михаил |
| Отчество студента | Владимирович |
| № контракта | 03900070604315 |
Содержание
Введение…………………………………………………………
1. Разработка эскизного и технического проектов программы………………………..4
1.1 Назначение, область применения, постановка задачи …………………………4
1.2
Описание алгоритма………………………………
1.3
Организация входных и
1.4
Выбор состава технических и
ПС. Условия выполнения программы……
2. Разработка рабочего
проекта…………………………………………………….……
2.1 Разработка программы и написание …………. ………………………………….9
2.2 Спецификации
программы………………………………………………………
2.3 Текст
программы………………………………………………………
2.4 Тестирование
программы………………………………………………………
Заключение……………………………………………………
Глоссарий………………………………………………………
Список использованных
источников……………..…………………………………
Приложения……………………………………………………
Введение
Тема курсовой работы: Разработка программы обработки текста программы на языке Паскаль». Условие задачи:
Текст программы на Паскале хранится в файле на диске. Распечатать на экране текст программы, таким образом, чтобы в каждой строке размещался только один оператор. Организовать смещение операторов относительно операторных скобок, как это принято в Паскале. Для выполнения поставленной задачи использовалась среда программирования ИСР Delphi 7.0.
Borland
Delphi 7.0 - это объектно-ориентированная
среда визуального
ИСР Delphi – это среда разработки программ, ориентированных на работу в Windows. В основе идеологии Delphi лежит технология визуального проектирования и методология объектно-ориентированного программирования. Для представления программ в Delphi используется разработанный фирмой Borland язык Object Pascal, в основе которого лежит Turbo Pascal. Слово “Object” особо подчеркивает, что язык поддерживает концепцию объектно-ориентированного программирования.
Delphi
представляет собой сложную
Основная часть
1РАЗРАБОТКА ЭСКИЗНОГО И ТЕХНИЧЕСКОГО ПРОЕКТОВ ПРОГРАММЫ
1.1 Назначение, область применения, постановка задачи.
Необходимо разработать учебную программу. Область применения: инструмент программиста для приведения к более наглядному виду текста программы написанной на Паскале.
Поскольку ставится задача
В
условии задачи указывается на то,
что загружаемый текст
Для реализации данных задач будем использовать одну процедуру, в которой будем из открытого файла посимвольно читать весь текст, при этом формировать в текстовой переменной слова. Потом образованные слова будем добавлять к другой текстовой переменной, содержащей уже новое форматирование прочитанного из файла текста, при этом в новом тексте будут удалены лишние пробелы и переходы на новую строку.
Слова представляют собой набор символов, которые были последовательно прочитаны из открытого файла до пробела или до перехода на новую строку.
В зависимости от значения тестовой переменной, содержащей полученное слово, будем в новом тексте либо перед словом, либо после него добавлять необходимое количество отступов и переходы на новую строку.
После добавления прочитанного из файла слова к новому тексту программы, переменная, содержащая это слово, очищается и тем самым подготавливается для чтения следующего слова.
1.2 Описание алгоритма
Как
было сказано в разделе «Постановка
задачи», из файла посимвольно будем
читать слова, в зависимости от значения
которых, будем в новом тексте
прочитанной программы
Обобщенная схема алгоритма приведена на рисунке 1.
При формировании нового текста также учитываются комментарии, кавычки, открытые скобки в объявлениях и реализациях процедур и функций и т. д., встречающиеся в программе.
В блок-схеме, изображенной на рисунке 1, это представлено блоком «Добавление слова к новому тексту с форматированием».
Для того чтобы различить комментарий в тексте программы, который помечается знаком «//», для определения переходов на новую строку, обозначающихся в файле двумя символами #13#10, а также для использования в других местах программы необходима переменная, которая запоминает прочитанный символ.
Когда символ сохранен и читается из файла новый символ, то он сравнивается с сохраненным, таким образом, например, комбинация символов «//» будет означать, что далее следует комментарий.
В условии задачи сказано чтобы в каждой строке размещался только один оператор. Для реализации этого условия если в программе встретится символ «;», то формирование слова заканчивается и после добавления его к новому тексту после него будет добавлен переход на новую строку.
Но
переход не будет добавлен, если текущий
читаемый из файла текст комментарий или
открыты скобки.
да
Рисунок. 1 Блок-схема алгоритма чтения текста программы из файла
1.3 Организация входных и выходных данных
Входными данными являются: имя файла, из которого будет посимвольно считываться программа, а также собственно сами символы и формируемые из них слова.
Переменные,
используемые в программе, являются
локальными2 и описаны в единственной
процедуре, в которой и происходит все
действие над открытым файлом с программой,
написанной на Паскале. Переменные, а также
их описание
приведены в таблице 1.
Таблица 1 – описание переменных.
| Переменная | Тип | Описание |
| F | Файл символьного типа | Файл с программой для обработки его текста |
| S | Символ | Текущий прочитанный из файла символ |
| PS | Символ | Предыдущий прочитанный из файла символ |
| NewText | Строка3 | Новый текст программы, прочитанной из файла |
| Slovo | Строка | Формируемое посимвольно слово |
| Tab | Строка | Содержит отступы, добавляемые в каждой строке |
| Skobka | Логический | Указывает, что открыта скобка |
| Apostrof | Логический | Указывает, что открыты ковычки |
| KommenSK | Логический | Указывает, что текущий читаемый из файла текст – комментарий ({}) |
| KommenSL | Логический | Указывает, что текущий читаемый из файла текст – комментарий (//) |
| Perevod | Логический | Указывает, что необходимо добавить переход на новую строку |
| PlusTab | Логический | Указывает, что нужно увеличить отступ (Tab) |
| Zapret | Логический | Если True, то запрещает добавление к новому тексту последнего прочитанного из файла символа |
Выходными данными является новый текст, прочитанный из файла, который выводится в окно программы.
1.4 Выбор состава технических и ПС. Условия выполнения программы.
Делается
вывод о необходимости
Данное приложение, разработанное в Delphi, способно работать на персональных компьютерах с минимальными требованиями Pentium 100, оперативной памятью 32 Мб, операционной средой Windows.
Запустить приложение можно также как и любое другое. Окно приложения загрузится и появится в центре экрана. Для обработки текста программы на Паскале необходимо нажать кнопку «Открыть». Для выхода из программы необходимо нажать Alt+F4, нажать кнопку «Выход» или щелкнуть левой кнопкой мыши по крестику в правом верхнем углу экрана.
Сообщение оператору.
Единственное сообщение, которое
выводится, означает о конце обработки
открытого файла после нажатия на кнопку
«Открыть» и выбора этого файла. Окно,
выводящее это сообщение представлено
на рисунке 4.
Рисунок
4 Окно сообщения
2 РАЗРАБОТКА РАБОЧЕГО ПРОЕКТА
2.1 Разработка программы и написание
Для разработки приложения используются средства визуального программирования Delphi. Проект программы содержит одно окно: Form1 –рисунок2.
Рисунок
2 Вид формы – Form1
Компонент Form1 – окно программы
Свойства:
Caption ='Самара
СГА Обработка текста на
Событий нет.
1 - компонент Memo1: TMemo
свойства:
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
2.2 Спецификации программы
Исполняемый файл программы имеет название 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 |
2.3 Текст программы
Текст программы
для формы – 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;