Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги2 / 75

.pdf
Скачиваний:
1
Добавлен:
25.02.2024
Размер:
6.57 Mб
Скачать

PERSPECTIVESCIENTIFICRESEARCH:EXPERIENCE,PROBLEMSANDDEVELOPMENTPROSPECTS

А) устройством хранилищ, в которых горючие жидкости находятся под защитным слоем воды или над слоем воды (таким способом можно хранить ГЖ не смешивающиеся с водой (нефтепродукты); Б) применение резервуаров с плавающей крышей и плавающими понтонами (для северной зоны России); В) устройством ёмкостей с эластичными складывающимися стенками.

2.Применение высокостойких пен, эмульсий и полых микрошариков, т.е. веществ и материалов способных, не разрушаясь плавать на поверхности ГЖ резервуара, создавая требуемой толщины слой и необходимую герметизацию с корпусом. Полые микрошарики размером 10-120 мкм. изготовляют из карбомидных и фенолформальдегидных смол.

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

4.Введение негорючих газов в паровоздушный объём аппаратов и емкостей.

Если в аппарате есть условия для образования взрывоопасной концентрации паров и нельзя изменить температурный режим работы, то обеспечить безопасность эксплуатации аппарата можно путём подачи в него какого-либо негорючего газа (СО2, N2, Аr , Gе) или водяного пара. Они понижают концентрацию кислорода в смеси, сужая концентрационные пределы горючей смеси.

5.Введение в огнеопасную жидкость каких-либо добавок,

снижающих давление насыщенного пара (парциальное давление) т.е.уменьшающих концентрацию горючих паров в свободном пространстве аппарата (резервуара). В качестве таких добавок могут быть применены, например, вода – для метилового, этилового или пропилового спирта, ацетона , уксусной кислоты, ССl4 - для нефтепродуктов, СS2 и др. [2].

INTERNATIONALSCIENTIFICANDPRACTICALCONFERENCE

| WWW.PERVIY-VESTNIK.RU

~ 70 ~

ПЕРСПЕКТИВНЫЕНАУЧНЫЕИССЛЕДОВАНИЯ:ОПЫТ,ПРОБЛЕМЫИПЕРСПЕКТИВЫРАЗВИТИЯ

Список литературы

[1]Основы анализа взрывопожароопасности технологических процессов [Электронный ресурс]. – URL: https://fireman.club/conspects/tema-4-osnovy-analiza- vzryvopozharoopasnosti-texnologicheskix-processov/. (дата обращения: 05.12.2022).

[2]Оценка пожаровзрывоопасной среды внутри технологического оборудования с горючими жидкостями [Электронный ресурс]. – URL: https://thepresentation.ru/obzh/otsenka-pozharovzryvoopasnoy-sredy- vnutri-tehnologicheskogo-oborudovaniya-s-goryuchimi-zhidkostyami. (дата обращения: 05.12.2022).

[3]Оценка пожаровзрывоопасной среды внутри технологического оборудования с горючими жидкостями [Электронный ресурс]. – URL: https://thepresentation.ru/obzh/otsenka-pozharovzryvoopasnoy-sredy- vnutri-tehnologicheskogo-oborudovaniya-s-goryuchimi-zhidkostyami. (дата обращения: 05.12.2022).

[4]Оценка пожаровзрывоопасности среды внутри аппарата при их нормальной работе [Электронный ресурс]. – URL: https://studbooks.net/510112/bzhd/otsenka_pozharovzryvoopasnosti_sredy _vnutri_apparata_normalnoy_rabote. (дата обращения: 05.12.2022).

[5]Оценка пожаровзрывоопасности среды внутри аппарата при их нормальной работе [Электронный ресурс]. – URL: https://studbooks.net/510112/bzhd/otsenka_pozharovzryvoopasnosti_sredy _vnutri_apparata_normalnoy_rabote. (дата обращения: 05.12.2022).

[6]Оценка пожаровзрывоопасности среды внутри аппаратов при их нормальной работе [Электронный ресурс]. – URL: https://vuzlit.com/155890/otsenka_pozharovzryvoopasnosti_sredy_vnutri_ apparatov_normalnoy_rabote. (дата обращения: 05.12.2022).

©В.И. Варламова, 2022

МЕЖДУНАРОДНАЯНАУЧНО-ПРАКТИЧЕСКАЯКОНФЕРЕНЦИЯ | НИЦВЕСТНИКНАУКИ | WWW.PERVIY-VESTNIK.RU

~ 71 ~

PERSPECTIVESCIENTIFICRESEARCH:EXPERIENCE,PROBLEMSANDDEVELOPMENTPROSPECTS

УДК 004.42

РАЗРАБОТКА НА БАЗЕ ГЕНЕРАТОРОВ LEX И YACC ИНТЕРАКТИВНЫХ ПРИЛОЖЕНИЙ С ГРАФИЧЕСКИМ ПОЛЬЗОВАТЕЛЬСКИМ ИНТЕРФЕЙСОМ

О.В. Конюхова,

к.т.н., доц.

Э.А. Кравцова,

к.т.н., доц., ОГУ им. И.С. Тургенева, г. Орел

Аннотация: В настоящей статье рассматривается возможный подход к разработке интерактивных приложений, создаваемых с использованием генератора лексических анализаторов lex и генератора синтаксических анализатров yacc на языке C. Ввод многострочного исходного текста в консоли в виде линейной последовательности создает ряд неудобств и чреват возникновением ошибок в исходных данных. Разработка интерактивных приложений на базе lex и yacc, с графическим пользовательским интерфейсом позволит снизить проблемы, связанные с вводом многострочного текста в консоли, а также повысить эффективность использования этих приложений за счет дружественного интерфейса.

Ключевые слова: генератор лексических анализаторов lex, генератор синтаксических анализаторов yacc, язык C, лексический анализатор, синтаксический анализатор, интерактивное приложение, графический пользовательский интерфейс

Введение.

Современное интерактивное программное приложение сложно представить без графического пользовательского интерфейса (ГПИ).

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

INTERNATIONALSCIENTIFICANDPRACTICALCONFERENCE

| WWW.PERVIY-VESTNIK.RU

~ 72 ~

ПЕРСПЕКТИВНЫЕНАУЧНЫЕИССЛЕДОВАНИЯ:ОПЫТ,ПРОБЛЕМЫИПЕРСПЕКТИВЫРАЗВИТИЯ

наиболее популярных являются генератор лексических анализаторов lex и генератор синтаксических анализаторов yacc [1].

Созданные на их основе лексические и синтаксические анализаторы, да и трансляторы в целом, по умолчанию представляют собой интерактивные консольные приложения. В ходе диалога с пользователем от последнего требуется ввод исходного текста анализируемой программы, в подавляющем большинстве многострочного. Это обстоятельство создает определенные проблемы при использовании данных приложений, поскольку они (приложения) осуществляют обработку введенной последовательности при нажатии клавиши Enter.

Следовательно, для эффективного взаимодействия с пользователями требуется разработка на базе lex и yacc интерактивных приложений с ГПИ с поддержкой многострочного ввода исходных данных.

Пользовательский интерфейс для приложений на базе lex и

yacc

Согласно [3], в программах, рассчитанных на определенную структуру входной информации, явным или неявным образом используются процедуры лексического и синтаксического разбора. Для автоматизации процесса построения лексического и синтаксического анализаторов в настоящее время используется специальные инструментальные средства – генераторы лексических и синтаксических анализаторов. Такие программы имеются во всех современных операционных системах, а многие встроены непосредственно в языки программирования. Генерацию кода такой инструментарий выполняет на различные языки программирования (C, C++, Java, XML, Pascal и др.), но принцип их работы основан на одной и той же схеме.

Одними из наиболее популярных видов инструментальных средств для автоматизации лексического и синтаксического разбора являются генератор лексических анализаторов lex и генератор синтаксических анализаторов yacc, которые, в свою очередь, имеют несколько вариантов и модификаций [1 – 5]. Далее будет рассматриваться «классический» вариант lex и yacc, использующийся в системах UNIX и Windows, формирующие свои анализаторы на языке C. По умолчанию lex и yacc создают консольные приложения.

МЕЖДУНАРОДНАЯНАУЧНО-ПРАКТИЧЕСКАЯКОНФЕРЕНЦИЯ | НИЦВЕСТНИКНАУКИ | WWW.PERVIY-VESTNIK.RU

~ 73 ~

PERSPECTIVESCIENTIFICRESEARCH:EXPERIENCE,PROBLEMSANDDEVELOPMENTPROSPECTS

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

В качестве примера рассмотрим взаимодействие с лексическим анализатором, способным распознавать идентификаторы, числа, операторные скобки, круглые скобки, разделители лексем и команд, при анализе простейшей программы на языке С, представленной на рисунке 1:

Рисунок 1 – Исходный текст программы на C

Исходный файл лексического анализатора приведен на рисунке 2, а результат его работы в консоли на рисунке 3.

INTERNATIONALSCIENTIFICANDPRACTICALCONFERENCE

| WWW.PERVIY-VESTNIK.RU

~ 74 ~

ПЕРСПЕКТИВНЫЕНАУЧНЫЕИССЛЕДОВАНИЯ:ОПЫТ,ПРОБЛЕМЫИПЕРСПЕКТИВЫРАЗВИТИЯ

Рисунок 2 – Исходный файл лексического анализатора для распознавания лексем программы на С

Рисунок 3 – Взаимодействие с лексическим анализатором через консоль

МЕЖДУНАРОДНАЯНАУЧНО-ПРАКТИЧЕСКАЯКОНФЕРЕНЦИЯ | НИЦВЕСТНИКНАУКИ | WWW.PERVIY-VESTNIK.RU

~ 75 ~

PERSPECTIVESCIENTIFICRESEARCH:EXPERIENCE,PROBLEMSANDDEVELOPMENTPROSPECTS

Помимо консоли генераторы lex и yacc позволяют организовывать чтение входных данных из файла и запись результатов разбора в файл. Для этих целей в lex-е предусмотрены две встроенные переменные типа FILE*: yyin и yyout. Первая переменная отвечает за чтение из входного файла, вторая – за запись результатов в выходной файл. Таким образом, можно, например, читать из входного файла и выводить в консоль, читать из консоли и выводить в выходной файл, читать из входного файла и выводить в выходной файл. В качестве входного и выходного файлов для хранения информации на диске можно использовать обычные текстовые (.txt) файлы.

Для этого в основной функции main лексического или синтаксического анализатора необходимо экспортировать эти переменные (или одну из них в зависимости от варианта организации ввода-вывода), сопоставить их с физическими текстовыми файлами на диске, открыть входной файл для чтения, выходной файл для записи, выполнить обработку входных данных путем вывзова функции yylex() или yyparse(), а по окончании работы закрыть файлы.

Рассмотрим вариант организации взаимодействия с пользователем приложения на базе lex и yacc путем чтения исходных данных из входного файла и вывода результатов в выходной файла.

Для этого создадим два текстовых файла Input.txt и Output.txt, в первый из них поместим текст с рисунка 1. Описание функции main лексического анализатора (остальные части анализатора аналогичны представленным на рисунке 2) приведено на рисунке 4.

Рисунок 4 – Описание функции main лексического анализатора при использовании файлов

INTERNATIONALSCIENTIFICANDPRACTICALCONFERENCE

| WWW.PERVIY-VESTNIK.RU

~ 76 ~

ПЕРСПЕКТИВНЫЕНАУЧНЫЕИССЛЕДОВАНИЯ:ОПЫТ,ПРОБЛЕМЫИПЕРСПЕКТИВЫРАЗВИТИЯ

Общий алгоритм взаимодействия пользователя с приложением можно описать следующим образом:

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

2.Выполнить запуск соответствующего приложения на базе

lex и yacc.

3.Открыть текстовый файл на диске, соответствующий выходному файлу yyout, для просмотра результатов работы.

Содержание файлов представлено на рисунках 5 и 6.

Рисунок 5 – Входной файл

Рисунок 6 – Выходной файл

МЕЖДУНАРОДНАЯНАУЧНО-ПРАКТИЧЕСКАЯКОНФЕРЕНЦИЯ | НИЦВЕСТНИКНАУКИ | WWW.PERVIY-VESTNIK.RU

~ 77 ~

PERSPECTIVESCIENTIFICRESEARCH:EXPERIENCE,PROBLEMSANDDEVELOPMENTPROSPECTS

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

Выявленные проблемы при организации взаимодействия приложений на базе lex и yacc с пользователем через консоль и файлы можно решить с помощью ГПИ, обеспечивающие не только привычный ввод многострочного текста, но и отображение результатов его обработки в текущем окне без необходимости переключения между окнами.

Минимально возможный ГПИ для ввода многострочного текста и вывода результатов может состоять из фор мы, на которой расположены два визуальных объекта, поддерживаю щих работу с многострочным текстом: один – для ввода исходных данных, другой – для вывода результатов, в т.ч., ошибок и отладочной информации; и, например, стандартной кнопки для запуска процедуры разбора. Также могут быть добавлены надписи, поясняющие назначен ия визуальных компонентов. Макет такого интуитивно понятного ГП И представлен на рисунке 7.

Рисунок 7 – Макет ГПИ для приложений на базе lex и yacc

INTERNATIONALSCIENTIFICANDPRACTICALCONFERENCE

| WWW.PERVIY-VESTNIK.RU

~ 78 ~

ПЕРСПЕКТИВНЫЕНАУЧНЫЕИССЛЕДОВАНИЯ:ОПЫТ,ПРОБЛЕМЫИПЕРСПЕКТИВЫРАЗВИТИЯ

Такой ГПИ может быть реализован в любой подходящей интергрированной среде разработки (Integrated development environment – IDE) [7], например, Visual Studio, QtCreator, wxDevC++

и др.

Далее рассмотрим вариант реализации макета ГПИ с рисунка 7 в среде разработки wxDevC++ и организации взаимодействия с пользователем.

Реализация подхода к построению интерактивного приложения с ГПИ в среде wxDevC++.

В зависимости от разновидности пакетов генераторов lex и yacc, они могут иметь открытый код или нет.

Например, пакеты генераторов TP Lex и TP Yacc под Pascal [4- 6], являются пакетами с открытым кодом, который можно модифицировать. Так в работе [6] показано, что в среде разработки Delphi, ГПИ, макет которого приведен на рисунке 7, реализуется с помощью визуальных компонентов TMemo (Примечание) и TButton (Стандартная кнопка). В исходный код генераторов добавлены специальные переменные типа TMemo и дополнительные функции, например, yyMemoInit(), позволяющая связать переменные из TP Lex с визуальными компонентами TMemo на форме приложения. Также внесены изменения в некоторые стандартные функции TP Lex для вывода сообщений в компоненты TMemo. Более подробно данный подход описан в [6].

Пакет lex&yacc под С является пакетом с закрытым кодом, что требует другого подхода к реализации ГПИ (макет на рис. 7).

Авторы предлагают использовать возможности генераторов lex и yacc, рассмотренные ранее при организации взаимодействия с пользователем с помощью файлов.

Суть предлагаемого подхода заключается в следующем:

1. В среде разработке wxDevC++ создаем графическое приложение, в котором на форме размещаем два визуальных компонента типа wxTextCtrl (позволяет вводить структурированный многострочный текст), два компонента типа wxStaticText (метки для подписей) и стандартную кнопку типа wxButton для запуска приложения на базе lex и yacc, согласно макету ГПИ с рисунка 7.

МЕЖДУНАРОДНАЯНАУЧНО-ПРАКТИЧЕСКАЯКОНФЕРЕНЦИЯ | НИЦВЕСТНИКНАУКИ | WWW.PERVIY-VESTNIK.RU

~ 79 ~

Соседние файлы в папке книги2