Разработка простого синтаксического анализатора

Страницы работы

10 страниц (Word-файл)

Содержание работы

Простой синтаксический анализатор

Цель настоящей курсовой работы: разработать синтаксический анализатор, который позволит:

¨  Подсвечивать ключевые слова определенным цветом,

¨  Выводить контекстно-зависимый список с подмножеством ключевых слов (подсказок).

¨  Автоматически завершать начатое слово (AutoComplete), если пользователь осуществил выбор в этом списке.

Вы должны обеспечить возможность пользователю выбирать одно из нескольких множеств ключевых слов. Например, множество ключевых слов языка C# , или множество слов и выражений, которые часто используются в деловой переписке (см. выбор меню — Letters).

Методические указания

Решение, состоящее из двух проектов

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

¨  Создайте проект типа Windows Control Library с именем SyntaxBox. Результатом его компиляции будет динамическая библиотека (DLL).

¨  Переименуйте файл UserControl1.cs в SyntaxBox.cs и cогласитесь с предложением переименовать класс и файл с ресурсами. Измените тип базового класса, вместо UserControl задайте RichTextBox.

¨  Обратите внимание на то, что при этом меняется значок (иконка) файла. Теперь SyntaxBox — это компонент, то есть класс, который обладает специфическим поведением в режиме дизайна (таким же как и его родитель).

¨  Откройте файл SyntaxBox.Designer.cs и удалите из класса SyntaxBox все его содержимое (будьте осторожны, не из файла, а из класса), так как нам не понадобится контейнер компонентов и методы работы с ним: InitializeComponent и Dispose.

¨  В файле SyntaxBox.cs удалите вызов метода InitializeComponent.

Компонент SyntaxBox (DLL) предоставит возможность клиентам (EXE-приложениям) пользоваться своими услугами. Для этого они должны разместить SyntaxBox на поверхности формы и управлять свойствами компонента в окне свойств, отображаемого в режиме дизайна. Покажем, как это работает.

¨  Введите в класс SyntaxBox скрытую булевскую переменную caseSensitive и открытое свойство (get; set) с именем CaseSensitive. Для того, чтобы это свойство попало в определенную секцию окна свойств на этапе дизайна, пометьте его атрибутом [Category ("Syntax")].

Если вы, кроме того, добавите специальный комментарий (называемый IntelliSense-comment), то его текст будет помогать клентам в различных ситуациях на этапе разработки кода и дизайна формы. Комментарий должен иметь такой вид. Более сложные варианты IntelliSense-comment смотрите в MSDN.

/// <summary>

/// Get or Set the flag of case sensitivity. It is used in token recognition procedure

/// </summary>

¨  Постройте проект с компонентом SyntaxBox. Для этого выберите команду Build в его контекстном меню.

¨  Добавьте к решению еще один проект (команда AddNewProjectв контекстном меню Solution)

¨  Новый проект должен иметь тип Windows Application. Присвойте ему имя — TestSyntaxBox.

¨  Сделайте новый проект стартовым (команда Set as StartUp Project в контекстном меню проекта).

Внимание. Порядок вставки элементов управления в форму главного окна важен. Если его нарушить, то могут быть проблемы с установкой свойства Dock (способа причаливания элементов к границам контейнеров). Заметьте, что сама форма является контейнером. Другими контейнерами являются: Panel, GroupBox, TabControl, и др.

¨  Переименуйте файл Form1 в MainForm. Согласитесь с предложением переименовать класс.

¨  Измените размеры формы, как показано на рисунке выше и положите на форму элемент типа ToolStrip.

¨  Вызовите для него мастер ToolStrip Tasks (с помощью специальной кнопки справа-вверху) и выберите команду Insert Standard Items.

¨  Добавьте в ToolStrip кнопку (с именем tbTopic) типа DropDownButton для выбора одного из множеств ключевых слов нашего редактора. Задайте свойства кнопки с выпадающим меню, а именно: коллекцию команд (DropDownItems) этого меню. На рисунке выше показано, как она может выглядеть.

¨  Создайте обработчики выбора команд выпадающего меню. Используйте технику двойного щелчка.

¨  Положите на форму наш компонент SyntaxBox. Установите его свойство Dock в положение Fill.

¨  В категории свойств (или группе) Syntax найдите свойство CaseSensitive. Установите его значение в True. Заметьте, что ни категории Syntax, ни свойства CaseSensitive в компоненте RichTextBox не было. Они появились в классе SyntaxBox в результате наших усилий.

Особенности формата RTF

Класс RichTextBox имеет свойство Text. Оно имеет тип string и дает доступ к массиву символов неразмеченного текста RTF-документа. Другое свойство класса RichTextBoxRtf также имеет тип string и дает доступ к тексту разметки RTF-документа. Эти два текста (размеченный и неразмеченный) существуют параллельно. Анализируя один из них, можно изменять другой.

Похожие материалы

Информация о работе