Система программирования PascalABC.NET

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

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

Скачать Бесплатно!
Для того чтобы скачать эту работу.
1. Пожалуйста введите слова с картинки:

2. И нажмите на эту кнопку.
закрыть



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

Командная строка:source_file_name_file_name - имя исходного файла главной программы

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

? - Помощьdir - Переход в директорию dir_name - Компилировать файл_mask - Компилировать файлы по маске- Перезапустить компилятор=0|1 - Перезапускать копилятор перед компиляцией [0]=0|1 - Перекомпилировать PCU файлы [0]=0|1 - Генерировать отладочную информацию (PDB файлы) [0]=output_directory - Задать выходную директорию- Очистить экран=0|1 - Выводить все сообщения компилятора [0]=n - Выбрать язык=0|1 - сканировать поддиректории [0]

[] - значение поумолчанию.

13. Модули визуальной оболочки

 

Модули визуальной оболочки (плагины) необходимы для расширения функциональности визуальной оболочки. Модулям доступно внутреннее представление компилятора (синтаксическое и семантическое дерево), с которым они могут делать различные преобразования, например визуалирацию.

 

13.1 Интерфейс подключения

 

Интерфейсы для плагинов находятся в сборке PluginsSupport.dll. Интерфейс, который должен реализовать плагин, имеет вид:interface IVisualPascalABCPlugin

{Name

{;

}Banner

{;

}GetGUI(List ToolBarItems);

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

Интерфейс IPluginGUIItem служит для создания визуальных элементов плакина всраеваемых в оболочку(пунктов меню, кнопок на панели).interface IPluginGUIItem

{Text

{;

}Hint

{;

}.Drawing.Image Image

{;

}.Drawing.Color ImageTransparentColor

{;

}.Windows.Forms.Keys ShortcutKeys

{;

}ShortcutKeyDisplayString

{;

}Execute();

}- текст на кнопке;- всплывающая подсказка;- изображение;- фоновый цвет изображения;- горячие клавиши;- тест, отображающий сочетание горячих клавиш;- функция, которая выполняется в тот момент, когда нажали данную кнопку.

Интерфейс, который должна реализовывать оболочка, к которой подключается такой плагин:interface IVisualEnvironmentCompiler

{.Compiler Compiler

{;

}ExecuteSourceLocationAction(.SourceLocation SourceLocation,Action);ExecuteAction(VisualEnvironmentCompilerAction Action,obj);

}- компилятор, обьект класса PascalABCCompiler.Compiler.- выполняет манипуляции с курсором в исходном тексте программы. Action - действие которое необходимо выполнить с положением курсора SourceLocation.enum SourceLocationAction

{,,,

}- функция, которая позволяет выполнить некоторое действие оболочки. Возможные действия:enum VisualEnvironmentCompilerAction

{,,,,,

}- запустить пограмму;- откомпилировать программу;- перекомпилировать программу;- остановить программу;- открыть файл;- получить одну из стандартных директорий.

Также сборка содержит класс PluginGUIItem, реализующий интерфейс IPluginGUIItem:delegate void PluginGUIItemExecuteDelegate();class PluginGUIItem : IPluginGUIItem

{text;hint;image;imageTransparentColor;executeDelegate;.Windows.Forms.Keys shortcutKeys = System.Windows.Forms.Keys.None;shortcutKeyDisplayString = null;PluginGUIItem(string text, string hint, Image image, Color imageTransparentColor, PluginGUIItemExecuteDelegate executeDelegate)

{.text = text;.hint = hint;.image = image;.imageTransparentColor = imageTransparentColor;.executeDelegate = executeDelegate;

}PluginGUIItem(string text, string hint, Image image, Color imageTransparentColor, PluginGUIItemExecuteDelegate executeDelegate, System.Windows.Forms.Keys shortcutKeys, string shortcutKeyDisplayString)

{.text = text;.hint = hint;.image = image;.imageTransparentColor = imageTransparentColor;.executeDelegate = executeDelegate;.shortcutKeys = shortcutKeys;.shortcutKeyDisplayString = shortcutKeyDisplayString;

}string Text

{{ return text; }

}string Hint

{{ return hint; }

}Image Image

{{ return image; }

}Color ImageTransparentColor

{{ return imageTransparentColor; }

}void Execute()

{();

}System.Windows.Forms.Keys ShortcutKeys

{{ return shortcutKeys; }

}string ShortcutKeyDisplayString

{{ return shortcutKeyDisplayString; }

}

}

Это позволяет при реализации плагинов пользоваться уже готовым классом для визуальных компонентов, либо порождать от него наследника.

13.2 Модуль Визуализатор синтаксического дерева

 

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

Ниже приводится скриншот данного плагина:

 

 

Для перехвата синтаксического дерева необходимо подключится к событию OnChangeCompilerState компилятора. Все структуры внутреннего предсавления, в том числе и синтаксическое дерево, будут существовать вплоть до момента CompilerState.Ready. Самый удобный момент захвата ссылки на синтаксическое дерево - это событие CompilerState.CompilationFinished, которое срабатывает сразу перед событием CompilerState.Ready..UnitTable - хеш таблица откомпилированных модулей. Каждый модуль из этой таблицы хранит свое синтаксическое и семантическое дерево. Обраться к синтаксическому дереву i-го модуля можно следующим образом: Compiler.UnitTable.Values[i].SyntaxTree. Далее все ссылки на синтаксические деревья запоминаются, и для просмотра любого дерева достаточно выбрать его из списка.

Для отображения дерева используется визитор по синтаксическому дереву. Приведем пример функций visit данного визитора:void visit(statement_list _statement_list)

{_node(_statement_list.left_logical_bracket, "left_logical_bracket");_collection(_statement_list.subnodes,"subnodes");_node(_statement_list.right_logical_bracket, "right_logical_bracket");

}void visit(assign _assign)

{_node(_assign.to,"to");_node(_assign.from,"from");

}

Функция prepare_node создает визуальный узел дерева и далее запускает для него тот же самый визитор.

13.3 Модуль Управление компилятором

 

Плагин Управление компилятором используется разработчиками для отладки компилято

s