Skip to content
This repository was archived by the owner on Sep 24, 2025. It is now read-only.

Repository files navigation

Compiler Theory

Compiler Theory - это приложение для редактирования и анализа кода. Оно предоставляет удобный текстовый редактор с расширенными возможностями, также включает функции анализа кода с поддержкой автодополнения и вывода ошибок компиляции.

Оглавление

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

Тема: Создание текстового редактора с возможностью последующего расширения в направлении языкового процессора.

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

Язык программирования: C#, Avalonia.

Возможности

Текстовый Редактор

  • Меню

  • Пункт меню Подпункты
    Файл Файл
    Правка Правка
    Текст Текст
    Справка Справка
  • Базовые Операции:

    • Открытие, создание и сохранение файлов.

    • Поддержка множества вкладок для одновременного редактирования различных файлов.

      Placeholder Screenshot

  • Редактирование Кода:

    • Подсветка синтаксиса и автодополнение для улучшенной читаемости кода.

    • Возможность отмены (Undo) и повтора (Redo) действий.

    • Операции копирования, вставки, удаления и выделения текста.

      Placeholder Screenshot

  • Настройки Внешнего Вида:

    • Изменение размера шрифта для удобства чтения.

      Placeholder Screenshot

Анализ Кода

  • Ошибки Компиляции:
    • Вывод ошибок компиляции в удобном формате.

      Placeholder Screenshot

Другие Функции

  • Открытие Примеров Кода:

    • Возможность загрузки примеров кода для изучения и экспериментов.

      Placeholder Screenshot

  • Поддержка Многозадачности:

    • Возможность одновременного редактирования и анализа нескольких файлов.

      Placeholder Screenshot Placeholder Screenshot

Используемые Библиотеки

Лабораторная работа №2: Разработка лексического анализатора (сканера)

Тема: разработка лексического анализатора (сканера).

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

Тема Пример верной строки Справка
17 Объявление и инициализация строковой константы на языке Rust const NAME:&str = "GFG"; ссылка

В соответствии с вариантом задания необходимо:

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

Входные данные: строка (текст программного кода).

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

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

const my_str: &str = "hello world";
const my_str: &str = "";
const my_str: &str = "shielding \" test";

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

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

Тестовые примеры

  1. Тест №1. Пример, показывающий все возможные лексемы, которые могут быть найдены лексическим анализатором. Тест 1

  2. Тест №2. Недопустипый вариант. Недопустимые символы. Тест 2

  3. Тест №3. Недопустипый вариант. Незакрытая строка. Тест 3

Используемые Библиотеки

Примечание: Убедитесь, что все пакеты устанавливаются из указанных версий для обеспечения совместимости.

Лабораторная работа №3: Разработка синтаксического анализатора (парсера)

Тема: разработка синтаксического анализатора (парсера).

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

Тема Пример верной строки Справка
17 Объявление и инициализация строковой константы на языке Rust const NAME:&str = "GFG"; ссылка

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

В соответствии с вариантом задания на курсовую работу необходимо:

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

Грамматика

G[<C> = <строковая константа>]:

VT = { 'const', str’, ‘"’, '', ':', '&', '=', ';', _, ‘a’…’z’, ‘A’…’Z’, ‘0’…’9’}

VN = { <C>, I, IT, T, A, S, ST, OE, E }

P = {

  1. <C> → ‘const’ I
  2. I → '_' IT
  3. I → letter IT
  4. IT → ‘_’ IT
  5. IT → digit IT
  6. IT → letter IT
  7. IT → ':' T
  8. T → '&str' A
  9. A → '=' S
  10. S → '"' ST
  11. ST → symbol ST
  12. ST → '\"' ST
  13. ST → '"' OE
  14. OE → ';'
  15. E → epsilon

}

Классификация грамматики

Согласно классификации Хомского, грамматика G[Z] является полностью автоматной.

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

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

Тестовые примеры

  1. Тест №1. Все выражения написаны корректно.

    Тест 1

  2. Тест №2. Пример ошибок.

    Тест 2

  3. Тест №3. Пример ошибок.

    Тест 3

Лабораторная работа №4: Нейтрализация ошибок (метод Айронса)

Тема: нейтрализация ошибок (метод Айронса).

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

Метод Айронса

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

Этот алгоритм был мной уже реализован в Лабораторной работе №3. В таблице ошибок выводятся их местоположение и текст ошибки, содержащий информацию об отброшенном фрагменте.

Тестовые примеры

  1. Тест №1. Пример ошибок.

    Тест 1 Тест 1

  2. Тест №2. Пример ошибок.

    Тест 3 Тест 3

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

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

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

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

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

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

Лабораторная работа №7: Реализация метода рекурсивного спуска для синтаксического анализа

Тема: реализация метода рекурсивного спуска для синтаксического анализа.

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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages