ПРОЕКТИРОВАНИЕ ЛЕКСИЧЕСКОГО АНАЛИЗАТОРА.



C# (произносится “си шарп”) — объектно-ориентированный язык программирования. Разработан в 1998—2001 годах группой инженеров компании Microsoft под руководством Андерса Хейлсберга и Скотта Вильтаумота как язык разработки приложений для платформы Microsoft .NET Framework.

На языке программирования С# написана входная программа, которую будет анализировать лексический анализатор. В файл формата “txt” мы запишем небольшую программу, которая будет сравнивать числа (рисунок - 2). В данном коде создается класс. Далее создаем метод, котором реализуем основную функцию нашей программы. В методе идет ввод первого числа, затем второго. Так как два числа получены, запустим блоки if…else для сравнения. В первый блок вписали условие, что если первое число больше второго, то выведется в консоль слово “больше”. Аналогично также сделали с следующими блоками: “равно”, “меньше”.

Далее спроектируем лексический анализатор на языке программирования Java. Java — строго типизированный объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Разработка ведётся сообществом, организованным через Java Community Process, язык и основные реализующие его технологии распространяются по лицензии GPL. Права на торговую марку принадлежат корпорации Oracle.

Приложения Java обычно транслируются в специальный байт-код, поэтому они могут работать на любой компьютерной архитектуре с помощью виртуальной Java-машины. Дата официального выпуска — 23 мая 1995 года. На 2019 год Java — один из самых популярных языков программирования.

 

Рисунок - 2 – Входная программа на языке C#.

 

Создадим класс, класс в котором будет реализовано меню. Меню будет состоять из пунктов:

1) Вывести программный код.

2) Вывести лексемы программного кода.

3) Закрыть приложение.

С помощью конструкции switch, case создадим меню, а также добавим вводимую переменную, которая будет отвечать за выбор меню (рисунок - 3). В первый пункт меню добавим метод созданный метод чтения. Этот метод переносит из указанного файла все содержимое построчно в формате String в консоль (на экран). В методе чтения мы копируем каждый символ строки файла в массив, который выводится на экран. При достижении конца файла, строка становится равна null и прекращается чтение файла.

 

Рисунок - 3 – Фрагмент программного кода, с реализацией лексического анализатора.

 

В третьем пункте меню мы говорим Java завершить выполнение приложения. Также был добавлен пункт default. Данный пункт выполнится, если пользователь выберет пункт меню неправильно, тогда на экране выведется сообщение об ошибке.

Во второй пункт меню “Вывести лексемы программного кода” добавим экземпляр класса LA. При выборе второго пункта меню выполнится класс LA. В классе LA мы реализуем работу нашего лексического анализатора. В данном классе мы будем использовать базу данных. В эту базу мы поместим наши лексемы. PostgreSQL является одной из наиболее популярных систем управления базами данных. Сам проект postgresql эволюционировал из другого проекта, который назывался Ingres. Формально развитие postgresql началось еще в 1986 году. Тогда он назывался POSTGRES. А в 1996 году проект был переименован в PostgreSQL, что отражало больший акцент на SQL. И собственно 8 июля 1996 года состоялся первый релиз продукта.

 

 

    PostgreSQL — свободная объектно-реляционная система управления базами данных (СУБД). Существует в реализациях для множества UNIX-подобных платформ, включая AIX, различные BSD-системы, HP-UX, IRIX, Linux, macOS, Solaris/OpenSolaris, Tru64, QNX, а также для Microsoft Windows.

    Функции являются блоками кода, исполняемыми на сервере, а не на клиенте БД. Хотя они могут писаться на чистом SQL, реализация дополнительной логики, например, условных переходов и циклов, выходит за рамки SQL и требует использования некоторых языковых расширений. Функции могут писаться с использованием одного из следующих языков:

    Встроенный процедурный язык PL/pgSQL, во многом аналогичный языку PL/SQL, используемому в СУБД Oracle;

    Скриптовые языки — PL/Lua, PL/LOLCODE, PL/Perl, PL/PHP, PL/Python, PL/Ruby, PL/sh, PL/Tcl, PL/Scheme, PL/v8 (Javascript);

    Классические языки — C, C++, Java (через модуль PL/Java);

    Статистический язык R (через модуль PL/R).

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

    Функции могут выполняться как с правами их создателя, так и с правами текущего пользователя.

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

    Для упрощения администрирования на сервере postgresql в базовый комплект установки входит такой инструмент как pgAdmin. Он представляет графический клиент для работы с сервером, через который мы в удобном виде можем создавать, удалять, изменять базы данных и управлять ими. В системе Linux устанавливается отдельно, но в операционные системы Windows идет в пакете установки PostgreSQL.

Рисунок 4.1 – pgAdmin в системе Linux

 

    После открытия программы у нас открывается следующая страница программы.

 

Рисунок 4.2 – pgAdmin

 

    Дальше нам нужно самостоятельно создать сервер, на котором мы будем разрабатывать нашу базу данных (рисунок 4.3).

 

Рисунок 4.3 – Сервер AgAdmin4

 

Тут мы можем увидеть название сервера MyLocalServev, название нашей базы данных Encryption и уже внутри базы данных мы создаем наши таблицы с токенами.

 

 

Рисунок 4.4 – Таблицы базы данных

 

    Всего у нас 5 таблиц, которые взаимосвязаны между собой по ID и одно представление, где будет взаимодействовать файл и наши таблицы.

И из этой базы наше приложение будет брать лексемы в соответствии с программным кодом. Для этого установим соединение с нашей базой (рисунок - 5).

 

Рисунок - 5 – Соединение с базой данных.

 

К данному фрагменту кода мы будем добавлять объекты, которые будут передавать к нам из базы лексемы, соответствуя принимаемому коду.

Теперь в конструкторе класса LA напишем код, который будет выполнять нужный нам функционал. Создали параметр, в котором будут ключевые слова. В конструкторе установим соединение с файлом программы на С#. Далее добавили цикл, который будет считывать весь код с файла (рисунок - 6).

 

Рисунок - 6 – Фрагмент кода, реализующего лексический анализатор.

 

Далее на входе мы имеем путь к .txt-файлу с программой в переменной. Считываем весь в файл в массив. В цикле while берем последовательно каждый символ из mass и отправляем его в метод Analysis. Если встречаем апостроф, то отходим от правил и идем по переменной mass, пока ни найдем второй апостроф. В циклах необходимо добавить дополнительные условия выхода из проверки. Добавили переменная type, которая отвечает за получение значения таблицы, к которому относится лексема. Переменная берет лексему из таблицы базы данных. Получаем код символа. Проверяем, относится ли код символа к буквам английского алфавита и знаку нижнего подчеркивания. Проверяем, относится ли код символа к цифрам или к точке. Отдельная проверка, если код символа относиться к точке проверяем, чтобы в переменной temp было число. Если в temp число, значит, теперь мы считаем его дробным, в противном случае это что-то другое. Так же делаем проверку на все символы нашего словаря лексем. В методе Result мы определяем, что же мы нашли. В самом начале проверяем переменную temp на принадлежность к ключевым словам. Проверяем в начале, чтобы не перепутать найденную лексему с идентификатором. Если найденное не является ключевым словом, то через switch проверяем тип лексемы, определенный заранее в методе Analysis. Также проверяем, чтобы найденный идентификатор/константа/разделитель уже не значился в таблице. После проверки получаем лексемы слова, или символа. Далее мы выводим лексему на экран. Так в ходе цикла идет проверка всего кода и вывод каждой лексемы. В ходе цикла выводим строки лексем, соответствуя строкам кода.

Наш лексический анализатор готов. Теперь при выборе второго пункта меню при запуске программы, выведет лексемы нашего кода (рисунок - 7).

 

Рисунок - 7 – Работа лексического анализатора.

 

 

Заключение

 

В данном курсовом проекте была разработана программа-анализатор, разбивающая исходный текст программы на лексемы и заполняющая таблицу имен. В качестве языка входной программы был использован C#. Кроме того, была задействована система управления базами данных PosgreSQL.

В ходе выполнения курсового проекта были получены следующие результаты:

1. Написана грамматика для учебного языка программирования;

2. Спроектирован и построен лексический анализатор.

 

 

Библиографический список:

 

1. Ключко В. И. Теория вычислительных процессов и структур. Учебное пособие,

- КубГТУ, 1998.

 

2. Теория вычислительных процессов и структур. Методические указания к курсовой работе для студентов специальности 220400. Составитель проф.

В. И. Ключко. - КубГТУ,1997. -27 с.

 

3. Соколов А. П. Системы программирования: теория, методы, алгоритмы: Учеб. Пособие, - М.: Финансы и статистика, 2004. – 320 с.: ил.

 

4. Гордеев А. В., Молчанов А. Ю. Системное программное обеспечение. – СПб.: Питер, 2001. – 736 с.

 

5. Ахо А, Сети Р., Ульман Д. Компиляторы: принципы, технологии инструменты. : Пер. с англ. – М.: Издательский дом «Вильямс» , 2003. – 768 с.: ил. ISBN5-8459-0189-8(рус), ББК 32.973.26.-018.2.75

 

6. Вольфенгаген В. Э. Конструкции языков программирования. Приемы описания. - М.: АО «Центр ЮрИнфоР», 2001.-276 с.

 

7. Карпов В. Э. Теория компиляторов. Учебное пособие — Московский государственный институт электроники и математики. М., 2001. – 79 с (электронный вариант)

 

8. Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman . Compilers Principles, Techniques, and Tools. 2000. (электронный вариант).

 

9. Серебряков В. А. Лекции по конструированию компиляторов. Москва, 1993 (электронный вариант).

                                                                                                     


Дата добавления: 2020-04-25; просмотров: 170; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!