Разработка программы обработки текста программы на языке Паскаль

Автор: Пользователь скрыл имя, 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

Файлы: 1 файл

Шавшин_М.В. Неуд_прог на ЯВУ.doc

— 396.00 Кб (Скачать)

свойства:   

    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.FileName);

  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;

Информация о работе Разработка программы обработки текста программы на языке Паскаль