Мультимедийная система обучения правилам пожарной безопасности

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование

?емени её последнего сохранения;

проверка, задействована ли схема сценария в обучении (в этом случае состав задач и переходов не может редактироваться, можно лишь изменять свойства схемы сценария, задач и переходов);

нахождение начальной задачи;

удаление схемы сценария по её уникальному идентификатору в базе данных.

Класс Task представляет задачу сценария и выполняет следующие функции:

чтение и запись свойств задачи;

доступ к коллекции переходов из данной задачи - экземпляру класса TaskJumpCollection.

Класс TaskJump представляет переход между задачами и выполняет следующие функции:

чтение и запись свойств перехода между задачами;

доступ к задаче, в которую осуществляется данный переход.

Классы TaskCollection и TaskJumpCollection представляют коллекции задач и переходов между задачами соответственно, выполняют следующие функции:

добавление элемента;

удаление элемента;

доступ к элементу по индексу или уникальному идентификатору в базе данных.

Компонент Sike. Scripting.dll

Данный компонент реализует интерпретатор скриптов. Следует отметить, что данный интерпретатор является интерпретатором компилирующего типа.

Основой функционирования интерпретатора скриптов являются следующие четыре этапа:

лексический анализ текста скрипта и его преобразование в список лексем;

синтаксический анализ списка лексем и его преобразование в древовидное представление;

семантический анализ полученного дерева и последующее построение на его основе исполняемого делегата;

исполнение построенного ранее делегата по запросу пользователя.

Общая схема функционирования интерпретатора скриптов представлена на рисунке 3.11.

На каждом из этапов работы интерпретатора скриптов используются следующие структуры данных.

Исходными данными для этапа лексического анализа является строка символов, содержащая исходный текст скрипта, а также описание лексем в формате XML. Результатом выполнения данного этапа является список объектов класса Token.

Класс Token содержит следующие свойства:

делегат, осуществляющий поиск лексемы в указанной строке, начиная с указанной позиции (используется на этапе лексического анализа);

позиция лексемы в тексте скрипта;

длина лексемы;

текст лексемы.

 

Рисунок 3.11 - Общая схема работы интерпретатора скриптов

 

Исходными данными для этапа синтаксического анализа является список объектов класса Token, полученный на этапе лексического анализа, а также описание грамматики в формате XML. Результатом выполнения данного этапа является дерево на основе класса SyntaxTreeNode. Объекты данного класса могут содержать в себе либо объекты класса Token, либо другие объекты класса SyntaxTreeNode.

Исходными данными для этапа семантического анализа и последующего построения исполняемого делегата является дерево, полученное на этапе синтаксического анализа, а также список объектов, которыми может манипулировать скрипт и типов, объекты которых он может создавать. Результатом выполнения данного этапа является делегат, не принимающий никаких параметров, и возвращающий значение типа void.

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

LexAnalyzer - осуществляет процедуру лексического анализа;

SyntaxAnalyzer - осуществляет процедуру синтаксического анализа;

Script - основной класс, выполняет функции компиляции и исполнения скрипта. Агрегирует классы LexAnalyzer и SyntaxAnalyzer для выполнения лексического и синтаксического анализа. Выполняет семантический анализ и построение исполняемого делегата.

Опишем последовательность работы с классом Script:

с помощью статичных свойств GlobalObjects и GlobalTypes задать объекты и типы, доступные всем скриптам;

создать экземпляр класса Script для построения очередного скрипта;

с помощью свойств экземпляра Objects и Types задать объекты и типы, доступные только данному скрипту;

-задать значение свойства Text - текст скрипта;

вызвать метода Parse для компиляции скрипта, перехватить исключения, связанные с ошибками компиляции скрипта (ошибка может быть лексической, синтаксической или семантической);

вызвать метод Run для выполнения скрипта, метод возвращает результат работы скрипта, если в его тексте встречается оператор return, иначе null.

Опишем интеграцию интерпретатора скриптов с остальными компонентами системы.

Компонент Sike. FireSafety.exe использует компонент Sike. FireSafety. Scenario.dll для загрузки схемы сценария. Далее он строит граф состояний с помощью компонента Sike. FireSafety. StateMachine.dll. Делегаты действий входы и выхода, а также делегаты условий перехода класса State как раз и строятся с помощью интерпретатора скриптов. Предварительно компонент Sike. FireSafety.exe находит на сцене объекты, которыми должны манипулировать скрипты, и передает их классу Script.

Компонент Sike. FireSafety.exe

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

главное меню - предназначено для навигации между функциональными блоками системы;

плеер сценария - контролирует прохождение сценария, реализует пользовательский интерфейс режима прохождения сценария, осуществляет сохранение результатов прохождения;

загрузчик сценария - осуществляет загрузку и подготовку сценария к прохождению.

редактор сценариев - реализует пользовательский интерфейс для редактирования сценария с помощью компонента Sike. FireSafety. Scenario.dll.

Приведем описание только одного подкомпонента - плеера сценария, а именно его главного класса ScenarioManager - менедж