Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexey-Sagaydak committed Feb 26, 2024
2 parents 0aec1e8 + bb1ebfb commit 9232b27
Showing 1 changed file with 67 additions and 4 deletions.
71 changes: 67 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

### Интерфейс текстового редактора

![Главное окно программы](/README_images/main_window.png)
![Главное окно программы](/README_images/main_window_new.png)

#### Получившийся текстовый редактор имеет следующие элементы:
1. Заголовок окна.
Expand Down Expand Up @@ -110,6 +110,7 @@
```sql
DECLARE
product_price CONSTANT INTEGER = 150;
expense_1_amount CONSTANT INTEGER := -50;
```

```sql
Expand Down Expand Up @@ -141,12 +142,12 @@ DECLARE productPrice3 CONSTANT INTEGER := 150; DECLARE expense_amount_4 CONSTANT
1. **Тест №1.** Пример, показывающий все возможные лексемы, которые могут быть найдены лексическим анализатором.

![Тест 1](/README_images/scanner_test_3.png)
3. **Тест №2.** Сложный пример.
2. **Тест №2.** Сложный пример.

> При нажатии на лексему в таблице, соответствующий фрагмент текста подсвечивается в поле редактирования.
![Тест 2](/README_images/scanner_test_1.png)
6. **Тест №3.** Сложный пример.
3. **Тест №3.** Сложный пример.

> При нажатии на лексему в таблице, соответствующий фрагмент текста подсвечивается в поле редактирования.
Expand All @@ -162,13 +163,15 @@ DECLARE productPrice3 CONSTANT INTEGER := 150; DECLARE expense_amount_4 CONSTANT
| ------ | ------ | ------ | ------ |
| 42 | Объявление и инициализация целочисленной константы в СУБД PostgreSQL | DECLARE product_price CONSTANT INTEGER := 150; | [ссылка](https://www.commandprompt.com/education/constants-in-postgresql-explained-with-examples/) |

[Примеры допустимых строк](#примеры-допустимых-строк)

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

**Автоматная грамматика**
### Грамматика

G[Z] = { V<sub>T</sub>, V<sub>N</sub>, P, Z }

Expand All @@ -191,10 +194,70 @@ P = {

}

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

Согласно классификации Хомского, грамматика G[Z] является автоматной. Отметим, что правила должны быть либо только леворекурсивными, либо только праворекурсивными. Комбинация тех и других не допускается. Однако данная грамматика содержит одновременно леворекурсивные (2)-(3) и праворекурсивные продукции (5)-(6), и, следовательно, не является полностью автоматной.

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

![Граф конечного автомата](/README_images/finite_state_machine.jpg)

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

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

![Тест 1](/README_images/main_window_new.png)
2. **Тест №2.** Пример ошибок.

> При нажатии на лексему в таблице, соответствующий фрагмент текста подсвечивается в поле редактирования.
![Тест 2](/README_images/parser_test_1.png)
3. **Тест №3.** Пример ошибок.

> При нажатии на лексему в таблице, соответствующий фрагмент текста подсвечивается в поле редактирования.
![Тест 3](/README_images/parser_test_2.png)

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

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

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

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

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

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

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

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

> При нажатии на лексему в таблице, соответствующий фрагмент текста подсвечивается в поле редактирования.
![Тест 2](/README_images/parser_test_1.png)
2. **Тест №2.** Пример ошибок.

> При нажатии на лексему в таблице, соответствующий фрагмент текста подсвечивается в поле редактирования.
![Тест 3](/README_images/parser_test_2.png)

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

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

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

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

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

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

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

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

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

0 comments on commit 9232b27

Please sign in to comment.