Диссертация (1090776), страница 13
Текст из файла (страница 13)
Их расшифровка приведена втаблице 3.3.Таблица 3.2Таблица переходов и вызовов конечного автомата лексического анализатора96Таблица 3.3Расшифровка вызовов таблицы переходов лексического анализатораCallВызываемые функцииRBResetBufUIUniteIntegerUFUniteFloatUDUniteDegreeGTGetTokenDGTDecForward; GetTokenGBDecForward; GetBinaryGNDecForward; GetNumberGSDecForward; GetStringGCSERGetCodeStringLexErrorПримечаниеReturnBeginning = forward, состояние = 0сборка целой части числовоголитераласборка вещественной частичислового литераласборка степени числовоголитералавозврат лексемыforward=forward–1; возвратлексемыforward=forward–1; возвратдвоичного литералаforward=forward–1; возвратчислового литерала (целого ивещественного)forward=forward–1; возвратпростого строкового литералавозврат кодированного строковоголитералавыдача сообщения по ошибке00001111110Если в поле “Return” находится 1, то происходит выдача результирующейлексемы и передача управления синтаксическому анализатору.ВслучаевозникновенияошибокпроцедураLexErrorвыдаётдиагностическую информацию пользователю для их исправления: место ошибки(ошибочный символ в определенной строке) и название типа “некорректной”лексемы.
Тип некорректной лексемы определяется по состоянию конечногоавтомата лексического анализатора (A(t)) (таблица 3.4).97Таблица 3.4Лексические ошибкиСостояниеСообщение об ошибке0начало лексемы не может начинаться с символа ‘.’, символоврусского алфавита либо символов псевдографики1Первый символ идентификатора должен быть буквой.Остальные символы, при их наличии, могут являться любойкомбинацией букв, цифр и символа «подчеркивание»6некорректный оператор отношения (должен быть :<>:)7некорректный оператор отношения (должен быть :<>:)17некорректный вещественный литерал (в вещественной части)19некорректный вещественный литерал (в порядке)20некорректный вещественный литерал (в порядке)22в простом строковом литерале не может быть перевод каретки(он не может располагаться на нескольких строках схемы)24некорректный кодированный строковый литералВ случае ошибки дополнительно к выдаче диагностической информациипроцедура LexError восстанавливает состояние автомата и корректирует входнойпоток для последующего анализа.Конечный автомат реализован в виде универсальной процедуры, котораяобрабатывает все состояния и переходы.
Для текущего состояния и очередноговходного символа она выполняет переход в другое состояние, указанное втаблице переходов. Алгоритм работы автомата «прошит» в таблице переходов ивызовов.Синтаксическийанализаторразбираетнеотдельныесимволыкаклексический анализатор, а конструкции языка EXPRESS. В процессе своейработы по запросу на вход принимает лексемы, а на выходе формирует дереворазбора (рисунок 3.11).Рисунок 3.11. Синтаксический анализатор98Синтаксический анализ выполняется методом рекурсивного спуска, прикотором для разбора каждой конструкции языка EXPRESS используетсяотдельная рекурсивная процедура (SCHEMA, TYPE, ENTITY, SUBTYPE, FIELD,INVERSE,UNIQUE,WHERE,DERIVE).Восновекаждойпроцедурысинтаксического разбора лежит отдельный конечный автомат.
Диаграммыавтоматов переходов и выходовдлявсех синтаксических конструкцийпредставлены в таблице 3.5.Таблица. 3.5Диаграммы переходов для синтаксического разбора конструкций языка EXPRESSКонструкцияSCHEMATYPEENTITYSUBTYPEДиаграмма99Окончание таблицы. 3.5КонструкцияДиаграммаFIELDINVERSEUNIQUEWHEREDERIVEВ диаграммах звездочкой (*) обозначен приход лексемы, который затемпомещается в дерево разбора. Числовыми кодовыми значениями с расшифровкойв круглых скобках обозначен приход ключевого слова языка EXPRESS.Текущеесостояниесинтаксическогоразбораопределяетсятекущейвыполняемой процедурой разбора и состоянием внутри нее (значением100переменной Condition).
Действия и переходы выполняются программным кодом взависимости от текущего состояния и поступившей лексемы. Если пришедшаялексема не соответствует синтаксису разбираемой конструкции - программныйкод генерирует ошибку.В отличие от лексического анализатора, где для генерации ошибок быласоздана отдельная процедура LexError(), в синтаксическом анализаторегенерацияошибокрассредоточенаповсемукодупроцедурразборасинтаксических конструкций языка EXPRESS.Дерево разбора представляет собой набор таблиц, заполненных в процессеанализаEXPRESS-схемыданными,которыепослеуспешногоанализасохраняются в файле main.obj в качестве результата работы анализатора.В программе таблицы дерева разбора хранятся в виде массивов.Дополнительно в отдельной переменной хранится информация о количествезадейственныхэлементовмассива(строк)подназваниемНазваниеТаблицыCount.Разработка семантического анализатораПри семантической обработке происходит проверка смысла использованияконструкций в EXPRESS-схеме.В качестве входных данных семантического анализа выступает дереворазбора, сформированное при лексическом и синтаксическом анализе.
В процессеанализа выявляются ошибки, которые записываются в log файл, и уточняютсясвойства отдельных идентификаторов, которые затем заносятся в таблицусимволов, по мере их выявления.Семантический анализ выполнен с использованием системного подхода.Текст EXPRESS-схемы представлен в виде элементов и связей: в качествеэлементов EXPRESS-схемы выступают идентификаторы: названия схем, типов,сущностей и т.д; в качестве связей в схеме выступает их взаимоотношения всоответствии с правилами языка EXPRESS.
В ходе анализа выполняютсяпроверки элементов и связей информационной модели на соответствие правиламязыка EXPRESS.101Все проверки осуществляются в рамках области существования: полей всущности, типов и сущностей в схеме, схем в модели, что представлено нарисунке 3.12.Рисунок 3.12. Области существования элементов EXPRESS-схемыС использованием системного подхода [23, 30, 83] для языка EXPRESSопределены следующие виды проверок:1) проверка элементовпроверка единственности (CheckUnique)Названиявсехэлементов(идентификаторов)врамкахобластейсуществования должны быть уникальными. Метки, объявленные в конструкцияхINVERSE, UNIQUE, WHERE, DERIVE, должны быть различными.проверка использования (CheckUse)Объявленные типы должны использоваться в модели.2) проверка связейпроверка типов (CheckType)Идентификаторы, используемые в качестве типа при объявлении другихидентификаторов,должныявлятьсятипами(базовые,пользовательские:определенные с помощью ключевого слова TYPE либо ENTITY).проверка существования (CheckExist)Поля, объявленные в блоке UNIQUE, должны быть определены в текущейсущности.Поля, на которые наложены условия в блоке WHERE, должны бытьопределены в текущей сущности.В конструкции SET блока INVERSE сущности должны использоватьсяназвания сущности, определенные в текущей схеме.102проверка рекурсии (CheckRecursive)Сущности предметной области не должны циклически использовать себя вкачестве типов своих атрибутов.ПроверкисемантическогоанализаторареализованыванализатореEXPRESS-схем в виде отдельных процедур: CheckUnique, CheckUse, CheckType,CheckExist, CheckRecursive.Результаты работы EXPRESS-анализатораБлагодаря работе анализатора в разработанной EXPRESS-схеме АСУ"Деканат-АТиСО" обнаружены 84 ошибки (из них: 65 – синтаксических, 3 –лексических, 16 - семантических), которые затем были исправлены.
Полученодерево разбора, которое затем успешно загружено в PDM-систему с помощьюзагрузчика EXPRESS-схем.Программа внедрена в учебный процесс факультета “Робототехника икомплексная автоматизация” кафедры РК9 при выполнении лабораторной работы“Работа с данными ISO 10303 STEP” и позволяет за счёт автоматизации проверкиразработанных студентами EXPRESS-схем повысить эффективность и качествообучения.3.3. Разработка загрузчика EXPRESS-схемПод загрузкой EXPRESS-схемы подразумевается создание структурыданных в PDM-системе в соответствии с загружаемой EXPRESS-схемойинформационного пространства, полученной анализатором EXPRESS-схем [54].Основной задачей загрузчика является загрузка итоговой EXPRESS-схемыинформационного пространства взаимодействия прикладного ПО в PDM-системуParty PLUS, благодаря чему последняя будет поддерживать это информационноепространство (рисунок 3.13).Рисунок 3.13.
Последовательность взаимодействий подсистем поддержкиCALS при загрузке EXPRESS-схемы103В качестве исходных данных загрузчику передаётся дерево разбораEXPRESS-схемы, сгенерированного анализатором (файл main.obj). Загрузчикразбирает этот файл, помещая данные во внутренние массивы. После этого черездополнительные интерфейсы изменения структуры PDM-системы в соответствиис деревом разбора он последовательно создает сущности предметной области, азатем их атрибуты. Если атрибут имеет перечислимый тип, то для него задаетсясписок фиксированных значений.