Разработка транслятора

Автор работы: Пользователь скрыл имя, 22 Августа 2014 в 11:19, курсовая работа

Краткое описание

Выполнение курсовой работы является одним из важнейших этапов применения теоретических знаний и освоения практических приемов разработки программного обеспечения.
В общении человека и ЭВМ существуют естественные трудности. Машины на атомарном уровне оперируют битами и регистрами, а люди изъясняются на естественных языках или пользуются математическими обозначениями.
Трансляторы стали неотъемлемой частью любой ЭВМ. Поэтому они являются важной практической областью научных исследований, связанных с работой вычислительных систем.

Содержание

ВВЕДЕНИЕ
4
1
ТЕХНИЧЕСКОЕ ЗАДАНИЕ
5
2
ФОРМАЛЬНОЕ ОПИСАНИЕ ЯЗЫКА ПРОГРАММИРОВАНИЯ
7
3
РАЗРАБОТКА АЛГОРИТМОВ СКАНЕРА, СИНТАКСИЧЕСКОГО АНАЛИЗАТОРА И ГЕНЕРАТОРА ПРОМЕЖУТОЧНОЙ ФОРМЫ ПРЕДСТАВЛЕНИЯ ПРОГРАММЫ
14
4
РАЗРАБОТКА ПРОГРАММНОГО КОМПЛЕКСА ПРОЕКТА
21
5
РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ И ОТЛАДКИ ПС
24

ЗАКЛЮЧЕНИЕ
27

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
28

Прикрепленные файлы: 1 файл

курсовая по сис. прог. Межитханов.docx

— 121.52 Кб (Скачать документ)

   if l1='For' then

      begin

        if not(StringGrid1.Cells [2,i+1]= 'Идентификатор')then

          begin

          flag:=false;

          break;

          end;

      If not(StringGrid1.Cells [0,i+2]='=') then

          begin

          flag:=false;

          break;

          end;

      if  not((StringGrid1.Cells [2,i+3]= 'Идентификатор') or (StringGrid1.Cells [2,i+3]= 'Целое число'))   then

          begin

          flag:=false;

          break;

          end;

      if not((StringGrid1.Cells [0,i+4]='To')) then

          begin

          flag:=false;

          break;

          end;

      if  not((StringGrid1.Cells [2,i+5]= 'Идентификатор') or (StringGrid1.Cells [2,i+5]= 'Целое число'))   then

          begin

          flag:=false;

          break;

          end;

       end;

 

       // Проверка оператора условного  перехода

 

     if l1='If' then

     begin

     slovo:=StringGrid1.Cells [1,i+1];

        if ((slovo[1]= 'I')) or ((slovo[1]='C')) then

     begin

        if (StringGrid1.Cells [0,i+2]='=')or

           (StringGrid1.Cells [0,i+2]='<') or

           (StringGrid1.Cells [0,i+2]='>') or

           (StringGrid1.Cells [0,i+2]='<=')or

           (StringGrid1.Cells [0,i+2]='>=') or

           (StringGrid1.Cells [0,i+2]='<>') then

       begin

       slovo:=StringGrid1.Cells [1,i+3];

        if ((slovo[1]= 'I')) or ((slovo[1]= 'C')) then

        begin

         slovo:=StringGrid1.Cells [0,i+4];

         if (not (slovo='Then')) then

        begin

        flag:=false;

        break;

        end;

        end;

        end;

       end;

       end;

    // Цикл с предусловием While

    If l1='While' then

    begin

     slovo:= StringGrid1.Cells [1,i+1];

     slovo1:= StringGrid1.Cells [0,i+2];

     slovo2:= StringGrid1.Cells [1,i+3];

     if not(((Slovo[1]='I')or (slovo[1]='C') )

 

     and ((Slovo2[1]='I')or (slovo2[1]='C'))

     and ((StringGrid1.Cells [0,i+4])='Do')) then

     begin

     flag:=false;

     break;

     end;

        

      end;

     // объявление переменных

    if l1='Dim' then if not ((StringGrid1.Cells[2,i+1]='Идентификатор')

     and (StringGrid1.Cells[0,i+2]='As')

      and((StringGrid1.Cells[0,i+3]='Integer')

       or (StringGrid1.Cells[0,i+3]='Real')

       or (StringGrid1.Cells[0,i+3]='String')

       or (StringGrid1.Cells[0,i+3]='Boolean'))) then

        begin

     flag:=false;

     break;

     end;

      end;

         //Проверка оператора присваивания

 

    i4:=1;

    s1:='';

    s2:='';

    While (i4<=r) do

    begin

    If ((StringGrid1.Cells [0,i4]='=') and not(StringGrid1.Cells [0,i4-2]='If') and not(StringGrid1.Cells [0,i4-2]='For'))  then

        begin

        repeat

        i4:=i4+1;

        begin

          s1:=StringGrid1.Cells [0,i4];

          If (StringGrid1.Cells [2,i4]='Идентификатор') or (StringGrid1.Cells [2,i4]='Целое число') or (s1[1]=')')  then

            Begin

            s2:=StringGrid1.Cells [0,i4+1];

            if not((s2[1] in zmo) or (s2[1]=')') or (s2[1]=';') ) then

              begin

              flag:=true;

              break;

              end;

            end;

 

          If ((s1[1] in zmo) or (s1[1]='(')) then

            Begin

            if not((StringGrid1.Cells [2,i4+1]='Идентификатор') or (StringGrid1.Cells [2,i4+1]='Целое число') or (StringGrid1.Cells [0,i4+1]='(')) then

              begin

              flag:=true;

              break;

              end;

            end;

 

        end;

        until StringGrid1.Cells [2,i4+1]='Служебное слово'

        end;

    i4:=i4+1;

    end;

 

       If flag=false then

  label5.Caption:='Есть ошибка'

  else label5.Caption:='Нет ошибки';

 

 //форма промежуточной записи

i:=0; //счетчик лексем

j:=1; //счетчик строк 2 таблицы

h:=0; //счетчик промежуточных результатов

l:=1; //переменная подсчета количества операций

y1:='';//переменная для записи левой части условия

y2:=''; //переменная для записи правой части условия

sp:=''; //строковая переменная для записи присваивания

isp:='';//строковая переменная для записи исправленной строки

nps:=0;

while i<=r do

begin

i:=i+1;

 

if StringGrid1.Cells [0,i]='Input' then

    begin

    StringGrid2.Cells[0,j]:=intToStr(l);

    StringGrid2.Cells[1,j]:='call';

    StringGrid2.Cells[2,j]:='xREADLN';

    StringGrid2.Cells[3,j]:='';

    StringGrid2.Cells[4,j]:='';

    l:=l+1;

    if (StringGrid1.Cells [2,i+2]='Служебное слово') then

       begin

       i:=i+1;

       j:=j+1;

       StringGrid2.Cells[0,j]:=intToStr(l);

       StringGrid2.Cells[1,j]:='param';

       StringGrid2.Cells[2,j]:=StringGrid1.Cells [0,i];

       StringGrid2.Cells[3,j]:='';

       StringGrid2.Cells[4,j]:='';

       j:=j+1;

       l:=l+1;

       end

    else

       begin

       i:=i+1;

       j:=j+1;

       StringGrid2.Cells[0,j]:=intToStr(l);

       StringGrid2.Cells[1,j]:='param';

       StringGrid2.Cells[2,j]:=StringGrid1.Cells [0,i];

       StringGrid2.Cells[3,j]:='';

       StringGrid2.Cells[4,j]:='';

       i:=i+1;

       j:=j+1;

       l:=l+1;

       StringGrid2.Cells[0,j]:=intToStr(l);

       StringGrid2.Cells[1,j]:='param';

       StringGrid2.Cells[2,j]:=StringGrid1.Cells [0,i];

       StringGrid2.Cells[3,j]:='';

       StringGrid2.Cells[4,j]:='';

       j:=j+1;

       l:=l+1;

       end;

end;

if StringGrid1.Cells [0,i]='Print' then

    begin

    StringGrid2.Cells[0,j]:=intToStr(l);

    StringGrid2.Cells[1,j]:='call';

    StringGrid2.Cells[2,j]:='xWRITELN';

    StringGrid2.Cells[3,j]:='';

    StringGrid2.Cells[4,j]:='';

    l:=l+1;

    if (StringGrid1.Cells [2,i+2]='Служебное слово') then

       begin

       i:=i+1;

       j:=j+1;

       StringGrid2.Cells[0,j]:=intToStr(l);

       StringGrid2.Cells[1,j]:='param';

       StringGrid2.Cells[2,j]:=StringGrid1.Cells [0,i];

       StringGrid2.Cells[3,j]:='';

       StringGrid2.Cells[4,j]:='';

       j:=j+1;

       l:=l+1;

       end

    else

       begin

       i:=i+1;

       j:=j+1;

       StringGrid2.Cells[0,j]:=intToStr(l);

       StringGrid2.Cells[1,j]:='param';

       StringGrid2.Cells[2,j]:=StringGrid1.Cells [0,i];

       StringGrid2.Cells[3,j]:='';

       StringGrid2.Cells[4,j]:='';

       l:=l+1;

       i:=i+1;

       j:=j+1;

       StringGrid2.Cells[0,j]:=intToStr(l);

       StringGrid2.Cells[1,j]:='param';

       StringGrid2.Cells[2,j]:=StringGrid1.Cells [0,i];

       StringGrid2.Cells[3,j]:='';

       StringGrid2.Cells[4,j]:='';

       j:=j+1;

       l:=l+1;

       end;

    end;

    if StringGrid1.Cells [0,i]='For' then

    begin

    StringGrid2.Cells[0,j]:=intToStr(l);

    StringGrid2.Cells[1,j]:=':=';

    StringGrid2.Cells[2,j]:=StringGrid1.Cells [0,i+3];

    StringGrid2.Cells[3,j]:='';

    StringGrid2.Cells[4,j]:=StringGrid1.Cells [0,i+1];

       l:=l+1;

       j:=j+1;

       StringGrid2.Cells[0,j]:=intToStr(l);

       StringGrid2.Cells[1,j]:='JGT';

       StringGrid2.Cells[2,j]:=StringGrid1.Cells [0,i+1];

       StringGrid2.Cells[3,j]:=StringGrid1.Cells [0,i+5];

       StringGrid2.Cells[4,j]:='';

       j:=j+1;

       l:=l+1;

       end;

    if StringGrid1.Cells [0,i]='If' then

    begin

    i:=i+1;

    h:=h+1;

    y:= StringGrid1.Cells [0,i];

    While not(y[1] in zs) do

      begin

      y:= StringGrid1.Cells [0,i+1];

      y1:=y1+ StringGrid1.Cells [0,i];

       i:=i+1;

      end;

      zy:=StringGrid1.Cells [0,i];

      i:=i+1;

    While not(y='Then') do

      begin

      y:= StringGrid1.Cells [0,i+1];

      y2:=y2+ StringGrid1.Cells [0,i];

      i:=i+1;

      end;

    StringGrid2.Cells[0,j]:=intToStr(l);

    StringGrid2.Cells[1,j]:=zy;

    StringGrid2.Cells[2,j]:=y1;

    StringGrid2.Cells[3,j]:=y2;

    StringGrid2.Cells[4,j]:='R'+intToStr(h);

       l:=l+1;

       j:=j+1;

       StringGrid2.Cells[0,j]:=intToStr(l);

       StringGrid2.Cells[1,j]:='J';

       StringGrid2.Cells[2,j]:='R'+intToStr(h);

       StringGrid2.Cells[3,j]:='True';

       StringGrid2.Cells[4,j]:='()';

          l:=l+1;

       j:=j+1;

       StringGrid2.Cells[0,j]:=intToStr(l);

       StringGrid2.Cells[1,j]:='J';

       StringGrid2.Cells[2,j]:='R'+intToStr(h);

       StringGrid2.Cells[3,j]:='False';

       StringGrid2.Cells[4,j]:='()';

       j:=j+1;

       l:=l+1;

       end;

        if StringGrid1.Cells [0,i]='While' then

    begin

    i:=i+1;

    h:=h+1;

    y:= StringGrid1.Cells [0,i];

    While not(y[1] in zs) do

      begin

      y:= StringGrid1.Cells [0,i+1];

      y1:=y1+ StringGrid1.Cells [0,i];

       i:=i+1;

      end;

      zy:=StringGrid1.Cells [0,i];

      i:=i+1;

    While not(y='Do') do

      begin

      y:= StringGrid1.Cells [0,i+1];

      y2:=y2+ StringGrid1.Cells [0,i];

      i:=i+1;

      end;

    StringGrid2.Cells[0,j]:=intToStr(l);

    StringGrid2.Cells[1,j]:=zy;

    StringGrid2.Cells[2,j]:=y1;

    StringGrid2.Cells[3,j]:=y2;

    StringGrid2.Cells[4,j]:='R'+intToStr(h);

       l:=l+1;

       j:=j+1;

       StringGrid2.Cells[0,j]:=intToStr(l);

       StringGrid2.Cells[1,j]:='J';

       StringGrid2.Cells[2,j]:='R'+intToStr(h);

       StringGrid2.Cells[3,j]:='True';

       StringGrid2.Cells[4,j]:='()';

          l:=l+1;

       j:=j+1;

       StringGrid2.Cells[0,j]:=intToStr(l);

       StringGrid2.Cells[1,j]:='J';

       StringGrid2.Cells[2,j]:='R'+intToStr(h);

       StringGrid2.Cells[3,j]:='False';

       StringGrid2.Cells[4,j]:='()';

       j:=j+1;

       l:=l+1;

       end;

   if (StringGrid1.Cells [0,i]='=')and not((StringGrid1.Cells [0,i-2]='For') or (StringGrid1.Cells [0,i-2]='If')) then

    begin

    ssp1:=1;

    ssp:=3;

    i:=i+1;

    h:=h+1;

    sp:= StringGrid1.Cells [0,i-2]+StringGrid1.Cells [0,i-1]+StringGrid1.Cells [0,i];

    While not( StringGrid1.Cells [2,i+1] = 'Служебное слово') do

      begin

      i:=i+1;

      sp:=sp+StringGrid1.Cells [0,i];

      ssp:=ssp+1;

      end;

    While ssp1<=ssp do

    begin

    if (sp[ssp1]='*') or (sp[ssp1]='/')  then

        begin

    StringGrid2.Cells[0,j]:=intToStr(l);

    StringGrid2.Cells[1,j]:=sp[ssp1];

    StringGrid2.Cells[2,j]:=sp[ssp1-1];

    StringGrid2.Cells[3,j]:=sp[ssp1+1];

    StringGrid2.Cells[4,j]:='R'+inttostr(h);

    h:=h+1;

    j:=j+1;

    l:=l+1;

 

        end;

     if (sp[ssp1]='+') or (sp[ssp1]='-')  then

        begin

    StringGrid2.Cells[0,j]:=intToStr(l);

    StringGrid2.Cells[1,j]:=sp[ssp1];

    StringGrid2.Cells[2,j]:=sp[ssp1-1];

    StringGrid2.Cells[3,j]:=sp[ssp1+1];

    StringGrid2.Cells[4,j]:='R'+inttostr(h);

    h:=h+1;

    j:=j+1;

    l:=l+1;

        end;

    ssp1:=ssp1+1;

    end;

       end;

end;

          end;

  procedure TForm1.FormCreate(Sender: TObject);

begin

StringGrid1.Cells[0,0]:='Лексема';

StringGrid1.Cells[1,0]:='Код лексемы';

StringGrid1.Cells[2,0]:='Тип лексемы';

StringGrid2.Cells[0,0]:='Номер';

StringGrid2.Cells[1,0]:='Операция';

StringGrid2.Cells[2,0]:='Опер1';

StringGrid2.Cells[3,0]:='Опер2';

StringGrid2.Cells[4,0]:='Рез';

end;

procedure TForm1.N3Click(Sender: TObject);

begin

close;

end;

procedure TForm1.N4Click(Sender: TObject);

begin

showmessage('Программу разработал Межитханов Иван, студент группы ВТиПО-11с');

end;

end.  procedure TForm1.FormCreate(Sender: TObject);

begin

StringGrid1.Cells[0,0]:='Лексема';

StringGrid1.Cells[1,0]:='Код лексемы';

StringGrid1.Cells[2,0]:='Тип лексемы';

StringGrid2.Cells[0,0]:='Номер';

StringGrid2.Cells[1,0]:='Операция';

StringGrid2.Cells[2,0]:='Опер1';

StringGrid2.Cells[3,0]:='Опер2';

StringGrid2.Cells[4,0]:='Рез';

end;

procedure TForm1.N3Click(Sender: TObject);

begin

close;

end;

procedure TForm1.N4Click(Sender: TObject);

begin

showmessage('Программу разработал Межитханов Иван, студент группы ВТиПО-11с');

end;

end.

 


 



Информация о работе Разработка транслятора