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

## Что было реализовано:
1. **Генерация входного файла** (`input.txt`):

* Был создан скрипт `generate_input_file`, который генерирует текстовый файл `input.txt`. Файл содержит типичные конструкции языка программирования, такие как идентификаторы, ключевые слова (`if`, `else`, `return`, `while`), операторы (`+`, `-`, `*`, `/`, `=`, `==`, `!=`, `<`, `>`, `<=`, `>=`), литералы и комментарии.

2. **Лексический анализатор**:

- Лексический анализатор написан на языке Python. Он читает содержимое файла `input.txt`, разделяет его на лексемы и классифицирует их на основе определенных правил.
- Для каждой лексемы определяется её тип (ключевое слово, оператор, идентификатор, литерал...).
- Программа умеет обрабатывать как однострочные, так и многострочные комментарии, а также игнорирует пробелы и переводы строк.

3. **Классификация лексем**:

- Для определения типа лексемы использовались регулярные выражения и множества ключевых слов, операторов и разделителей.
- Классификация включает ключевые слова (`if`, `else`, `while`, `return`), операторы (`+`, `-`, `*`, `/`, `=`, `==`, `!=`, `<`, `>`, `<=`, `>=`), идентификаторы, целочисленные литералы, строковые литералы и неизвестные лексемы.

4. **Обработка ошибок**:

- Программа проверяет каждую лексему на соответствие известным типам. Если встречается неизвестная лексема, программа выдает сообщение об ошибке с указанием токена.

## Пример работы программы:

При запуске программы происходит следующее:

1. Сначала проверяется наличие файла `input.txt`. Если файл отсутствует, он создается с помощью функции `generate_input_file`.
2. Файл `input.txt` считывается, происходит лексический анализ текста.
3. Программа выводит таблицу лексем с их типами и значениями, а также сообщения об ошибках, если таковые имеются.

## Преимущества использования конечного автомата для лексического анализа:

- Простота и надежность: Конечный автомат является простой и эффективной моделью для лексического анализа. Он легко поддерживается и расширяется.
- Гибкость: Можно легко адаптировать конечный автомат под различные языки программирования или спецификации.
- Высокая производительность: Алгоритм работает быстро и эффективно даже на больших объемах текста.

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