Автор работы: Пользователь скрыл имя, 22 Августа 2014 в 11:19, курсовая работа
Выполнение курсовой работы является одним из важнейших этапов применения теоретических знаний и освоения практических приемов разработки программного обеспечения.
В общении человека и ЭВМ существуют естественные трудности. Машины на атомарном уровне оперируют битами и регистрами, а люди изъясняются на естественных языках или пользуются математическими обозначениями.
Трансляторы стали неотъемлемой частью любой ЭВМ. Поэтому они являются важной практической областью научных исследований, связанных с работой вычислительных систем.
ВВЕДЕНИЕ
4
1
ТЕХНИЧЕСКОЕ ЗАДАНИЕ
5
2
ФОРМАЛЬНОЕ ОПИСАНИЕ ЯЗЫКА ПРОГРАММИРОВАНИЯ
7
3
РАЗРАБОТКА АЛГОРИТМОВ СКАНЕРА, СИНТАКСИЧЕСКОГО АНАЛИЗАТОРА И ГЕНЕРАТОРА ПРОМЕЖУТОЧНОЙ ФОРМЫ ПРЕДСТАВЛЕНИЯ ПРОГРАММЫ
14
4
РАЗРАБОТКА ПРОГРАММНОГО КОМПЛЕКСА ПРОЕКТА
21
5
РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ И ОТЛАДКИ ПС
24
ЗАКЛЮЧЕНИЕ
27
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
28
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]=
or (StringGrid1.Cells[0,i+3]='
or (StringGrid1.Cells[0,i+3]='
or (StringGrid1.Cells[0,i+3]='
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]:=
StringGrid2.Cells[1,j]:='call'
StringGrid2.Cells[2,j]:='
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]:=
StringGrid2.Cells[1,j]:='
StringGrid2.Cells[2,j]:=
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]:=
StringGrid2.Cells[1,j]:='
StringGrid2.Cells[2,j]:=
StringGrid2.Cells[3,j]:='';
StringGrid2.Cells[4,j]:='';
i:=i+1;
j:=j+1;
l:=l+1;
StringGrid2.Cells[0,j]:=
StringGrid2.Cells[1,j]:='
StringGrid2.Cells[2,j]:=
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]:=
StringGrid2.Cells[1,j]:='call'
StringGrid2.Cells[2,j]:='
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]:=
StringGrid2.Cells[1,j]:='
StringGrid2.Cells[2,j]:=
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]:=
StringGrid2.Cells[1,j]:='
StringGrid2.Cells[2,j]:=
StringGrid2.Cells[3,j]:='';
StringGrid2.Cells[4,j]:='';
l:=l+1;
i:=i+1;
j:=j+1;
StringGrid2.Cells[0,j]:=
StringGrid2.Cells[1,j]:='
StringGrid2.Cells[2,j]:=
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]:=
StringGrid2.Cells[1,j]:=':=';
StringGrid2.Cells[2,j]:=
StringGrid2.Cells[3,j]:='';
StringGrid2.Cells[4,j]:=
l:=l+1;
j:=j+1;
StringGrid2.Cells[0,j]:=
StringGrid2.Cells[1,j]:='JGT';
StringGrid2.Cells[2,j]:=
StringGrid2.Cells[3,j]:=
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]:=
StringGrid2.Cells[1,j]:=zy;
StringGrid2.Cells[2,j]:=y1;
StringGrid2.Cells[3,j]:=y2;
StringGrid2.Cells[4,j]:='R'+
l:=l+1;
j:=j+1;
StringGrid2.Cells[0,j]:=
StringGrid2.Cells[1,j]:='J';
StringGrid2.Cells[2,j]:='R'+
StringGrid2.Cells[3,j]:='True'
StringGrid2.Cells[4,j]:='()';
l:=l+1;
j:=j+1;
StringGrid2.Cells[0,j]:=
StringGrid2.Cells[1,j]:='J';
StringGrid2.Cells[2,j]:='R'+
StringGrid2.Cells[3,j]:='
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]:=
StringGrid2.Cells[1,j]:=zy;
StringGrid2.Cells[2,j]:=y1;
StringGrid2.Cells[3,j]:=y2;
StringGrid2.Cells[4,j]:='R'+
l:=l+1;
j:=j+1;
StringGrid2.Cells[0,j]:=
StringGrid2.Cells[1,j]:='J';
StringGrid2.Cells[2,j]:='R'+
StringGrid2.Cells[3,j]:='True'
StringGrid2.Cells[4,j]:='()';
l:=l+1;
j:=j+1;
StringGrid2.Cells[0,j]:=
StringGrid2.Cells[1,j]:='J';
StringGrid2.Cells[2,j]:='R'+
StringGrid2.Cells[3,j]:='
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]:=
StringGrid2.Cells[1,j]:=sp[
StringGrid2.Cells[2,j]:=sp[
StringGrid2.Cells[3,j]:=sp[
StringGrid2.Cells[4,j]:='R'+
h:=h+1;
j:=j+1;
l:=l+1;
end;
if (sp[ssp1]='+') or (sp[ssp1]='-') then
begin
StringGrid2.Cells[0,j]:=
StringGrid2.Cells[1,j]:=sp[
StringGrid2.Cells[2,j]:=sp[
StringGrid2.Cells[3,j]:=sp[
StringGrid2.Cells[4,j]:='R'+
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]:='
StringGrid2.Cells[3,0]:='
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]:='
StringGrid2.Cells[3,0]:='
StringGrid2.Cells[4,0]:='Рез';
end;
procedure TForm1.N3Click(Sender: TObject);
begin
close;
end;
procedure TForm1.N4Click(Sender: TObject);
begin
showmessage('Программу разработал Межитханов Иван, студент группы ВТиПО-11с');
end;
end.