close

Вход

Забыли?

вход по аккаунту

?

ОтчетДамирГазинур

код для вставкиСкачать
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Марийский Государственный Технический Университет
Факультет информатики и вычислительной техники
Кафедра ИВС
ОТЧЕТ
ПО ЛАБОРАТОРНОЙ РАБОТЕ №2 "Проектирование лексического анализатора"
Выполнили: студенты группы ИВТ-31
Сафиуллин Д., Сибагатуллин Г. Проверил: Морохин Д. В.
Йошкар-Ола,
2012 г.
СОДЕРЖАНИЕ:
1. Задание....................................................................................................... 3
2. Описание грамматики входного языка в форме Бэкуса-Наура.............4
3. Граф конечного автомата для распознавания цепочек...........................5
4. Исходный код...............................................................................................6
5. Выводы о проделанной работе..................................................................16
1. ЗАДАНИЕ
Вариант №7
Входной язык содержит последовательность вызовов процедур, разделенных символом ; (точка с запятой). Вызов процедуры должен состоять из имени процедуры и списка параметров. В качестве параметров могут выступать идентификаторы, строковые константы, заключенные в двойные кавычки и одиночные символы, заключенные в одинарные кавычки.
2. ОПИСАНИЕ ГРАММАТИКИ ВХОДНОГО ЯЗЫКА В ФОРМЕ БЭКУСА - НАУРА
<I> <C><A>
<A> <C><A>
<A> <D><A>
<A> (<H>
<D>  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<C> a | b | c |...| z | A | ...| Z
<H>  )<E>
<H>  <X>
<E>  ; (конец вызова процедуры)
<X>  <C1><A1>(для идентификатора переменной)
<A1>  <C1><A1>
<A1>  <D1><A1>
<A1>  ,<X> | )<E>
<X>  "<S>(для строковой константы)
<S>  <Z><S>
<S>  "<T>
<T>  ,<X> | )<E>
<Z> $ | <любой символ>
<X>  '<K>'<L> (для символьной константы)
<K>  <любой одиночный символ>
<L>  ,<X> | )<E>
3. ГРАФ КОНЕЧНОГО АВТОМАТА ДЛЯ РАСПОЗНАВАНИЯ ЦЕПОЧЕК
Конечный детерминированный автомат M ({I,C,A,D,H,E,X,S,Z,T,K,L,ER}, {0...9, A...Z, a..z, (, ), ;, ,, ", ", ', '},,N,{S}), который распознает язык, заданный этой грамматикой.
4. ИСХОДНЫЙ КОД
uses crt;
var
f:text;
d, i, j, l, m, m1, m2, c, ll:integer;
s:string;
a,b:array[1..100] of integer;
label 1;
begin
clrscr;
assign(f,'c:\in.txt');
reset(f);
textcolor(red);
writeln(' '(r)¤Ґа¦Ё¬(r)Ґ д (c)" : ');
textcolor(15);
write(' ');
while not(eof(f)) do
begin
readln(f,s);
write(s);
end;
d:=length(s);
m:=0;
for i:=1 to d do
begin
if s[i] = ',' then
begin
m:=m+1;
a[m]:=i;
end;
end;
for i:=1 to d do
begin
if s[i] = ')' then
begin
ll:=i;
end;
end;
writeln;
writeln;
writeln(' ' Ў"Ёж Ё¤ҐвЁдЁЄ в(r)а(r)ў: ');
writeln;
for i:=1 to d do
begin
if s[i] = '(' then
begin
write(' ');
for j:=1 to i-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - Ё¬п Їа(r)楤гал');
textcolor(15);
write(' ',s[i]);
textcolor(2);
writeln(' - (r)вЄалў ой пбп бЄ(r)ЎЄ ');
textcolor(15);
l:=i;
break;
end;
end;
for i:=1 to d do
begin
if s[i] = '(' then
begin
if s[i+1] = '"' then
begin
write(' ');
for j:=i+1 to a[1]-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - бва(r)Є(r)ў п Є(r)бв в , § Є". ў ¤ў(r)(c)лҐ Є ўлзЄЁ');
textcolor(15);
write(' ',s[a[1]]);
textcolor(2);
writeln(' - § Їпв п');
textcolor(15);
break;
end
else if ord(s[i+1]) = 39 then
begin
write(' ');
for j:=i+1 to a[1]-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - (r)¤Ё(r)зл(c) бЁ¬ў(r)", § Є". ў (r)¤Ё алҐ Є ўлзЄЁ');
textcolor(15);
write(' ',s[a[1]]);
textcolor(2);
writeln(' - § Їпв п');
textcolor(15);
break;
end
else
begin
write(' ');
for j:=i+1 to a[1]-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - Ё¤ҐвЁдЁЄ в(r)а');
textcolor(15);
write(' ',s[a[1]]);
textcolor(2);
writeln(' - § Їпв п');
textcolor(15);
break;
end;
end;
end;
if m = 1 then
begin
for i:=1 to d do
begin
if i = a[1] then
begin
if s[i+1] = '"' then
begin
write(' ');
for j:=a[1]+1 to ll-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - бва(r)Є(r)ў п Є(r)бв в , § Є". ў ¤ў(r)(c)лҐ Є ўлзЄЁ');
textcolor(15);
write(' ',s[ll]);
textcolor(2);
writeln(' - § Єалў ой п бЄ(r)ЎЄ ');
textcolor(15);
write(' ',s[ll+1]);
textcolor(2);
writeln(' - в(r)зЄ б § Їпв(r)(c)');
textcolor(15);
goto 1;
end
else if ord(s[i+1]) = 39 then
begin
write(' ');
for j:=a[1]+1 to ll-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - (r)¤Ё(r)зл(c) бЁ¬ў(r)", § Є". ў (r)¤Ё алҐ Є ўлзЄЁ');
textcolor(15);
write(' ',s[ll]);
textcolor(2);
writeln(' - § Єалў ой п бЄ(r)ЎЄ ');
textcolor(15);
write(' ',s[ll+1]);
textcolor(2);
writeln(' - в(r)зЄ б § Їпв(r)(c)');
textcolor(15);
goto 1;
end
else
begin
write(' ');
for j:=a[1]+1 to ll-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - Ё¤ҐвЁдЁЄ в(r)а');
textcolor(15);
write(' ',s[ll]);
textcolor(2);
writeln(' - § Єалў ой п бЄ(r)ЎЄ ');
textcolor(15);
write(' ',s[ll+1]);
textcolor(2);
writeln(' - в(r)зЄ б § Їпв(r)(c)');
textcolor(15);
goto 1;
end;
end;
end;
end;
for i:=1 to d do
begin
if i = a[1] then
begin
if s[i+1] = '"' then
begin
write(' ');
for j:=i+1 to a[2]-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - бва(r)Є(r)ў п Є(r)бв в , § Є". ў ¤ў(r)(c)лҐ Є ўлзЄЁ');
textcolor(15);
write(' ',s[a[2]]);
textcolor(2);
writeln(' - § Їпв п');
textcolor(15);
break;
end
else if ord(s[i+1]) = 39 then
begin
write(' ');
for j:=i+1 to a[2]-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - (r)¤Ё(r)зл(c) бЁ¬ў(r)", § Є". ў (r)¤Ё алҐ Є ўлзЄЁ');
textcolor(15);
write(' ',s[a[2]]);
textcolor(2);
writeln(' - § Їпв п');
textcolor(15);
break;
end
else
begin
write(' ');
for j:=i+1 to a[2]-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - Ё¤ҐвЁдЁЄ в(r)а');
textcolor(15);
write(' ',s[a[2]]);
textcolor(2);
writeln(' - § Їпв п');
textcolor(15);
break;
end;
end;
end;
if m = 2 then
begin
for i:=1 to d do
begin
if i = a[2] then
begin
if s[i+1] = '"' then
begin
write(' ');
for j:=a[2]+1 to ll-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - бва(r)Є(r)ў п Є(r)бв в , § Є". ў ¤ў(r)(c)лҐ Є ўлзЄЁ');
textcolor(15);
write(' ',s[ll]);
textcolor(2);
writeln(' - § Єалў ой п бЄ(r)ЎЄ ');
textcolor(15);
write(' ',s[ll+1]);
textcolor(2);
writeln(' - в(r)зЄ б § Їпв(r)(c)');
textcolor(15);
goto 1;
end
else if ord(s[i+1]) = 39 then
begin
write(' ');
for j:=a[2]+1 to ll-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - (r)¤Ё(r)зл(c) бЁ¬ў(r)", § Є". ў (r)¤Ё алҐ Є ўлзЄЁ');
textcolor(15);
write(' ',s[ll]);
textcolor(2);
writeln(' - § Єалў ой п бЄ(r)ЎЄ ');
textcolor(15);
write(' ',s[ll+1]);
textcolor(2);
writeln(' - в(r)зЄ б § Їпв(r)(c)');
textcolor(15);
goto 1;
end
else
begin
write(' ');
for j:=a[2]+1 to ll-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - Ё¤ҐвЁдЁЄ в(r)а');
textcolor(15);
write(' ',s[ll]);
textcolor(2);
writeln(' - § Єалў ой п бЄ(r)ЎЄ ');
textcolor(15);
write(' ',s[ll+1]);
textcolor(2);
writeln(' - в(r)зЄ б § Їпв(r)(c)');
textcolor(15);
goto 1;
end;
end;
end;
end;
for i:=1 to d do
begin
if i = a[2] then
begin
if s[i+1] = '"' then
begin
write(' ');
for j:=a[2]+1 to a[3]-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - бва(r)Є(r)ў п Є(r)бв в , § Є". ў ¤ў(r)(c)лҐ Є ўлзЄЁ');
textcolor(15);
write(' ',s[a[3]]);
textcolor(2);
writeln(' - § Їпв п');
textcolor(15);
break;
end
else if ord(s[i+1]) = 39 then
begin
write(' ');
for j:=a[2]+1 to a[3]-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - (r)¤Ё(r)зл(c) бЁ¬ў(r)", § Є". ў (r)¤Ё алҐ Є ўлзЄЁ');
textcolor(15);
write(' ',s[a[3]]);
textcolor(2);
writeln(' - § Їпв п');
textcolor(15);
break;
end
else
begin
write(' ');
for j:=a[2]+1 to a[3]-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - Ё¤ҐвЁдЁЄ в(r)а');
textcolor(15);
write(' ',s[a[3]]);
textcolor(2);
writeln(' - § Їпв п');
textcolor(15);
break;
end;
end;
end;
if m = 3 then
begin
for i:=1 to d do
begin
if i = a[3] then
begin
if s[i+1] = '"' then
begin
write(' ');
for j:=a[3]+1 to ll-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - бва(r)Є(r)ў п Є(r)бв в , § Є". ў ¤ў(r)(c)лҐ Є ўлзЄЁ');
textcolor(15);
write(' ',s[ll]);
textcolor(2);
writeln(' - § Єалў ой п бЄ(r)ЎЄ ');
textcolor(15);
write(' ',s[ll+1]);
textcolor(2);
writeln(' - в(r)зЄ б § Їпв(r)(c)');
textcolor(15);
goto 1;
end
else if ord(s[i+1]) = 39 then
begin
write(' ');
for j:=a[3]+1 to ll-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - (r)¤Ё(r)зл(c) бЁ¬ў(r)", § Є". ў (r)¤Ё алҐ Є ўлзЄЁ');
textcolor(15);
write(' ',s[ll]);
textcolor(2);
writeln(' - § Єалў ой п бЄ(r)ЎЄ ');
textcolor(15);
write(' ',s[ll+1]);
textcolor(2);
writeln(' - в(r)зЄ б § Їпв(r)(c)');
textcolor(15);
goto 1;
end
else
begin
write(' ');
for j:=a[3]+1 to ll-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - Ё¤ҐвЁдЁЄ в(r)а');
textcolor(15);
write(' ',s[ll]);
textcolor(2);
writeln(' - § Єалў ой п бЄ(r)ЎЄ ');
textcolor(15);
write(' ',s[ll+1]);
textcolor(2);
writeln(' - в(r)зЄ б § Їпв(r)(c)');
textcolor(15);
goto 1;
end;
end;
end;
end;
for i:=1 to d do
begin
if i = a[3] then
begin
if s[i+1] = '"' then
begin
write(' ');
for j:=a[3]+1 to a[4]-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - бва(r)Є(r)ў п Є(r)бв в , § Є". ў ¤ў(r)(c)лҐ Є ўлзЄЁ');
textcolor(15);
write(' ',s[a[4]]);
textcolor(2);
writeln(' - § Їпв п');
textcolor(15);
break;
end
else if ord(s[i+1]) = 39 then
begin
write(' ');
for j:=a[3]+1 to a[4]-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - (r)¤Ё(r)зл(c) бЁ¬ў(r)", § Є". ў (r)¤Ё алҐ Є ўлзЄЁ');
textcolor(15);
write(' ',s[a[4]]);
textcolor(2);
writeln(' - § Їпв п');
textcolor(15);
break;
end
else
begin
write(' ');
for j:=a[3]+1 to a[4]-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - Ё¤ҐвЁдЁЄ в(r)а');
textcolor(15);
write(' ',s[a[4]]);
textcolor(2);
writeln(' - § Їпв п');
textcolor(15);
break;
end;
end;
end;
if m = 4 then
begin
for i:=1 to d do
begin
if i = a[4] then
begin
if s[i+1] = '"' then
begin
write(' ');
for j:=a[4]+1 to ll-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - бва(r)Є(r)ў п Є(r)бв в , § Є". ў ¤ў(r)(c)лҐ Є ўлзЄЁ');
textcolor(15);
write(' ',s[ll]);
textcolor(2);
writeln(' - § Єалў ой п бЄ(r)ЎЄ ');
textcolor(15);
write(' ',s[ll+1]);
textcolor(2);
writeln(' - в(r)зЄ б § Їпв(r)(c)');
textcolor(15);
break;
end
else if ord(s[i+1]) = 39 then
begin
write(' ');
for j:=a[4]+1 to ll-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - (r)¤Ё(r)зл(c) бЁ¬ў(r)", § Є". ў (r)¤Ё алҐ Є ўлзЄЁ');
textcolor(15);
write(' ',s[ll]);
textcolor(2);
writeln(' - § Єалў ой п бЄ(r)ЎЄ ');
textcolor(15);
write(' ',s[ll+1]);
textcolor(2);
writeln(' - в(r)зЄ б § Їпв(r)(c)');
textcolor(15);
break;
end
else
begin
write(' ');
for j:=a[4]+1 to ll-1 do
begin
write(s[j]);
end;
textcolor(2);
writeln(' - Ё¤ҐвЁдЁЄ в(r)а');
textcolor(15);
write(' ',s[ll]);
textcolor(2);
writeln(' - § Єалў ой п бЄ(r)ЎЄ ');
textcolor(15);
write(' ',s[ll+1]);
textcolor(2);
writeln(' - в(r)зЄ б § Їпв(r)(c)');
textcolor(15);
break;
end;
end;
end;
end;
1:
readln;
close(f);
end.
5. ВЫВОДЫ О ПРОДЕЛАННОЙ РАБОТЕ
Выполнив данную работу, мы изучили основные понятия теории регулярных грамматик, ознакомились с назначением и принципами работы лексических анализаторов (сканеров), получили практические навыки построения сканера на примере заданного простейшего входного языка.
5
7
Документ
Категория
Рефераты
Просмотров
18
Размер файла
106 Кб
Теги
отчетдамиргазинур
1/--страниц
Пожаловаться на содержимое документа