
- •«Системное программное обеспечение»
- •Лабораторная работа №1 Формирование очередей в динамической памяти
- •Лабораторная работа №2 Программирование конечного автомата
- •Лабораторная работа №3 Программирование конечного автомата для транслитерации
- •2) Исходный текст программы:
- •3) Результат:
- •Лабораторная работа №4 Программирование конечного автомата
- •2) Исходный текст программы:
- •Лабораторная работа №5 Программирование лексического анализатора
- •Лабораторная работа №6 Лексический анализатор. Процедура, которая не смещает указатель входного потока
- •Лабораторная работа №7 Рекурсивный спуск
- •2) Исходный текст программы:
- •Лабораторная работа №8 Синтаксический анализатор логического выражения.
- •2) Исходный текст программы:
- •Лабораторная работа №9 Синтаксический анализ для оператора присваивания
- •2) Исходный текст программы:
- •Лабораторная работа №10 Разработка калькулятора на основе рекурсивного спуска
- •Лабораторная работа №11 Генерация кода на ассемблере для арифметического выражения
Лабораторная работа №3 Программирование конечного автомата для транслитерации
1) Цель работы: Создать файл с русским текстом. Написать автомат, который переведет русские буквы в символы латинского алфавита. Результат записать в другой файл.
Графическое представление конечного автомата:
2) Исходный текст программы:
program translit;
const string1:array [1..2] of char=('ъ','ь');
string2ru:array [1..25] of char=('а','б','в','г','д','е','ё','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ы','э');
string3ru:array [1..7] of char=('ж','ч','ш','щ','ы','ю','я');
string2en:array [1..25] of char=('a','b','v','g','d','e','e','z','i','i','k','l','m','n','o','p','r','s','t','u','f','h','c','y','e');
string3en:array [1..7] of string=('zh','ch','sh','sch','bl','yu','ya');
var c:char;
s:string;
f,f1:text;
state,i,x:integer;
procedure compare(c:char; var i,state,x:integer);
begin for i:=1 to 2 do
if c=string1[i] then
begin
x:=i;
state:=1;
exit;
end;
for i:=1 to 25 do
if c=string2ru[i] then
begin
x:=i;
state:=2;
exit; end;
for i:=1 to 7 do
if c=string3ru[i] then
begin
x:=i;
state:=3;
exit;
end;
state:=4;
end;
procedure trans1(c:char; var i,state,x:integer);
begin
s:=s+string2en[x];
state:=1;
end;
procedure trans2(c:char; var i,state,x:integer);
begin
s:=s+string3en[x];
state:=1;
end;
procedure trans3(c:char; var i,state,x:integer);
begin
s:=s+c;
state:=1;
end;
begin
assign(f,'text.txt');
reset(f);
assign(f1, 'data_out.txt');
rewrite(f1);
state:=1;
repeat
case state of
1:begin read(f,c); compare(c,i,state,x); end;
2:begin trans1(c,i,state,x); end;
3:begin trans2(c,i,state,x); end;
4:begin trans3(c,i,state,x); end;
else begin writeln('Перевод окончен.'); end; end;
until eof(f);
close(f);
write(f1,s);
close(f1);
end.
3) Результат:
'text.txt': привет мой хозяин
'data_out.txt': privet moi hozyain
Лабораторная работа №4 Программирование конечного автомата
1) Цель работы: Разработать конечный автомат, разметить его, написать программу, которая выбирает целые числа из текста и выводит их на экран.
Графическое представление конечного автомата:
2) Исходный текст программы:
program avtomat4;
var x:char;
f1: text;
s: integer;
flag: boolean;
buffer: string;
begin s:=0;
flag:=false;
assign(f1,'4.txt');
reset(f1);
while flag=false do begin
case s of
0: begin
read(f1,x);
if x in ['0'..'9'] then begin s:=1; buffer:=x; end;
if eof(f1)=true then s:=2;
end;
1: begin
read(f1,x);
if x in ['0'..'9'] then begin buffer:=buffer+x; end else
begin writeln(buffer); s:=0; end;
end;
2: begin
flag:=true;
close(f1);
end;
end; //case
end; //while
end.
3) Файл содержит в себе следующий текст: dtu76ghfc456hjlkj8f
Результат:
76 456 8