Помощь в учёбе, очень быстро...
Работаем вместе до победы

Анализ модели. 
Разработка инструментальных средств создания текстовых предметно-ориентированных языков: компонент проверки синтаксиса

РефератПомощь в написанииУзнать стоимостьмоей работы

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

Анализ модели. Разработка инструментальных средств создания текстовых предметно-ориентированных языков: компонент проверки синтаксиса (реферат, курсовая, диплом, контрольная)

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

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

В процессе анализа программы методом List Compile (string s, int iCaret) компонент описания синтаксиса каждой конструкции ставит в соответствие определенный стиль для дальнейшего выделения цветом, после чего компонент проверки синтаксиса составляет разметку текста программы и заносит ее в поле CompiledText. Если вариант разбора признан некорректным (в частности невозможен дальнейший анализ текста программы), то при выборе нового варианта список CompiledText возвращается к разметке до текста, с которого будет происходить дальнейший разбор по алгоритму, описанному в разделе 2.5. Поле CompileError определяет наличие ошибок в последнем разобранном тексте программы и обуславливает цвет индикатора корректности модели в редакторе. Результатом работы метода является список элементов контекстного меню для заданного параметрами положения курсора. Если анализ программы невозможен из-за ошибок в языке, метод возвращает null.

Поскольку анализ программы происходит динамически важно в каждый конкретный момент формировать актуальный список подсказок с возможными вариантами продолжения текста программы. Первый раз меню для символов модели создается после разбора метамодели с помощью метода MakeMenu класса CDefined, после чего результат записывается в поле menus. Данные процессы протекают непараллельно, так как направление формирования меню (справа налево) не совпадает с направлением анализа программы. Обратный порядок разбора правила обусловлен необходимостью определения меню группы, которое включает в себя символы, следующие за данной конструкцией. При редактировании метамодели выполняется проверка на наличие значения в поле menus, поэтому повторное создание меню для конструкций языка не происходит, а лишь при необходимости редактируется его содержание, что позволяет сэкономить ресурсы.

Символы, которые могут служить возможным продолжением текста программы, отображаются при равенстве индекса конструкции текста модели, задаваемого курсором, и текущим анализируемым символом. Таким образом, меню редактора программы формируется на основе меню рассматриваемой конструкции, созданного в момент разбора метамодели (рис. 4.1).

Пример меню со списком терминальных символов.

Рисунок 4.1. Пример меню со списком терминальных символов.

Показать весь текст
Заполнить форму текущей работой