Разработка лабораторного практикума по курсу 'Разработка трансляторов для языков программирования'

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    203,9 Кб
  • Опубликовано:
    2012-11-02
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка лабораторного практикума по курсу 'Разработка трансляторов для языков программирования'

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

Учреждение образования Гомельский государственный университет им. Ф. СКОРИНЫ

Математический факультет

Кафедра математических проблем управления








Курсовая работа

Разработка лабораторного практикума по курсу «Разработка трансляторов для языков программирования»


Исполнитель студентка

группы ПМ-35 Певнева М.В.

Научный руководитель

ассистент Короткевич Л.И.



Гомель 2012

Реферат

Курсовая работаLearning Belarus, Internet, HTML, Delta, Active Server Pages, Structured Query Language.

Объектом исследования является система дистанционного обучения Distance Learning Belarus и лабораторный практикум по учебному курсу «Разработка трансляторов для языков программирования». Была поставлена цель переработки и адаптации лабораторного практикума и перенос его в систему дистанционного обучения. В результате проделанной работы была переработана лабораторная работа №1 и перенесена в систему дистанционного обучения. Вследствие, чего появилась возможность проводить выдачу заданий по лабораторной работе и их проверку без непосредственного участия преподавателя, что повышает эффективность и скорость работы и освобождает преподавателя от выполнения рутиной работы, оставляя за ним лишь контролирующую функцию.

Содержание

Реферат

Содержание

Введение

1. Назначение и структура лабораторного практикума

1.1 Назначение лабораторного практикума

.2 Структура лабораторного практикума

2. Система дистанционного обучения

2.1 Базовые концепции разработки приложений для Интернет

.2 Основы языка HTML

.3 Структура системы дистанционного обучения

2.3.1 Web-сайт

.3.2 Файловая структура

2.3.3 Основная проверяющая программа и проверяющие модули

3. Корректировка заданий для переноса в систему

3.1 Формат ввода и вывода для заданий работы №1

.2 Структура и формат файлов для описания лабораторной работы №1

3.2.1 Установка задач в систему дистанционного обучения

.2.2 Структура и формат файлов

.2.3 Установка файлов в систему

4. Схема диалога пользователя с системой

4.1 Выбор задания и отправка решения

.2 Просмотр результатов проверки

.3 Дополнительные возможности

Заключение

Приложения

Введение

лабораторный дистанционный обучение пользователь

Все более широкое внедрение компьютеров во все сферы жизни человека приводит к тому, что практически всюду, включая процесс обучения, их роль стремительно возрастает. Вообще-то использование компьютеров в процессе обучения началось уже довольно давно. Но разработанная и внедренная несколько лет назад в Гомельском государственном университете система дистанционного обучения Distance Learning Belarus, открыла кардинально новые возможности использования компьютеров в процессе работы студентов и учащихся. Уже сейчас при помощи этой системы проводятся многочисленные олимпиады по программированию, шахматные турниры, конкурсы по программированию микроконтроллеров и проектированию цифровых устройств. Но возможности, заложенные в систему дистанционного обучения, позволяют с успехом использовать ее ещё и для проведения лабораторных практикумов по различным учебным курсам. Преимущества такого использования очевидны. Во-первых, отпадает необходимость непосредственного участия преподавателя в процессе выдачи и проверки заданий. Во-вторых, возрастает объективность и скорость проверки заданий. Также студент получает возможность сдачи работ в удобное для него время. Так как система Distance Learning Belarus построена с использованием современных Internet технологий, то студент может получить и отправить на проверку выполненное задание практически с любой точки земного шара.

Была поставлена задача переработки лабораторного практикума «Разработка трансляторов для языков программирования» по курсу «Системное программное обеспечение» в целях дальнейшего переноса его в систему дистанционного обучения Distance Learning Belarus.

1. Назначение и структура лабораторного практикума

1.1 Назначение лабораторного практикума


Лабораторный практикум ставит собою цель закрепления теоретического материала учебного курса и выработки умения применять на практике полученные знания. Так же практикум служит для оценки уровня владения теоретическим материалом и умения применять его на практике.

 

.2 Структура лабораторного практикума


Лабораторный практикум состоит из восьми следующих лабораторных работ:

)Синтаксический анализ предложений для регулярных грамматик;

)Нисходящий грамматический разбор;

)Синтаксический анализ предложений для грамматик с предшествованием;

)Синтаксический анализ предложений для LR(1) грамматик;

)Промежуточные языки трансляции;

)Генерация объектной программы;

)Статическое распределение памяти для данных;

)Динамическое распределение памяти для данных.

В каждой лабораторной работе по 10 различных вариантов заданий.

Некоторые лабораторные работы подразумевают написание программы на языке программирования.

2. Система дистанционного обучения

2.1 Базовые концепции разработки приложений для Интернет


Интернет - это множество разнообразных компьютерных систем, объединенных в сеть по протоколу TCP/IP. IP - протокол нижнего уровня, обеспечивающий передачу небольших пакетов данных. С помощью протокола TCP из пакетов, предлагаемых протоколом IP, создается поток и обеспечивается соединение. Далее процессы, выполняемые на различных компьютерах, могут начинать взаимодействие.

Имеется два типа таких процессов: клиент и сервер. Процесс-клиент инициирует сеанс работы с сервером, который всегда находится в состоянии ожидания. Процесс-сервер, получив запрос, выполняет соответствующие действия и возвращает результат клиенту. Данные механизмы реализуются на основе протокола прикладного уровня HTTP (передачи гипертекста), являющегося надстройкой TCP/IP.

В среде Интернет приложение-клиент, общающееся с web-сервером посредством протокола HTTP, называется браузером. HTML представляет собой язык, используемый при создании web-страниц, предоставляющий в распоряжение пользователя простой стандартный способ описания расположения текстовых и графических данных.

Одним из важнейших понятий в HTML является гиперссылка. Она позволяет разработчику страницы внедрять внедрять ссылки на другие документы или ресурсы прямо в страницу. Каждый ресурс имеет свой собственный уникальный адрес, называемый универсальным локатором ресурса (URL). Путь к ресурсу определяется относительно каталога web-мастера. По умолчанию загружается файл index.html или default.html. Параметры и указанные в них разделители определяются указанным методом доступа. В случае применения протокола HTTP символ “#” обозначает закладку внутри HTML-документа.

В настоящее время браузер превратился в мощное клиентское приложение за счет таких усовершенствований, как обеспечение независимости от операционной системы (достигнута с помощью языка программирования Java), возможность программирования клиентской части (получена благодаря языкам JavaScript и VB Script), предоставление полного доступа к клиентской операционной среде (реализуется посредством элементов ActiveX).

 

.2 Основы языка HTML


Язык HTML - это, по сути, множество элементов, специфицирующих формат описываемой страницы. Каждый элемент влияет на данные, которые следуют за ним. Некоторые HTML-элементы являются парными, то есть существует элемент начала и конца. Эти элементы называются тегами. Пары тегов начала и конца обеспечивают возможность вложенного использования элементов, однако нe все HTML-элементы могут вкладываться друг в друга, имеют теги конца или требуют завершения их тегом конца, но большинство из них удовлетворяют этим правилам.

Элементы HTML могут также иметь атрибуты. Атрибуты модифицируют характеристики элемента. В HTML-документы можно включать комментарии, помещая их между тегами комментариев HTML (<!-- и ->). Некоторые HTML-элементы поддерживают атрибут COLOR, задающий некоторый цвет.

Элемент «закладка» обеспечивает возможность создания гиперссылок. Они позволяют осуществлять переход на другую страницу в любом месте HTML документа.

 


2.3 Структура системы дистанционного обучения


С октября 1999 года на базе Гомельского Государственного университета функционирует система дистанционного обучения "Distance Learning Belarus". Система активно используется в учебном процессе. Дистанционное обучение является одной из перспективных областей развития информационных систем.

При разработке системы использовались следующие технологии и языки:

1   Structured Query Language (SQL) - язык, предназначенный для работы с базой данных. Он позволяет выбирать, обновлять и вставлять данные. О нем можно почитать в [3] и [7].

2   HyperText Markup Language (HTML) - язык разметки интернет страниц. JavaScript - язык для разработки программ-скриптов на машине клиента. Cascading Style Sheets (CSS) - каскадные таблицы стилей. Подробнее об этих языках можно узнать на сайтах #"577302.files/image001.jpg">

Рисунок 1. Редактирование курса

На этой странице имеется возможность задать или изменить настройки курса или перейти к добавлению, изменению или удалению задач.

При выборе пункта «Установка задач» осуществляется переход на другую страницу, с которой нужно перейти в режим добавления архива с задачами. Появиться следующая страница:

Рисунок 2. Загрузка архива с задачами

В поле «Архив:» нужно написать имя добавляемого архива и нажать кнопку «Отправить». Для указания имени архива можно нажать кнопку «Обзор…» и в открывшемся диалоге выбрать нужный архив. После этого задачи из архива добавляются в систему дистанционного обучения.

4. Схема диалога пользователя с системой

Для начала работы пользователя с системой дистанционного обучения он должен зарегистрироваться в системе, заполнив специальную форму. Этот процесс является стандартным для пользователей системы, и поэтому тут описываться не будет.

 

.1 Выбор задания и отправка решения


После регистрации и входа в систему пользователь должен стать подписчиком курса «Метод разработки трансляторов». Выбрав этот курс, он может увидеть список вариантов заданий для первой лабораторной работы:

Рисунок 3.Список вариантов заданий

Выбрав нужный вариант, пользователь может посмотреть условие задачи. Для варианта №1 это будет выглядеть так:

Рисунок 4. Условие задания

На этой же странице пользователь может указать путь к своему решению (исходному тексту программы решения на некотором языке программирования) в поле «Отправка решения:» или воспользоваться кнопкой «Обзор…». Нажатие кнопки «Отправить» осуществляет пересылку решения в систему, и оно становиться в очередь на проверку.

 

.2 Просмотр результатов проверки


После отправки решения пользователь может перейти на страницу, содержащую протокол проверки, выбрав пункт «Протокол» в левой части окна:

Рисунок 5. Протокол проверки

лабораторный дистанционный обучение пользователь

Как видно на рисунке 5, пока протокол не содержит записей. Однако после проверки решения на этой странице можно узнать дату и время проверки результата, и собственно результат проверки отправленного решения. Для просмотра общих результатов пользователь должен перейти на страницу «Таблицы результатов», выбрав пункт «Результаты» в левой части окна:

Рисунок 6. Таблицы результатов

4.3 Дополнительные возможности

Как и в других курсах системы дистанционного обучения у подписчиков этого курса есть возможность обратиться за консультацией к разработчикам системы на странице «Консультации»:

Рисунок 7. Консультации

Также подписчики могут обсудить любую из предложенных задач в форуме, выбрав соответствующую ссылку (рисунок 4).

Заключение

Данная работа была выполнена на кафедре математических проблем управления. Была проведена работа по изучению принципа работы и структуры системы дистанционного обучения Distance Learning Belarus. Также было проведено знакомство с языком HTML и другими современными интернет технологиями.

После было проведено исследование об адаптации лабораторного практикума курса «Разработка трансляторов для языков программирования» для переноса его в систему дистанционного обучения. Затем была проведена переработка всех заданий первой лабораторной работы для их переноса в систему дистанционного обучения. Так же был осуществлен перенос подготовленных заданий в систему дистанционного обучения. В дальнейшем планируется полный перевод всего лабораторного практикума в систему Distance Learning Belarus.

Все это позволит повысить удобство доступа к курсу студентам, освободить преподавателей от рутинной работы по выдаче и проверке заданий и повысить скорость и объективность проверки лабораторных работ.

Приложение 1

Тексты авторских решений лабораторной работы №1.

Вариант №1:

const ms:array[1..6,1..5]of byte=(

{ Ц Б + - =}

{S} (0,2,0,0,0),

{Q} (2,2,0,0,3),

{R} (0,4,0,0,0),

{P} (4,4,5,5,0),

{T} (6,0,0,0,0),

{Z} (6,0,0,0,0));ps:array[1..6,1..5]of byte=(

{ Ц Б + - }

{S} (0,1,0,0,0),

{Q} (1,1,0,0,0),

{R} (0,2,0,0,0),

{P} (2,2,4,3,0),

{T} (5,0,0,0,0),

{Z} (5,0,0,0,0));

num:set of char=['0'..'9'];

sym:set of char=['A'..'Z','a'..'z'];

ee:boolean=true;s:string;

i,q,oq,ns:byte;

cons:longint;

p1,p2:string;

sign:shortint;

assign(input,'input.txt');

assign(output,'output.txt');

reset(input);

rewrite(output);

readln(s);

p1:='';p2:='';cons:=0;

writeln(s);i:=1;q:=1;

while(i<=byte(s[0]))and ee do

begin

oq:=q;

if s[i] in num then ns:=1 else { }

if s[i] in sym then ns:=2 else { Определение }

if s[i]='+' then ns:=3 else { номера }

if s[i]='-' then ns:=4 else { }

if s[i]='=' then ns:=5 else ns:=0; { символа }

case ps[q,ns] of

1:p1:=p1+s[i];

2:p2:=p2+s[i];

3:sign:=-1;

4:sign:=+1;

5:cons:=cons*10+byte(s[i])-48;

end;

q:=ms[q,ns];

if ns=0 then

begin

ee:=false;

writeln(1);

end else

if q=0 then

begin

ee:=false;

writeln(2);

end;

inc(i);

end;

if ee then

if q=6 then writeln('0'#13#10'p1=',p1,' p2=',p2,' k=',sign*cons)

else writeln(3);

close(input);

close(output);.

Вариант №2:ms:array[1..4,1..4]of byte=(

{ Ц ( ) , }

{S} (0,2,0,0),

{Q} (3,0,0,0),

{P} (3,0,4,2),

{Z} (0,0,0,0));ps:array[1..4,1..4]of byte=(

{ Ц ( ) , }

{S} (0,1,0,0),

{Q} (2,0,0,0),

{P} (2,0,0,1),

{Z} (0,0,0,0));

num:set of char=['0'..'9'];

ee:boolean=true;s:string;

i,q,oq,ns:byte;

col:byte;

M:array[1..100]of word;

assign(input,'input.txt');

assign(output,'output.txt');

reset(input);

rewrite(output);

readln(s);

col:=0;i:=1;q:=1;

fillchar(m,200,0);

writeln(s);i:=1;q:=1;

while(i<=byte(s[0]))and ee do

begin

oq:=q;

if s[i] in num then ns:=1 else { }

if s[i]='(' then ns:=2 else { Определение }

if s[i]=')' then ns:=3 else { номера }

if s[i]=',' then ns:=4 else ns:=0; { символа }

case ps[q,ns] of

1:inc(col);

2:m[col]:=m[Col]*10+byte(s[i])-48;

end;

q:=ms[q,ns];

if ns=0 then

begin

ee:=false;

writeln(1);

end else

if q=0 then

begin

ee:=false;

writeln(2);

end;

inc(i);

end;

if ee then

if q=4 then

begin

writeln(0);

for i:=1 to col do write('M(',i,')=',m[i],#32);

writeln;

end else writeln(3);

close(input);

close(output);.

Вариант №3:ms:array[1..4,1..4]of byte=(

{ Ц Б , ; }

{S} (0,2,0,0),

{Q} (2,2,3,4),

{P} (0,2,0,0),

{Z} (0,0,0,0));ps:array[1..4,1..4]of byte=(

{ Ц Б , ; }

{S} (0,2,0,0),

{Q} (2,2,1,0),

{P} (0,2,0,0),

{Z} (0,0,0,0));

num:set of char=['0'..'9'];

sym:set of char=['A'..'Z','a'..'z'];

ee:boolean=true;s:string;

i,q,oq,ns:byte;

col:byte;

S_:array[1..100]of string;

assign(input,'input.txt');

assign(output,'output.txt');

reset(input);

rewrite(output);

readln(s);

col:=1;fillchar(s_,sizeof(s_),#0);

writeln(s);i:=1;q:=1;

while(i<=byte(s[0]))and ee do

begin

oq:=q;

if s[i] in num then ns:=1 else { }

if s[i] in sym then ns:=2 else { Определение }

if s[i]=',' then ns:=3 else { номера }

if s[i]=';' then ns:=4 else ns:=0; { символа }

case ps[q,ns] of

1:inc(col);

2:s_[col]:=s_[col]+s[i];

end;

q:=ms[q,ns];

if ns=0 then

begin

ee:=false;

writeln(1);

end else

if q=0 then

begin

ee:=false;

writeln(2);

end;

inc(i);

end;

if ee then

if q=4 then

begin

writeln(0);

for i:=1 to col do write('S(',i,')=',s_[i],#32);

writeln;

end else writeln(3);

close(input);

close(output);.

Вариант №4:ms:array[1..5,1..2]of byte=(

{ Ц . }

{S} (2,0),

{Q} (2,3),

{T} (4,0),

{P} (4,5),

{B} (5,0));ps:array[1..5,1..2]of byte=(

{ Ц . }

{S} (1,0),

{Q} (1,0),

{T} (2,0),

{P} (2,0),

{B} (3,0));

num:set of char=['0'..'9'];

ee:boolean=true;s:string;

i,q,oq,ns:byte;

hou,min,sec:word;

assign(input,'input.txt');

assign(output,'output.txt');

reset(input);

rewrite(output);

readln(s);

hou:=0;min:=0;sec:=0;

writeln(s);i:=1;q:=1;

while(i<=byte(s[0]))and ee do

begin

oq:=q;

if s[i] in num then ns:=1 else { Определение }

if s[i]='.' then ns:=2 else ns:=0; { номера символа }

case ps[q,ns] of

1:hou:=hou*10+byte(s[i])-48;

2:min:=min*10+byte(s[i])-48;

3:sec:=sec*10+byte(s[i])-48;

end;

q:=ms[q,ns];

if ns=0 then

begin

ee:=false;

writeln(1);

end else

if q=0 then

begin

ee:=false;

writeln(2);

end;

inc(i);

end;

if ee then

if q in [2,4,5] then writeln('0'#13#10't=',hou*3600+min*60+sec)

else writeln('3');

close(input);

close(output);.

Вариант №5:ms:array[1..4,1..2]of byte=(

{ Ц - }

{S} (2,0),

{P} (3,0),

{Z} (3,4),

{Q} (2,0));ps:array[1..4,1..2]of byte=(

{ Ц - }

{S} (1,0),

{P} (1,0),

{Z} (1,2),

{Q} (1,0));

num:set of char=['0'..'9'];

sym:set of char=['A'..'Z','a'..'z'];

ee:boolean=true;s:string;

i,q,oq,ns:byte;

col:byte;

n:array[1..100]of byte;

m:array[1..100]of word;

assign(output,'output.txt');

reset(input);

rewrite(output);

readln(s);

col:=1;fillchar(n,100,0);

fillchar(m,200,0);

writeln(s);i:=1;q:=1;

while(i<=byte(s[0]))and ee do

begin

oq:=q;

if s[i] in num then ns:=1 else {Определение }

if s[i]='-' then ns:=2 else ns:=0; {номера символа}

case ps[q,ns] of

1:begin inc(n[col]);inc(M[col],byte(s[i])-48);end;

2:inc(col);

end;

q:=ms[q,ns];

if ns=0 then

begin

ee:=false;

writeln(1);

end else

if q=0 then

begin

ee:=false;

writeln(2);

end;

inc(i);

end;

if ee then

if q=3 then

begin

writeln('0');

for i:=1 to col do write('n(',i,')=',n[i],#32);

for i:=1 to col do write('m(',i,')=',m[i],#32);

writeln;

end else writeln('3');

close(input);

close(output);.

Вариант №6:ms:array[1..7,1..4]of byte=(

{ Ц + - . }

{S} (2,0,0,0),

{T} (2,3,3,0),

{B} (4,0,0,0),

{P} (4,0,0,5),

{C} (6,0,0,0),

{D} (7,0,0,0),

{A} (7,0,0,0));ps:array[1..7,1..4]of byte=(

{ Ц + - . }

{S} (1,0,0,0),

{T} (1,2,3,0),

{B} (4,0,0,0),

{P} (4,0,0,0),

{C} (5,0,0,0),

{D} (5,0,0,0),

{A} (5,0,0,0));

num:set of char=['0'..'9'];

ee:boolean=true;s:string;

i,q,oq,n,ns:byte;

m,x:real;

sign:shortint;

assign(input,'input.txt');

assign(output,'output.txt');

reset(input);

rewrite(output);

readln(s);

m:=0;x:=0;n:=0;i:=1;q:=1;

writeln(s);

while(i<=byte(s[0]))and(ee)do

begin

oq:=q;

if s[i] in num then ns:=1 else { Определение }

if s[i]='+' then ns:=2 else { номера }

if s[i]='-' then ns:=3 else { }

if s[i]='.' then ns:=4 else ns:=0; { символа }

case ps[q,ns] of

1:m:=m*10+byte(s[i])-48;

2:sign:=1;

3:sign:=-1;

4:x:=x*10+byte(s[i])-48;

5:begin x:=x*10+byte(s[i])-48;inc(n);end;

end;

q:=ms[q,ns];

if ns=0 then

begin

ee:=false;

writeln(1);

end else

if q=0 then

begin

ee:=false;

writeln(2);

end;

inc(i);

end;

if ee then

if(q=4)or(q=7)then

begin

for i:=1 to n do x:=x/10;

m:=m+sign*x;

writeln('0'#13#10,'M=',m:2:2,' N=',n);

end else writeln('3');

close(input);

close(output);.

Вариант №7:ms:array[1..3,1..3]of byte=(

{ Ц - +}

{S} (2,0,0),

{Z} (2,3,3),

{P} (2,0,0));ps:array[1..3,1..3]of byte=(

{ Ц - +}

{S} (1,0,0),

{Z} (1,3,2),

{P} (1,0,0));

num:set of char=['0'..'9'];

ee:boolean=true;s:string;

i,q,oq,ns:byte;

col:byte;

m:array[1..100]of longint;

v:longint;

sign:shortint;

assign(input,'input.txt');

assign(output,'output.txt');

reset(input);

rewrite(output);

readln(s);

col:=1;v:=0;sign:=+1;

fillchar(m,400,0);

writeln(s);i:=1;q:=1;

while(i<=byte(s[0]))and ee do

begin

oq:=q;

if s[i] in num then ns:=1 else {Определение }

if s[i]='-' then ns:=2 else { номера }

if s[i]='+' then ns:=3 else ns:=0; { символа }

case ps[q,ns] of

1:M[col]:=M[Col]*10+byte(s[i])-48;

2:begin v:=v+sign*M[col];inc(col);sign:=+1;end;

3:begin v:=v+sign*M[col];inc(col);sign:=-1;end;

end;

q:=ms[q,ns];

if ns=0 then

begin

ee:=false;

writeln(1);

end else

if q=0 then

begin

ee:=false;

writeln(2);

end;

inc(i);

end;

if ee then

if q=2 then

begin

writeln('0');v:=v+sign*M[col];

for i:=1 to col do write('M(',i,')=',M[i],#32);

writeln('v=',v);

end else writeln('3');

close(input);

close(output);.

Вариант №8:ms:array[1..4,1..3]of byte=(

{ ' , c }

{S} (2,0,0),

{T} (3,2,2),

{Z} (2,4,0),

{P} (2,0,0));ps:array[1..4,1..3]of byte=(

{ ' , c }

{S} (2,0,0),

{T} (0,1,1),

{Z} (1,0,0),

{P} (2,0,0));

sym:set of char=[#32..#255];

ee:boolean=true;s:string;

i,q,oq,ns:byte;

col:byte;

ws:array[1..100]of string;

assign(input,'input.txt');

assign(output,'output.txt');

reset(input);

rewrite(output);

sym:=sym-['''',','];

readln(s);

col:=0;fillchar(ws,sizeof(ws),0);

writeln(s);i:=1;q:=1;

while(i<=byte(s[0]))and ee do

begin

oq:=q;

if s[i]='''' then ns:=1 else {Определение }

if s[i]=',' then ns:=2 else { номера }

if s[i] in sym then ns:=3 else ns:=0; { символа }

case ps[q,ns] of

1:ws[col]:=ws[col]+s[i];

2:inc(col);

end;

q:=ms[q,ns];

if ns=0 then

begin

ee:=false;

writeln(1);

end else

if q=0 then

begin

ee:=false;

writeln(2);

end;

inc(i);

end;

if ee then

if q=3 then

begin

writeln('0');

for i:=1 to col do write('S(',i,')=',ws[i],#32);

writeln;

end else writeln('3');

close(input);

close(output);.

Вариант №9ms:array[1..5,1..4]of byte=(

{ Ц Б : \ }

{S} (0,2,0,0),

{B} (0,0,3,0),

{Q} (0,0,0,4),

{T} (0,5,0,0),

{Z} (5,5,0,4));ps:array[1..5,1..4]of byte=(

{ Ц Б : \ }

{S} (0,1,0,0),

{B} (0,0,0,0),

{Q} (0,0,0,0),

{T} (0,3,0,0),

{Z} (3,3,0,2));

num:set of char=['0'..'9'];

sym:set of char=['A'..'Z','a'..'z','~','_'];

ee:boolean=true;s:string;

i,q,oq,ns:byte;

Drive:char;

col:byte;

ws:array[1..100]of string;

assign(input,'input.txt');

assign(output,'output.txt');

reset(input);

rewrite(output);

readln(s);

col:=1;fillchar(ws,sizeof(ws),0);

DRIVE:=#0;

writeln(s);i:=1;q:=1;

while(i<=byte(s[0]))and ee do

begin

oq:=q;

if s[i] in num then ns:=1 else {Определение }

if s[i] in sym then ns:=2 else { номера }

if s[i]=':' then ns:=3 else { символа }

if s[i]='\' then ns:=4 else ns:=0; { }

case ps[q,ns] of

1:Drive:=s[i];

2:inc(col);

3:ws[col]:=ws[col]+s[i];

end;

q:=ms[q,ns];

if ns=0 then

begin

ee:=false;

writeln(1);

end else

if q=0 then

begin

ee:=false;

writeln(2);

end;

inc(i);

end;

if ee then

if q=5 then

begin

writeln('0');

write('D=',drive);

for i:=1 to col do write(' S(',i,')=',ws[i]);

writeln;

end else writeln('3');

close(input);

close(output);.

Вариант №10ms:array[1..8,1..5]of byte=(

(* Ц . , { } *)

{S} (0,0,0,2,0),

{T} (3,0,0,0,0),

{Q} (3,4,0,0,0),

{C} (0,5,0,0,0),

{A} (6,0,0,0,0),

{D} (6,0,7,0,8),

{B} (3,0,0,0,0),

{Z} (0,0,0,0,0));ps:array[1..8,1..5]of byte=(

(* Ц . , { } *)

{S} (0,0,0,0,0),

{T} (1,0,0,0,0),

{Q} (1,0,0,0,0),

{C} (0,2,0,0,0),

{A} (1,0,0,0,0),

{D} (1,0,3,0,0),

{B} (1,0,0,0,0),

{Z} (0,0,0,0,0));

num:set of char=['0'..'9'];

ee:boolean=true;s:string;

i,q,oq,ns:byte;

col:byte;

m:array[1..100]of longint;

n:byte;

assign(input,'input.txt');

assign(output,'output.txt');

reset(input);

rewrite(output);

readln(s);

col:=1;n:=1;

fillchar(m,sizeof(m),0);

writeln(s);i:=1;q:=1;

while(i<=byte(s[0]))and ee do

begin

oq:=q;

if s[i] in num then ns:=1 else {Определение }

if s[i]='.' then ns:=2 else { }

if s[i]=',' then ns:=3 else { номера }

if s[i]='{' then ns:=4 else { }

if s[i]='}' then ns:=5 else ns:=0; { символа }

case ps[q,ns] of

1:M[col]:=M[col]*10+byte(s[i])-48;

2:inc(col);

3:begin inc(col);inc(n);end;

end;

q:=ms[q,ns];

if ns=0 then

begin

ee:=false;

writeln(1);

end else

if q=0 then

begin

ee:=false;

writeln(2);

end;

inc(i);

end;

if ee then

if q=8 then

begin

writeln('0');

for i:=1 to col do write('M(',i,')=',M[i],#32);

writeln('n=',n);

end else writeln('3');

close(input);

close(output);.

Приложение 2

Исходные тексты условий заданий task.htm:


<HTML>

<HEAD><TITLE>Синтаксический анализ предложений для регулярной грамматики</TITLE></HEAD>

<BODY>

<CENTER>

<H2>Вариант №1</H2>

<TABLE>

<TR><TD>Исходный файл:</TD><TD>Laba0101.pas или Laba0101.c</TD></TR>

<TR><TD>Входной файл:</TD><TD>input.txt</TD></TR>

<TR><TD>Выходной файл:</TD><TD>output.txt</TD></TR>

</TABLE>

</CENTER>

<H4>Постановка задачи</h4>

<p>

&nbsp;&nbsp;Для заданной регулярной грамматики написать и отладить программу синтаксического анализа предложений порождаемого языка. В ходе выполнения задания:

<OL>

<LI>Разработать подпрограммы, обеспечивающие выделение лексических единиц из входного предложения;</LI>

<LI>Построить в программе матрицы смен состояний и вызова подпрограмм;</LI>

<LI>Обеспечить выдачу сообщений о различных видах синтаксических ошибок во входных предложениях</LI>

</OL></P>

<p>

&nbsp;&nbsp;Обозначение терминальных символов при написании граммматики:<BR>

&nbsp;&nbsp;&nbsp;&nbsp;ц - терминальный символ "цифра" (0,1,2,3,4,5,6,7,8,9);<BR>

&nbsp;&nbsp;&nbsp;&nbsp;б - терминальный символ "буква" ('A'..'Z','a'..'z');

</P>

<P>

<TABLE>

<TR><TD >Z&nbsp;-&gt;&nbsp;Tц&nbsp;|&nbsp;Zц<BR>T&nbsp;-&gt;&nbsp;P+&nbsp;|&nbsp;P-<BR>P&nbsp;-&gt;&nbsp;Rб&nbsp;|&nbsp;Pб&nbsp;|&nbsp;Pц<BR>R&nbsp;-&gt;&nbsp;Q=<BR>Q&nbsp;-&gt;&nbsp;б&nbsp;|&nbsp;Qб&nbsp;|&nbsp;Qц</TD><TD>Грамматика описывает предложения вида: &lt;идентификатор&gt;=&lt;идентификатор&gt;{+|-}&lt;целое&gt;.</TD></TR>

</TABLE>

&nbsp;&nbsp;В ходе разбора предложения должны быть получены две переменные с идентификаторами и значение константы (возможно отрицательное).

</P>

<H4>Ввод:</h4>

<P>

&nbsp;&nbsp;Ввод исходных данных осуществляется из файла input.txt, который содержит строку, содержащую предложение для разбора.

</P>

<H4>Вывод</h4>

<p>

&nbsp;&nbsp;Для строки во входном файле программа должна вывести две или три строки решения согласно следуюшему правилу:<BR>

<UL>

<LI>Если предложение корректное, то программа должна вывести в первую строку исходное выражение, во вторую строку число 0, и в третью строку две переменные с идентификаторами p1 и p2, и значение константы k, разделенные одним пробелом;</LI>

<LI>Если предложение некорректное, то программа должна вывести в первую строку исходное выражение, а во вторую строку вывести номер ошибки (1,2 или 3):<BR>

<TABLE>

<TR><TD><B>1</B></TD><TD>Если в процессе разбора встретился недопустимый символ</TD></TR>

<TR><TD><B>2</B></TD><TD>Если в процессе разбора встретился допустимый символ, но который не может находится на этом месте</TD></TR>

<TR><TD><B>3</B></TD><TD>Если в процессе разбора обнаружилось, что предложение не закончено</TD></TR>

</TABLE></LI>

</UL></P>

<h4>Пример 1</h4>

<p>

Файл ввода input.txt содержит:<BR>

<pre>=b-5

</PRE>

Файл вывода output.txt должен содержать следующие строки:<BR>

<pre>=b-5

=a11 p2=b k=-5

</PRE>

</P>

<h4>Пример 2</h4>

<p>

Файл ввода input.txt содержит:<BR>

<PRE>

a=qwe-90

</pre>

Файл вывода output.txt должен содержать следующие строки:<BR>

<PRE>

a=qwe-90

</pre></P>

</BODY>

</HTML>

Вариант №2:

<HTML>

<HEAD><TITLE>Синтаксический анализ предложений для регулярной грамматики</TITLE></HEAD>

<BODY>

<CENTER>

<H2>Вариант №2</H2>

<TABLE>

<TR><TD>Исходный файл:</TD><TD>Laba0102.pas или Laba0102.c</TD></TR>

<TR><TD>Входной файл:</TD><TD>input.txt</TD></TR>

<TR><TD>Выходной файл:</TD><TD>output.txt</TD></TR>

</TABLE>

</CENTER>

<H4>Постановка задачи</h4>

<p>

&nbsp;&nbsp;Для заданной регулярной грамматики написать и отладить программу синтаксического анализа предложений порождаемого языка. В ходе выполнения задания:

<OL>

<LI>Разработать подпрограммы, обеспечивающие выделение лексических единиц из входного предложения;</LI>

<LI>Построить в программе матрицы смен состояний и вызова подпрограмм;</LI>

<LI>Обеспечить выдачу сообщений о различных видах синтаксических ошибок во входных предложениях</LI>

</OL></P>

<p>

&nbsp;&nbsp;Обозначение терминальных символов при написании граммматики:<BR>

&nbsp;&nbsp;&nbsp;&nbsp;ц - терминальный символ "цифра" (0,1,2,3,4,5,6,7,8,9);

</P>

<P>

<TABLE>

<TR><TD>Z -&gt; P )<BR>P -&gt; Qц | Pц<BR>Q -&gt; ( | R<BR>R -&gt; P,</TD><TD>Грамматика описывает предложения вида: &lt;число&gt;{+|-}&lt;число&gt;[.&lt;число&gt;], причем число после точки должно содержать не менее двух цифр.</TD></TR>

</TABLE>

&nbsp;&nbsp;В ходе разбора предложения заданными целыми числами должен быть заполен массив M.

</P>

<H4>Ввод:</h4>

<P>

&nbsp;&nbsp;Ввод исходных данных осуществляется из файла input.txt, который содержит одну строку, которая содержит предложение для разбора.

</P>

<H4>Вывод</h4>

<p>

&nbsp;&nbsp;Для строки во входном файле программа должна вывести две или три строки решения согласно следуюшему правилу:<BR>

<UL>

<LI>Если предложение корректное, то программа должна вывести в первую строку исходное выражение, во вторую строку число 0, и в третью строку значения элементов массива M M(i), разделенные одним пробелом;</LI>

<LI>Если предложение некорректное, то программа должна вывести в первую строку исходное выражение, а во вторую строку вывести номер ошибки (1,2 или 3):<BR>

<TABLE>

<TR><TD><B>1</B></TD><TD>Если в процессе разбора встретился недопустимый символ</TD></TR>

<TR><TD><B>2</B></TD><TD>Если в процессе разбора встретился допустимый символ, но который не может находится на этом месте</TD></TR>

<TR><TD><B>3</B></TD><TD>Если в процессе разбора обнаружилось, что предложение не закончено</TD></TR>

</TABLE></LI>

</UL></P>

<h4>Пример 1</h4>

<p>

Файл ввода input.txt содержит:<BR>

<pre>

(1,10,15)

</pre>

Файл вывода output.txt для данного входного файла должен содержать следующие строки:

<BR>

<pre>

(1,10,15)

(1)=1 M(2)=10 M(3)=15

</PRE></P>

<h4>Пример 2</h4>

<P>

Файл ввода input.txt содержит:<BR>

<PRE>

(3,R,5,6)

</PRE>

Файл вывода output.txt для данного входного файла должен содержать следующие строки:

<BR>

<PRE>

(3,R,5,6)

</pre></P>

</BODY>

</HTML>

Вариант №3:

<HTML>

<HEAD><TITLE>Синтаксический анализ предложений для регулярной грамматики</TITLE></HEAD>

<BODY>

<CENTER>

<H2>Вариант №3</H2>

<TABLE>

<TR><TD>Исходный файл:</TD><TD>Laba0103.pas или Laba0103.c</TD></TR>

<TR><TD>Входной файл:</TD><TD>input.txt</TD></TR>

<TR><TD>Выходной файл:</TD><TD>output.txt</TD></TR>

</TABLE>

</CENTER>

<H4>Постановка задачи</h4>

<p>

&nbsp;&nbsp;Для заданной регулярной грамматики написать и отладить программу синтаксического анализа предложений порождаемого языка. В ходе выполнения задания:

<OL>

<LI>Разработать подпрограммы, обеспечивающие выделение лексических единиц из входного предложения;</LI>

<LI>Построить в программе матрицы смен состояний и вызова подпрограмм;</LI>

<LI>Обеспечить выдачу сообщений о различных видах синтаксических ошибок во входных предложениях</LI>

</OL></P>

<p>

&nbsp;&nbsp;Обозначение терминальных символов при написании граммматики:<BR>

&nbsp;&nbsp;&nbsp;&nbsp;ц - терминальный символ "цифра" (0,1,2,3,4,5,6,7,8,9);<BR>

&nbsp;&nbsp;&nbsp;&nbsp;б - терминальный символ "буква" ('A'..'Z','a'..'z');

</P>

<P>

<TABLE>

<TR><TD>Z -&gt; Q;<BR>P -&gt; Q,<BR>Q -&gt; б | Pб | Qб | Qц<BR></TD><TD>Грамматика описывает предложения вида: &lt;идентификатор&gt;,...,&lt;идентификатор&gt;;.</TD></TR>

</TABLE>

&nbsp;&nbsp;В ходе разбора предложения заданными идентификаторами должен быть заполнен массив S.

</P>

<H4>Ввод:</h4>

<P>

&nbsp;&nbsp;Ввод исходных данных осуществляется из файла input.txt, который содержит одну строку, которая содержит предложение для разбора.

</P>

<H4>Вывод</h4>

<p>

&nbsp;&nbsp;Для строки во входном файле программа должна вывести две или три строки решения согласно следуюшему правилу:<BR>

<UL>

<LI>Если предложение корректное, то программа должна вывести в первую строку исходное выражение, во вторую строку число 0, и в третью строку значения элементов массива S S(i), разделенные одним пробелом;</LI>

<LI>Если предложение некорректное, то программа должна вывести в первую строку исходное выражение, а во вторую строку вывести номер ошибки (1,2 или 3):<BR>

<TABLE>

<TR><TD><B>1</B></TD><TD>Если в процессе разбора встретился недопустимый символ</TD></TR>

<TR><TD><B>2</B></TD><TD>Если в процессе разбора встретился допустимый символ, но который не может находится на этом месте</TD></TR>

<TR><TD><B>3</B></TD><TD>Если в процессе разбора обнаружилось, что предложение не закончено</TD></TR>

</TABLE></LI>

</UL></P>

<h4>Пример 1</h4>

<p>

Файл ввода input.txt содержит:<BR>

<pre>,bb,d7;

</PRE>

Файл вывода output.txt для данного входного файла должен содержать следующие строки:<BR>

<pre>,bb,d7;

(1)=aaa S(2)=bb S(3)=d7

</PRE></p>

<h4>Пример 2</h4>

<p>

Файл ввода input.txt содержит:<BR>

<PRE>,,z;

</pre>

Файл вывода output.txt для данного входного файла должен содержать следующие строки:<BR>

<PRE>,,z;

</pre></P>

</BODY>

</HTML>

Вариант №4:

<HTML>

<HEAD><TITLE>Синтаксический анализ предложений для регулярной грамматики</TITLE></HEAD>

<BODY>

<CENTER>

<H2>Вариант №4</H2>

<TABLE>

<TR><TD>Исходный файл:</TD><TD>Laba0104.pas или Laba0104.c</TD></TR>

<TR><TD>Входной файл:</TD><TD>input.txt</TD></TR>

<TR><TD>Выходной файл:</TD><TD>output.txt</TD></TR>

</TABLE>

</CENTER>

<H4>Постановка задачи</h4>

<p>

&nbsp;&nbsp;Для заданной регулярной грамматики написать и отладить программу синтаксического анализа предложений порождаемого языка. В ходе выполнения задания:

<OL>

<LI>Разработать подпрограммы, обеспечивающие выделение лексических единиц из входного предложения;</LI>

<LI>Построить в программе матрицы смен состояний и вызова подпрограмм;</LI>

<LI>Обеспечить выдачу сообщений о различных видах синтаксических ошибок во входных предложениях</LI>

</OL></P>

<p>

&nbsp;&nbsp;Обозначение терминальных символов при написании граммматики:<BR>

&nbsp;&nbsp;&nbsp;&nbsp;ц - терминальный символ "цифра" (0,1,2,3,4,5,6,7,8,9);

</P>

<P>

<TABLE>

<TR><TD>Z -&gt; Q | P | B<BR>Q -&gt; ц | Qц<BR>T -&gt; Q. <BR>P -&gt; Tц | Pц<BR>B -&gt; P. | Bц</TD><TD>Грамматика описывает предложения вида: &lt;часы&gt;[.&lt;минуты&gt;[.&lt;секунды&gt;]]</TD></TR>

</TABLE>

&nbsp;&nbsp;В ходе разбора предложения необходимо вычислить значение времени дня в секундах.

</P>

<H4>Ввод:</h4>

<P>

&nbsp;&nbsp;Ввод исходных данных осуществляется из файла input.txt, который содержит одну строку, которая содержит предложение для разбора.

</P>

<H4>Вывод</h4>

<p>

&nbsp;&nbsp;Для строки во входном файле программа должна вывести две или три строки решения согласно следуюшему правилу:<BR>

<UL>

<LI>Если предложение корректное, то программа должна вывести в первую строку исходное выражение, во вторую строку число 0, и в третью строку значение времени дня в секундах t;</LI>

<LI>Если предложение некорректное, то программа должна вывести в первую строку исходное выражение, а во вторую строку вывести номер ошибки (1,2 или 3):<BR>

<TABLE>

<TR><TD><B>1</B></TD><TD>Если в процессе разбора встретился недопустимый символ</TD></TR>

<TR><TD><B>2</B></TD><TD>Если в процессе разбора встретился допустимый символ, но который не может находится на этом месте</TD></TR>

<TR><TD><B>3</B></TD><TD>Если в процессе разбора обнаружилось, что предложение не закончено</TD></TR>

</TABLE></LI>

</UL></P>

<h4>Пример 1</h4>

<p>

Файл ввода input.txt содержит:<BR>

<pre>

.55

</PRE>

Файл вывода output.txt для данного входного файла должен содержать следующие строки:<BR>

<pre>

.55

</PRE></P>

<h4>Пример 2</h4>

<p>

Файл ввода input.txt содержит:<BR>

<PRE>

a

</pre>

Файл вывода output.txt для данного входного файла должен содержать следующие строки:<BR>

<PRE>

a

</pre></P>

</BODY>

</HTML>

Вариант №5:

<HTML>

<HEAD><TITLE>Синтаксический анализ предложений для регулярной грамматики</TITLE></HEAD>

<BODY>

<CENTER>

<H2>Вариант №5</H2>

<TABLE>

<TR><TD>Исходный файл:</TD><TD>Laba0105.pas или Laba0105.c</TD></TR>

<TR><TD>Входной файл:</TD><TD>input.txt</TD></TR>

<TR><TD>Выходной файл:</TD><TD>output.txt</TD></TR>

</TABLE>

</CENTER>

<H4>Постановка задачи</h4>

<p>

&nbsp;&nbsp;Для заданной регулярной грамматики написать и отладить программу синтаксического анализа предложений порождаемого языка. В ходе выполнения задания:

<OL>

<LI>Разработать подпрограммы, обеспечивающие выделение лексических единиц из входного предложения;</LI>

<LI>Построить в программе матрицы смен состояний и вызова подпрограмм;</LI>

<LI>Обеспечить выдачу сообщений о различных видах синтаксических ошибок во входных предложениях</LI>

</OL></P>

<p>

&nbsp;&nbsp;Обозначение терминальных символов при написании граммматики:<BR>

&nbsp;&nbsp;&nbsp;&nbsp;ц - терминальный символ "цифра" (0,1,2,3,4,5,6,7,8,9);

</P>

<P>

<TABLE>

<TR><TD>Z -&gt; Zц | Pц<BR>P -&gt; ц | Qц<BR>Q -&gt; Z-</TD><TD>Грамматика описывает предложения вида: &lt;число&gt;[-&lt;число&gt;...] для чисел, содержащих не менее двух цифр.</TD></TR>

</TABLE>

&nbsp;&nbsp;В ходе разбора предложения должна быть подсчитаны количество цифр в каждом числе и сумма этих цифр.

</P>

<H4>Ввод:</h4>

<P>

&nbsp;&nbsp;Ввод исходных данных осуществляется из файла input.txt, который содержит одну строку, которая содержит предложение для разбора.

</P>

<H4>Вывод</h4>

<p>

&nbsp;&nbsp;Для строки во входном файле программа должна вывести две или три строки решения согласно следуюшему правилу:<BR>

<UL>

<LI>Если предложение корректное, то программа должна вывести в первую строку исходное выражение, во вторую строку число 0, и в третью строку количество цифр для каждого числа n(i) и сумму цифр для каждого числа m(i) через один пробел;</LI>

<LI>Если предложение некорректное, то программа должна вывести в первую строку исходное выражение, а во вторую строку вывести номер ошибки (1,2 или 3):<BR>

<TABLE>

<TR><TD><B>1</B></TD><TD>Если в процессе разбора встретился недопустимый символ</TD></TR>

<TR><TD><B>2</B></TD><TD>Если в процессе разбора встретился допустимый символ, но который не может находится на этом месте</TD></TR>

<TR><TD><B>3</B></TD><TD>Если в процессе разбора обнаружилось, что предложение не закончено</TD></TR>

</TABLE></LI>

</UL></P>

<h4>Пример 1</h4>

<p>

Файл ввода input.txt содержит:<BR>

<pre>

-0999-532

</PRE>

Файл вывода output.txt для данного входного файла должен содержать следующие строки:<BR>

<pre>

-0999-532

(1)=2 n(2)=4 n(3)=3 m(1)=5 m(2)=27 m(3)=10

</PRE></P>

<h4>Пример 2</h4>

<p>

<PRE>

+12-3-3-0

</pre>

Файл вывода output.txt для данного входного файла должен содержать следующие строки:<BR>

<PRE>

+12-3-3-0

</pre></P>

</BODY>

</HTML>

Вариант №6:

<HTML>

<HEAD><TITLE>Синтаксический анализ предложений для регулярной грамматики</TITLE></HEAD>

<BODY>

<CENTER>

<H2>Вариант №6</H2>

<TABLE>

<TR><TD>Исходный файл:</TD><TD>Laba0106.pas или Laba0106.c</TD></TR>

<TR><TD>Входной файл:</TD><TD>input.txt</TD></TR>

</TABLE>

</CENTER>

<H4>Постановка задачи</h4>

<p>

&nbsp;&nbsp;Для заданной регулярной грамматики написать и отладить программу синтаксического анализа предложений порождаемого языка. В ходе выполнения задания:

<OL>

<LI>Разработать подпрограммы, обеспечивающие выделение лексических единиц из входного предложения;</LI>

<LI>Построить в программе матрицы смен состояний и вызова подпрограмм;</LI>

<LI>Обеспечить выдачу сообщений о различных видах синтаксических ошибок во входных предложениях</LI>

</OL></P>

<p>

&nbsp;&nbsp;Обозначение терминальных символов при написании граммматики:<BR>

&nbsp;&nbsp;&nbsp;&nbsp;ц - терминальный символ "цифра" (0,1,2,3,4,5,6,7,8,9);<BR>

&nbsp;&nbsp;&nbsp;&nbsp;б - терминальный символ "буква" ('A'..'Z','a'..'z');

</P>

<P>

<TABLE>

<TR><TD>Z -&gt; P | A<BR>T -&gt; C | Tц<BR>B -&gt; T+ | T-<BR>P -&gt; Bц | Pц<BR>C -&gt; P.<BR>D -&gt; Cц<BR>A -&gt; Dц | Aц</TD><TD>Грамматика описывает предложения вида: &lt;число&gt;{+|-}&lt;число&gt;[.&lt;число&gt;], причем число после точки должно содержать не менее двух цифр.</TD></TR>

</TABLE>

&nbsp;&nbsp;В ходе разбора предложения должны быть получены значение всего выражения и число знаков после точки.

</P>

<H4>Ввод:</h4>

<P>

&nbsp;&nbsp;Ввод исходных данных осуществляется из файла input.txt, который содержит одну строку, которая содержит предложение для разбора.

</P>

<H4>Вывод</h4>

<p>

&nbsp;&nbsp;Для строки во входном файле программа должна вывести две или три строки решения согласно следуюшему правилу:<BR>

<UL>

<LI>Если предложение корректное, то программа должна вывести в первую строку исходное выражение, во вторую строку число 0, и в третью строку значение всего выражения M с двумя знаками после запятой и число знаков после точки N;</LI>

<LI>Если предложение некорректное, то программа должна вывести в первую строку исходное выражение, а во вторую строку вывести номер ошибки (1,2 или 3):<BR>

<TABLE>

<TR><TD><B>1</B></TD><TD>Если в процессе разбора встретился недопустимый символ</TD></TR>

<TR><TD><B>2</B></TD><TD>Если в процессе разбора встретился допустимый символ, но который не может находится на этом месте</TD></TR>

<TR><TD><B>3</B></TD><TD>Если в процессе разбора обнаружилось, что предложение не закончено</TD></TR>

</TABLE></LI>

</UL></P>

<h4>Пример 1</h4>

<p>

Файл ввода input.txt содержит:<BR>

<pre>

-5.50

</PRE>

Файл вывода output.txt для данного входного файла должен содержать следующие строки:<BR>

<pre>

-5.50

=4.50 N=2

</PRE></P>

<h4>Пример 2</h4>

<p>

Файл ввода input.txt содержит:<BR>

<PRE>

-a

</pre>

Файл вывода output.txt для данного входного файла должен содержать следующие строки:<BR>

<PRE>

-a

</pre></P>

</BODY>

</HTML>

Вариант №7:

<HTML>

<HEAD><TITLE>Синтаксический анализ предложений для регулярной грамматики</TITLE></HEAD>

<BODY>

<CENTER>

<H2>Вариант №7</H2>

<TABLE>

<TR><TD>Исходный файл:</TD><TD>Laba0107.pas или Laba0107.c</TD></TR>

<TR><TD>Входной файл:</TD><TD>input.txt</TD></TR>

<TR><TD>Выходной файл:</TD><TD>output.txt</TD></TR>

</TABLE>

</CENTER>

<H4>Постановка задачи</h4>

<p>

&nbsp;&nbsp;Для заданной регулярной грамматики написать и отладить программу синтаксического анализа предложений порождаемого языка. В ходе выполнения задания:

<OL>

<LI>Разработать подпрограммы, обеспечивающие выделение лексических единиц из входного предложения;</LI>

<LI>Построить в программе матрицы смен состояний и вызова подпрограмм;</LI>

<LI>Обеспечить выдачу сообщений о различных видах синтаксических ошибок во входных предложениях</LI>

</OL></P>

<p>

&nbsp;&nbsp;Обозначение терминальных символов при написании граммматики:<BR>

&nbsp;&nbsp;&nbsp;&nbsp;ц - терминальный символ "цифра" (0,1,2,3,4,5,6,7,8,9);

</P>

<P>

<TABLE>

<TR><TD>Z -&gt; Zц | Pц | ц<BR>P -&gt; Z- | Z+</TD><TD>Грамматика описывает предложения вида: &lt;число&gt;[{+|-}&lt;число&gt;...]</TD></TR>

</TABLE>

&nbsp;&nbsp;В ходе разбора предложения должно быть выполнено заполнение массива M заданными числами и подсчитано значение выражения.

</P>

<H4>Ввод:</h4>

<P>

&nbsp;&nbsp;Ввод исходных данных осуществляется из файла input.txt, который содержит одну строку, которая содержит предложение для разбора.

</P>

<H4>Вывод</h4>

<p>

&nbsp;&nbsp;Для строки во входном файле программа должна вывести две или три строки решения согласно следуюшему правилу:<BR>

<UL>

<LI>Если предложение корректное, то программа должна вывести в первую строку исходное выражение, во вторую строку число 0, и в третью строку значения элементов массива M M(i) и значение выражения v, разделенные одним пробелом;</LI>

<LI>Если предложение некорректное, то программа должна вывести в первую строку исходное выражение, а во вторую строку вывести номер ошибки (1,2 или 3):<BR>

<TABLE>

<TR><TD><B>1</B></TD><TD>Если в процессе разбора встретился недопустимый символ</TD></TR>

<TR><TD><B>2</B></TD><TD>Если в процессе разбора встретился допустимый символ, но который не может находится на этом месте</TD></TR>

<TR><TD><B>3</B></TD><TD>Если в процессе разбора обнаружилось, что предложение не закончено</TD></TR>

</TABLE></LI>

</UL></P>

<h4>Пример 1</h4>

<p>

Файл ввода input.txt содержит:<BR>

<pre>

+10-12

</PRE>

Файл вывода output.txt для данного входного файла должен содержать следующие строки:<BR>

<pre>

+10-12

(1)=6 M(2)=10 M(3)=12 v=4

</PRE></P>

<h4>Пример 2</h4>

<P>

Файл ввода input.txt содержит:<BR>

<PRE>

+8+

</pre>

Файл вывода output.txt для данного входного файла должен содержать следующие строки:<BR>

<PRE>

+8+

</pre></P>

</BODY>

</HTML>

Вариант №8:

<HTML>

<HEAD><TITLE>Синтаксический анализ предложений для регулярной грамматики</TITLE></HEAD>

<BODY>

<CENTER>

<H2>Вариант №8</H2>

<TABLE>

<TR><TD>Исходный файл:</TD><TD>Laba0108.pas или Laba0108.c</TD></TR>

<TR><TD>Входной файл:</TD><TD>input.txt</TD></TR>

<TR><TD>Выходной файл:</TD><TD>output.txt</TD></TR>

</TABLE>

</CENTER>

<H4>Постановка задачи</h4>

<p>

&nbsp;&nbsp;Для заданной регулярной грамматики написать и отладить программу синтаксического анализа предложений порождаемого языка. В ходе выполнения задания:

<OL>

<LI>Разработать подпрограммы, обеспечивающие выделение лексических единиц из входного предложения;</LI>

<LI>Построить в программе матрицы смен состояний и вызова подпрограмм;</LI>

<LI>Обеспечить выдачу сообщений о различных видах синтаксических ошибок во входных предложениях</LI>

</OL></P>

<p>

&nbsp;&nbsp;Обозначение терминальных символов при написании граммматики:<BR>

&nbsp;&nbsp;&nbsp;&nbsp;c - терминальный символ, любой символ, кроме апострофа и запятой;

</P>

<P>

<TABLE>

<TR><TD>Z -&gt; T'<BR>T -&gt; ' | T, | Tc | Z' | P'<BR>P -&gt; Z,</TD><TD>Грамматика описывает предложения вида: 'слово',...,'слово'</TD></TR>

</TABLE>

&nbsp;&nbsp;В ходе разбора предложения должно быть выполнено заполнение массива S указанными символьными константами (без ограничивающих апострофов).

</P>

<H4>Ввод:</h4>

<P>

&nbsp;&nbsp;Ввод исходных данных осуществляется из файла input.txt, который содержит одну строку, которая содержит предложение для разбора.

</P>

<H4>Вывод</h4>

<p>

&nbsp;&nbsp;Для строки во входном файле программа должна вывести две или три строки решения согласно следуюшему правилу:<BR>

<UL>

<LI>Если предложение корректное, то программа должна вывести в первую строку исходное выражение, во вторую строку число 0, и в третью строку значения элементов массива S S(i) через один пробел;</LI>

<LI>Если предложение некорректное, то программа должна вывести в первую строку исходное выражение, а во вторую строку вывести номер ошибки (1,2 или 3):<BR>

<TABLE>

<TR><TD><B>1</B></TD><TD>Если в процессе разбора встретился недопустимый символ</TD></TR>

<TR><TD><B>2</B></TD><TD>Если в процессе разбора встретился допустимый символ, но который не может находится на этом месте</TD></TR>

<TR><TD><B>3</B></TD><TD>Если в процессе разбора обнаружилось, что предложение не закончено</TD></TR>

</TABLE></LI>

</UL></P>

<h4>Пример 1</h4>

<p>

Файл ввода input.txt содержит:<BR>

<pre>

'кот','об''явление','ку,ку'

</PRE>

Файл вывода output.txt для данного входного файла должен содержать следующие строки:<BR>

<pre>

'кот','об''явление','ку,ку'

(1)=кот S(2)=об'явление S(3)=ку,ку

</PRE></P>

<h4>Пример 2</h4>

<p>

Файл ввода input.txt содержит:<BR>

<PRE>

'проверка

</pre>

Файл вывода output.txt для данного входного файла должен содержать следующие строки:<BR>

<PRE>

'проверка

</pre></P>

</BODY>

</HTML>

Вариант №9:

<HTML>

<HEAD><TITLE>Синтаксический анализ предложений для регулярной грамматики</TITLE></HEAD>

<BODY>

<CENTER>

<H2>Вариант №9</H2>

<TABLE>

<TR><TD>Исходный файл:</TD><TD>Laba0109.pas или Laba0109.c</TD></TR>

<TR><TD>Входной файл:</TD><TD>input.txt</TD></TR>

<TR><TD>Выходной файл:</TD><TD>output.txt</TD></TR>

</TABLE>

</CENTER>

<H4>Постановка задачи</h4>

<p>

&nbsp;&nbsp;Для заданной регулярной грамматики написать и отладить программу синтаксического анализа предложений порождаемого языка. В ходе выполнения задания:

<OL>

<LI>Разработать подпрограммы, обеспечивающие выделение лексических единиц из входного предложения;</LI>

<LI>Построить в программе матрицы смен состояний и вызова подпрограмм;</LI>

<LI>Обеспечить выдачу сообщений о различных видах синтаксических ошибок во входных предложениях</LI>

</OL></P>

<p>

&nbsp;&nbsp;Обозначение терминальных символов при написании граммматики:<BR>

&nbsp;&nbsp;&nbsp;&nbsp;ц - терминальный символ "цифра" (0,1,2,3,4,5,6,7,8,9);<BR>

&nbsp;&nbsp;&nbsp;&nbsp;б - терминальный символ "буква" ('A'..'Z','a'..'z');

</P>

<P>

<TABLE>

<TR><TD>Z -&gt; Zц | Zб | Tб<BR>T -&gt; Z\ | Q\<BR>Q -&gt; B:<BR>B -&gt; б</TD><TD>Грамматика описывает предложения вида: &lt;диск&gt;:\&lt;каталог&gt;[&lt;каталог&gt;...]</TD></TR>

</TABLE>

&nbsp;&nbsp;В ходе разбора предложения необходимо определить имя диска и имена всех каталогов.</P>

<H4>Ввод:</h4>

<P>

&nbsp;&nbsp;Ввод исходных данных осуществляется из файла input.txt, который содержит одну строку, которая содержит предложение для разбора.

</P>

<H4>Вывод</h4>

<p>

&nbsp;&nbsp;Для строки во входном файле программа должна вывести две или три строки решения согласно следуюшему правилу:<BR>

<UL>

<LI>Если предложение корректное, то программа должна вывести в первую строку исходное выражение, во вторую строку число 0, и в третью строку имя диска D и имена всех каталогов S(i), разделенные одним пробелом;</LI>

<LI>Если предложение некорректное, то программа должна вывести в первую строку исходное выражение, а во вторую строку вывести номер ошибки (1,2 или 3):<BR>

<TABLE>

<TR><TD><B>1</B></TD><TD>Если в процессе разбора встретился недопустимый символ</TD></TR>

<TR><TD><B>2</B></TD><TD>Если в процессе разбора встретился допустимый символ, но который не может находится на этом месте</TD></TR>

<TR><TD><B>3</B></TD><TD>Если в процессе разбора обнаружилось, что предложение не закончено</TD></TR>

</TABLE></LI>

</UL></P>

<h4>Пример 1</h4>

<p>

Файл ввода input.txt содержит:<BR>

<pre>:\ncc\kt

</PRE>

Файл вывода output.txt для данного входного файла должен содержать следующие строки:<BR>

<pre>:\ncc\kt

=c S(1)=ncc S(2)=kt

</PRE></P>

<h4>Пример 1</h4>

<p>

Файл ввода input.txt содержит:<BR>

<PRE>$:\windows

</pre>

Файл вывода output.txt для данного входного файла должен содержать следующие строки:<BR>

<PRE>$:\windows

</pre></P>

</BODY>

</HTML>

Вариант №10:

<HTML>

<HEAD><TITLE>Синтаксический анализ предложений для регулярной грамматики</TITLE></HEAD>

<BODY>

<CENTER>

<H2>Вариант №10</H2>

<TABLE>

<TR><TD>Исходный файл:</TD><TD>Laba0110.pas или Laba0110.c</TD></TR>

<TR><TD>Входной файл:</TD><TD>input.txt</TD></TR>

<TR><TD>Выходной файл:</TD><TD>output.txt</TD></TR>

</TABLE>

</CENTER>

<H4>Постановка задачи</h4>

<p>

&nbsp;&nbsp;Для заданной регулярной грамматики написать и отладить программу синтаксического анализа предложений порождаемого языка. В ходе выполнения задания:

<OL>

<LI>Разработать подпрограммы, обеспечивающие выделение лексических единиц из входного предложения;</LI>

<LI>Построить в программе матрицы смен состояний и вызова подпрограмм;</LI>

<LI>Обеспечить выдачу сообщений о различных видах синтаксических ошибок во входных предложениях</LI>

</OL></P>

<p>

&nbsp;&nbsp;Обозначение терминальных символов при написании граммматики:<BR>

&nbsp;&nbsp;&nbsp;&nbsp;ц - терминальный символ "цифра" (0,1,2,3,4,5,6,7,8,9);<BR>

</P>

<P>

<TABLE>

<TR><TD>Z -&gt; D}<BR>D -&gt; Dц | Ац<BR>A -&gt; C.<BR>C -&gt; Q.<BR>Q -&gt; Qц | Bц | Tц<BR>B -&gt; D,<BR>T -&gt; {</TD><TD>Грамматика описывает предложения вида: {&lt;целое&gt;..&lt;целое&gt;[,&lt;целое&gt;..&lt;целое&gt;...]}</TD></TR>

</TABLE>

&nbsp;&nbsp;В ходе разбора предложения должно быть выполнено заполнение массива M заданными целами числами и посчитано количество пар чисел.

</P>

<H4>Ввод:</h4>

<P>

&nbsp;&nbsp;Ввод исходных данных осуществляется из файла input.txt, который содержит одну строку, которая содержит предложение для разбора.

</P>

<H4>Вывод</h4>

<p>

&nbsp;&nbsp;Для строки во входном файле программа должна вывести две или три строки решения согласно следуюшему правилу:<BR>

<UL>

<LI>Если предложение корректное, то программа должна вывести в первую строку исходное выражение, во вторую строку число 0, и в третью строку значения элементов массива M M(i) и число пар n через один пробел;</LI>

<LI>Если предложение некорректное, то программа должна вывести в первую строку исходное выражение, а во вторую строку вывести номер ошибки (1,2 или 3):<BR>

<TABLE>

<TR><TD><B>1</B></TD><TD>Если в процессе разбора встретился недопустимый символ</TD></TR>

<TR><TD><B>2</B></TD><TD>Если в процессе разбора встретился допустимый символ, но который не может находится на этом месте</TD></TR>

<TR><TD><B>3</B></TD><TD>Если в процессе разбора обнаружилось, что предложение не закончено</TD></TR>

</TABLE></LI>

</UL></P>

<h4>Пример 1</h4>

<p>

Файл ввода input.txt содержит:<BR>

<pre>

{1..10,5..777,0..100}

</PRE>

Файл вывода output.txt для данного входного файла должен содержать следующие строки:<BR>

<pre>

{1..10,5..777,0..100}

(1)=1 M(2)=10 M(3)=5 M(4)=777 M(5)=0 M(6)=100 n=3

</PRE>

</P>

<h4>Пример 2</h4>

<p>

<PRE>

{3..20,3..const}

</pre>

Файл вывода output.txt для данного входного файла должен содержать следующие строки:<BR>

<PRE>

{3..20,3..const}

</PRE></P>

</BODY>

</HTML>

Приложение 3

Файл task.xml является одинаковым для всех вариантов первой лабораторной работы и содержит текст следующего вида:

<task name="Синтаксический анализ предложений для регулярной грамматики" ename="" author="Мария Певнева" cost="1" type="1"/>

Приложение 4

Файлы тестов и правильных ответов, составляющие полное множество тестов для каждого варианта содержат следующие данные:

Вариант №1:

№ теста

Входной файл

Выходной файл

1

a11=b-5

A11=b-5 0 p1=a11 p2=b k=-5

2

x=y+123

X=y+123 0 p1=x p2=y k=123

3

1a=qwe-90

1a=qwe-90 2

b=c

B=c 3

5

b=c-1a

B=c-1a 2

6

a=9i-2

A=9i-2 2

7

d=f*2

D=f*2 1

8

abcd=efgh-6839

Abcd=efgh-6839 0 p1=abcd p2=efgh k=-6839

9

u1=u1/3

U1=u1/3 1

10

er=io-3+5

Er=io-3+5 2


Вариант №2:

№ теста

Входной файл

Выходной файл

1

(1,10,15)

(1,10,15) 0 M(1)=1 M(2)=10 M(3)=15

2

(1,,2)

(1,,2) 2

3

(3,R,5,6)

(3,R,5,6) 1

4

(89,

(89, 3

5

(9,87,23,45,345,2345,12,23,0)

(9,87,23,45,345,2345,12,23,0) 0 M(1)=9 M(2)=87 M(3)=23 M(4)=45 M(5)=345 M(6)=2345 M(7)=12 M(8)=23 M(9)=0

6

(j)

(j) 1

7

()

() 2


Вариант №3:

№ теста

Входной файл

Выходной файл

1

aaa,bb,d7;

aaa,bb,d7; 0 S(1)=aaa S(2)=bb S(3)=d7

2

a,b,7c;

a,b,7c; 2

3

a$,b;

A$,b; 1

4

x,,z;

x,,z; 2

5

z,y,z

Z,y,z 3

6

a,b,c,d,e,f,g,h,i,j,k;

a,b,c,d,e,f,g,h,i,j,k; 0 S(1)=a S(2)=b S(3)=c S(4)=d S(5)=e S(6)=f S(7)=g S(8)=h S(9)=i S(10)=j S(11)=k

7

;

; 2

8

test;

Test; 0 S(1)=test



Вариант №4:

№ теста

Входной файл

Выходной файл

1

12.55

12.55 0 t=46500

2

12a

12a 1

3

12.55.20.1

12.55.20.1 2

4

1.2.3

1.2.3 0 t=3723

5

0.0.59

0.0.59 0 t=59


Вариант №5:

№ теста

Входной файл

Выходной файл

1

14-0999-532

14-0999-532 0 n(1)=2 n(2)=4 n(3)=3 m(1)=5 m(2)=27 m(3)=10

2

14+12-3-3-0

14+12-3-3-0 1

3

890-678-

890-678- 3

4

39-78

39-78 2

5

1-2-3-4-5-6-7-8-9

1-2-3-4-5-6-7-8-9 2

6

001-005-009

001-005-009 0 n(1)=3 n(2)=3 n(3)=3 m(1)=1 m(2)=5 m(3)=9

7

89a

89a 1



Вариант №6:

№ теста

Входной файл

Выходной файл

1

10-5.50

10-5.50 0 M=4.50 N=2

2

1+1

1+1 0 M=2.00 N=0

3

5+6.23

5+6.23 0 M=11.23 N=2

4

8-7

8-7 0 M=1.00 N=0

5

12+12.03

12+12.03 0 M=24.03 N=2

6

+45-56

+45-56 2

7

78+56.6

78+56.6 3

8

6-8.89

6-8.89 0 M=-2.89 N=2

9

4-6.321

4-6.321 0 M=-2.32 N=3

10

1-1

1-1 2

11

1a

1a 1

12

1-3h

1-3h 1


Вариант №7:

№ теста

Входной файл

Выходной файл

1

14

14 0 M(1)=14 v=14

2

6+10-12

6+10-12 0 M(1)=6 M(2)=10 M(3)=12 v=4

3

6*2-12

6*2-12 1

4

5+-1

5+-1 2

5

5+8+

5+8+3

6

1+2-3+4-5+6-7+8-9

1+2-3+4-5+6-7+8-9 0 M(1)=1 M(2)=2 M(3)=3 M(4)=4 M(5)=5 M(6)=6 M(7)=7 M(8)=8 M(9)=9 v=-3

7

10-12.5

10-12.5 1


Вариант №8:

№ теста

Входной файл

Выходной файл

1

'кот','об''явление','ку,ку'

'кот','об''явление','ку,ку' 0 S(1)=кот S(2)=об'явление S(3)=ку,ку

2

лес,дом

лес,дом 2

3

'проверка

'проверка 3

4

'одно слово'

'одно слово' 0 S(1)=одно слово

5

'''','апостроф'

'''','апостроф' 0 S(1)=' S(2)=апостроф


Вариант №9:

№ тестаВходной файлВыходной файл



1

c:\ncc\kt

c:\ncc\kt 0 D=c S(1)=ncc S(2)=kt

2

c$:\windows

c$:\windows 1

3              \\class1\progra~1\\class1\progra~1

2


 

4

a:\

A:\ 3

5

d:\windows\system32

D:\windows\system32 0 D=d S(1)=windows S(2)=system32

6

a:\dn\dn

a:\dn\dn 0 D=a S(1)=dn S(2)=dn

7

e:\program\bp\bin\

e:\program\bp\bin\ 3


Вариант №10

№ теста

Входной файл

Выходной файл

1

{1..10,5..777,0..100}

{1..10,5..777,0..100} 0 M(1)=1 M(2)=10 M(3)=5 M(4)=777 M(5)=0 M(6)=100 n=3

2

{3..20,3..const}

{3..20,3..const} 1

3

1..5

1..5 2

4

{4..6,

{4..6, 3

5

{1..80}

{1..80} 0 M(1)=1 M(2)=80 n=1

6

{4..23,8..90,1..3}

{4..23,8..90,1..3} 0 M(1)=4 M(2)=23 M(3)=8 M(4)=90 M(5)=1 M(6)=3 n=3


Похожие работы на - Разработка лабораторного практикума по курсу 'Разработка трансляторов для языков программирования'

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!