Skip to content

the-asind/CompilersTheoryIDE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 

Repository files navigation

IDE. Компилятор


Часть 1. Разработка пользовательского интерфейса (GUI) для языкового процессора.

Цель: Разработать приложение – текстовый редактор.

Скриншот работы программы. Подсветка идентична ЯП Python.

Рис. 1. Скриншот работы программы. Подсветка идентична ЯП Python.

image

Рис. 2. Открыт на полный экран, изменение размера текста через меню.

компилятор 1

Рис. 3. Анимация. Работа меню инструментов. Изменение текста.

image

Рис. 4. Демонстрация таблицы ошибок с мокап-данными для примера.

компилятор 2

Рис. 5. Анимация. Демонстративная работа с файлами.

image

Рис. 6. Справка. Помощь.

image

Рис. 7. Справка. О программе

image image

Рис. 8 (а, б). Локализация. Английский и русский языки.


Часть 2. Разработка лексического анализатора (сканера).

Цель:

Изучить назначение лексического анализатора. Спроектировать алгоритм и выполнить программную реализацию сканера.

Постановка задачи:

  1. Спроектировать диаграмму состояний сканера (примеры диаграмм представлены в прикрепленных файлах).
  2. Разработать лексический анализатор, позволяющий выделить в тексте лексемы, иные символы считать недопустимыми (выводить ошибку).
  3. Встроить сканер в ранее разработанный интерфейс текстового редактора. Учесть, что текст для разбора может состоять из множества строк.

Примеры допустимых строк:

# example
"""
example
"""
'''
example
'''
# example
""" example '' """
''' "
example" '''

Тема 51

  • Комментарии языка Python.

Диаграмма состояния сканера:

диаграмма состояния сканера

Рис. 9. Диаграмма состояния сканера

Тестовые данные:

image image

Рис. 10(а,б). Сложный пример работы сканнера. а - английская локализация, б - русская локализация.

image

Рис. 11. Простой пример работы выделения типа лексемы.


Часть 3. Разработка синтаксического анализатора (парсера).

Цель: Изучить назначение синтаксического анализатора. Спроектировать алгоритм и выполнить программную реализацию парсера.

Important

Тема 51. Комментарии языка Python.

Грамматика

G [<I>]:

VT = { ‘#’, ‘"’, ‘'’, newline, symbol}

VN = { <I>, FOSQ, SOSQ, TOSQ, MLSQC, FSCQ, SSCQ, FODQ, SODQ, TODQ, MLDQC, FDCQ, SDCQ, SHARP, SLC}

P = {

  • I → ' FOSQ | " FODQ | # SHARP
  • FOSQ → ' SOSQ
  • SOSQ → ' TOSQ
  • TOSQ → symbol MLSQC
  • MLSQC → symbol MLSQC | ' FSCQ
  • FSCQ → ' SSCQ
  • SSCQ → '
  • FODQ → " SODQ
  • SODQ → " TODQ
  • TODQ → symbol MLDQSC
  • MLDQC -> symbol MLDQC | " FDCQ
  • FDCQ → " SDCQ
  • SDCQ → "
  • SHARP → symbol SLC
  • SLC → symbol SLC | newline

}

Грамматика является полностью автоматной, (по классификации Хомского)

Граф конечного автомата

граф конечного автомата

Рис. 12. Граф конечного автомата комментариев на Python.

граф конечного автомата на токенах

Рис. 12. Недетерминированный граф конечного автомата комментариев на Python, аналогичный работе на токенах.

image image

Рис. 13(а,б). Примеры работы парсера.


Часть 4. Нейтрализация ошибок (метод Айронса).

Цель: Реализовать алгоритм нейтрализации синтаксических ошибок и дополнить им программную реализацию парсера.

Important

Тема 51. Комментарии языка Python.

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

пример нейтрализации ошибок

Рис. 14. Пример работы нейтрализации ошибок и парсера.


Часть 5. Включение семантики в анализатор. Создание внутренней формы представления программы.

Цель: Дополнить анализатор, разработанный в рамках лабораторных работ, этапом формирования внутренней формы представления программы.

Important

Тема: включение семантики в анализатор, создание внутренней формы представления программы, используя польскую инверсную запись (ПОЛИЗ).

изображение

Рис. 15. Пример работы ПОЛИЗ.

изображение

Рис. 16. Пример работы ПОЛИЗ.

изображение

Рис. 17. Пример вывода ошибок ПОЛИЗ.


Часть 6. Реализация алгоритма поиска подстрок с помощью регулярных выражений.

Цель: Реализовать алгоритм поиска в тексте подстрок, соответствующих заданным регулярным выражениям.

ФИО студента I блок II блок III блок
Кашаев Аскер Муратович 25 19 21

I блок задач

  1. Построить РВ, описывающее КПП организации.

Регулярное выражение (КПП) для поиска кодов причины постановки на учет с возможностью пробелов каждые 3 цифры: \d{3}\s?\d{3}\s?\d{3}.

II блок задач

  1. Построить РВ для поиска идентификатора, который может начинаться только с буквы a-zA-Z, знака доллара $ или подчеркивания _, оставшаяся часть символов идентификатора представляют собой только буквы a-zA-Z или цифры.

Регулярное выражение для поиска идентификаторов: [a-zA-Z$_][a-zA-Z0-9]*.

III блок задач

  1. Построить РВ, описывающее регистрационный знак транспортного средства (Vehicle Identification Number).

Регулярное выражение для поиска VIN: [A-HJ-NPR-Z0-9]{17}.

Примеры текста для анализа

  1. "Some text with KPP 770 801 001 and identifier $var1 and VIN 1HGCM82633A123456."
  2. "Другой пример текста с КПП 123 456 789, идентификатором _id и VIN JH4TB2H26CC000000."

Пример вывода всех задач

image

Рис. 18. Пример вывода всех задач.

image

Рис. 19. Пример вывода всех задач.

image

Рис. 20. Пример Вывода всех задач.


Часть 7. Реализация метода рекурсивного спуска для синтаксического анализа.

Цель: Разработать для грамматики алгоритм синтаксического анализа на основе метода рекурсивного спуска.

ФИО студента I блок
Кашаев Аскер Муратович 10

Вариант 10

Для грамматики G[<ФОРМУЛА>] разработать и реализовать алгоритм анализа на основе метода рекурсивного спуска. G[<ФОРМУЛА>]:

  1. <ФОРМУЛА> ➝<ФОРМУЛА> <ЗНАК> <ФОРМУЛА> | <ЧИСЛО> | '(' <ФОРМУЛА> ')'
  2. <ЧИСЛО' ➝ <ЦИФРА> | <ЧИСЛО><ЦИФРА>

<ЗНАК> ➝ '+' | '-' | '*' | '/'

<ЦИФРА> ➝ '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'

image

Рис. 21. Пример вывода при строке 2+23*23/2323-232

image

Рис. 22. Пример вывода при строке ((2+1)/2)*9

image

Рис. 23. Пример вывода при строке 23123+23123+(323-22)+2

image

Рис. 24. Пример вывода ошибки

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published