- I. Разработка пользовательского интерфейса (GUI) для языкового процессора.
- II. Разработка лексического анализатора (сканера).
- III. Разработка синтаксического анализатора (парсера).
- IV. Нейтрализация ошибок (метод Айронса).
- V. Включение семантики в анализатор. Создание внутренней формы представления программы.
- VI. Реализация алгоритма поиска подстрок с помощью регулярных выражений.
- VII. Реализация метода рекурсивного спуска для синтаксического анализа.
Цель: Разработать приложение – текстовый редактор.
Рис. 1. Скриншот работы программы. Подсветка идентична ЯП Python.
Рис. 2. Открыт на полный экран, изменение размера текста через меню.
Рис. 3. Анимация. Работа меню инструментов. Изменение текста.
Рис. 4. Демонстрация таблицы ошибок с мокап-данными для примера.
Рис. 5. Анимация. Демонстративная работа с файлами.
Рис. 6. Справка. Помощь.
Рис. 7. Справка. О программе
Рис. 8 (а, б). Локализация. Английский и русский языки.
Изучить назначение лексического анализатора. Спроектировать алгоритм и выполнить программную реализацию сканера.
- Спроектировать диаграмму состояний сканера (примеры диаграмм представлены в прикрепленных файлах).
- Разработать лексический анализатор, позволяющий выделить в тексте лексемы, иные символы считать недопустимыми (выводить ошибку).
- Встроить сканер в ранее разработанный интерфейс текстового редактора. Учесть, что текст для разбора может состоять из множества строк.
# example"""
example
"""'''
example
'''# example
""" example '' """
''' "
example" '''- Комментарии языка Python.
Рис. 9. Диаграмма состояния сканера
Рис. 10(а,б). Сложный пример работы сканнера. а - английская локализация, б - русская локализация.
Рис. 11. Простой пример работы выделения типа лексемы.
Цель: Изучить назначение синтаксического анализатора. Спроектировать алгоритм и выполнить программную реализацию парсера.
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, аналогичный работе на токенах.
Рис. 13(а,б). Примеры работы парсера.
Цель: Реализовать алгоритм нейтрализации синтаксических ошибок и дополнить им программную реализацию парсера.
Important
Тема 51. Комментарии языка Python.
Нейтрализация ошибок реализована на основе данных парсера. View вызывает метод-генератор, находящийся во ViewModel, который в свою очередь обращается к результатам парсинга ошибок. Нейтрализатор уничтожает лишние последовательности символов, а также добавляет недостающие кавычки.
Рис. 14. Пример работы нейтрализации ошибок и парсера.
Цель: Дополнить анализатор, разработанный в рамках лабораторных работ, этапом формирования внутренней формы представления программы.
Important
Тема: включение семантики в анализатор, создание внутренней формы представления программы, используя польскую инверсную запись (ПОЛИЗ).
Рис. 15. Пример работы ПОЛИЗ.
Рис. 16. Пример работы ПОЛИЗ.
Рис. 17. Пример вывода ошибок ПОЛИЗ.
Цель: Реализовать алгоритм поиска в тексте подстрок, соответствующих заданным регулярным выражениям.
| ФИО студента | I блок | II блок | III блок |
|---|---|---|---|
| Кашаев Аскер Муратович | 25 | 19 | 21 |
- Построить РВ, описывающее КПП организации.
Регулярное выражение (КПП) для поиска кодов причины постановки на учет с возможностью пробелов каждые 3 цифры: \d{3}\s?\d{3}\s?\d{3}.
- Построить РВ для поиска идентификатора, который может начинаться только с буквы a-zA-Z, знака доллара $ или подчеркивания _, оставшаяся часть символов идентификатора представляют собой только буквы a-zA-Z или цифры.
Регулярное выражение для поиска идентификаторов: [a-zA-Z$_][a-zA-Z0-9]*.
- Построить РВ, описывающее регистрационный знак транспортного средства (Vehicle Identification Number).
Регулярное выражение для поиска VIN: [A-HJ-NPR-Z0-9]{17}.
- "Some text with KPP 770 801 001 and identifier $var1 and VIN 1HGCM82633A123456."
- "Другой пример текста с КПП 123 456 789, идентификатором _id и VIN JH4TB2H26CC000000."
Рис. 18. Пример вывода всех задач.
Рис. 19. Пример вывода всех задач.
Рис. 20. Пример Вывода всех задач.
Цель: Разработать для грамматики алгоритм синтаксического анализа на основе метода рекурсивного спуска.
| ФИО студента | I блок |
|---|---|
| Кашаев Аскер Муратович | 10 |
Для грамматики G[<ФОРМУЛА>] разработать и реализовать алгоритм анализа на основе метода рекурсивного спуска. G[<ФОРМУЛА>]:
- <ФОРМУЛА> ➝<ФОРМУЛА> <ЗНАК> <ФОРМУЛА> | <ЧИСЛО> | '(' <ФОРМУЛА> ')'
- <ЧИСЛО' ➝ <ЦИФРА> | <ЧИСЛО><ЦИФРА>
<ЗНАК> ➝ '+' | '-' | '*' | '/'
<ЦИФРА> ➝ '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
Рис. 21. Пример вывода при строке 2+23*23/2323-232
Рис. 22. Пример вывода при строке ((2+1)/2)*9
Рис. 23. Пример вывода при строке 23123+23123+(323-22)+2
Рис. 24. Пример вывода ошибки



























