- •2006 Печатается по решению научно-методического совета Иркутского Государственного университета
- •Оглавление
- •Введение
- •Содержание и задачи практикума
- •Лексический анализ
- •Регулярные грамматики
- •Конечный автомат
- •Технология и средства решения учебных задач
- •Компонент fsmUnit
- •Класс Lexemes
- •Учебные транслирующие программы
- •Пример диалоговой настройки и испытаний компонента fsmUnit
- •Пример программы лексического анализатора входной строки
- •Заключение
- •Использованные источники
- •664000, Иркутск, б. Гагарина, 36.
Технология и средства решения учебных задач
Целью практикума является разработка учебной программы реализующий лексический анализ входной строки. Результатом анализа является последовательность (коллекция) распознанных лексем.
Для разработки лексического анализатора имеется специальный компонент FSMUnit. Его настройка на конкретную грамматику и особенности применения этой грамматики осуществляется в диалоговом режиме при проектировании учебной программы (Windows-приложения). Предполагается, что это приложение разрабатывается на Visual Basic.Net.
Построенный таким образом конечно-автоматный распознаватель может быть испытан на примерах различных входных цепочек при проектировании приложения или использован в программе. Результатом обработки входной цепочки автоматом является ответ - принадлежит ли входная строка искомому языку.
Для построения лексического анализатора используется набор конечных автоматов и коллекция лексем. Коллекция лексем является экземпляром компонента Lexemes. Использование коллекции лексем необходимо для взаимодействия со следующей фазой анализа – синтаксическим анализом. В коллекцию записывается результат работы конечного автомата.
Ниже описаны компоненты FSMUnit и Lexemes (п.п. 3.1 и 3.2) и структура транслирующей программы (п.п. 3.3).
В разделах 4 и 5 приведены примеры настройки компонента FSMUnit на грамматику и программы лексического анализа входной строки.
Компонент fsmUnit
Компонент FSMUnit представляет собой элемент управления системы Microsoft Visual Studio.Net. Основное назначение компонента – диалоговое конструирование грамматики и конечного автомата для распознавания лексем, распознавание лексемы в диалоговом и программном режимах. Настройка компонента на грамматику осуществляется на этапе проектирования учебного приложения с помощью специального метода Designer. Полученные параметры настройки сохраняются в файле, путь к которому является значением свойства WorkFile. Запуск лексического анализа в составе транслирующего приложения осуществляется обращением к методу Scan. Аргумент этого метода – входная цепочка символов.
Более подробно методы и свойства компонента FSMUnit представлены в табл. 2.
Таблица 2.Интерфейсные члены компонента FSMUnit
№ п/п |
Название |
Описание |
Аргументы |
Результат |
|
Scan |
Метод. Запуская распознавания входной строки |
Строка |
Булев тип: True – если строка распознана, False – в остальных случаях. |
|
Descriptor |
Свойство. Тип – строка. Хранит дескриптор лексемы (используется при синтаксическом анализе) |
|
|
|
Description |
Свойство. Тип – строка. Хранит краткое описание лексемы. |
|
|
|
WorkFile |
Свойство. Тип – строка. Хранит полное имя файла2, который содержит настройки элемента управления для распознавания лексем. |
|
|
|
InputString |
Свойство. Тип – строка. Хранит входную строку. |
|
|
Класс Lexemes
Экземпляры класса Lexemes используются для хранения распознанных лексем, класс нужен для взаимодействия с процедурами синтаксического анализа.
Описание интерфейсных членов класса Lexemes представлено в табл. 3.
Таблица 3.Интерфейсные члены класса Lexemes
№ п/п |
Метод |
Описание |
Аргументы |
Результат |
|
addLexeme |
Добавляет лексему в коллекцию |
строка-лексема, строка-дескриптор |
|
|
Clear |
Очищает коллекцию лексем |
|
|
|
getCount |
Возвращает количество элементов в коллекции. |
|
целое число |
|
getLexemByIndex |
Возвращает лексему по ее номеру в коллекции. |
номер лексемы, строка-лексема3, строка-дескриптор |
|
|
getStringEx |
Возвращает содержание коллекции в виде последовательности <лексем, дескриптор> |
|
строка
|
|
removeLexem |
Удаляет лексему из коллекции. Номер лексемы целое число. |
|
|