Wiki - Adidas05050/Team_Work GitHub Wiki
Информация о проекте
Интерпретатор языка программирования Машины Тьюринга.
Программа предназначена в учебных целях и преследует следующие задачи:
- Повышение уровня написания программ студентов, путём изучения новых путей решения поставленных задач.
- Обучение начальным навыкам командной работы.
- Решение поставленного задания. *Интерпретирование кода Тьюринга, написанного в программе.
Описание проекта:
Интерпретатор языка машины Тьюринга поможет ознакомится студентам с абстрактным исполнителем и тем, что любой алгоритм возможно реализовать используя простейшие алгоритмы без использования памяти. Сам продукт создаётся, как альтернативное решение машины Тьюринга без привязки к интернету и будет обладать схожим интерфейсом, с представленным ниже по ссылке, для удобства. http://morphett.info/turing/ - Turing machine simulator. Симулятор, который предлагают использовать студентам.
В финальной версии программы будут реализованы следующие пункты:
- Оконное приложение. (Бета)
- Ввод кода в поле предназначенное для этого. (Бета)
- Сохранение кода в текстовый файл. (Бета)
- Загрузка кода из текстового файла (Релиз)
- Выполнение написанного кода. (Бета)
- Визуальное отображение происходящего. Бесконечная в обе стороны лента. (Бета)
- Смена скорости выполнения два режима. (Релиз)
- Подсветка ошибок. (Релиз)
- Примеры программ в этом репозитории. (Релиз)
Функционал:
Программа будет с интерактивным интерфейсом. Прямо в поле ввода можно будет писать код алгоритма, с последующем выполнением и визуальным отображением на ленте бесконечной влево и вправо.
Синтаксис:
-
<текущая позиция> <текущий символ> <новый символ> <направление> <новая позиция> - пример, a 0 1 r b . Текущая и новая позиции могут содержать любые символы, но начало программы обязательно с 0.
-
Текущий и новый символы должны быть единичны или '_'(пустое место) - пример, a 0 1 r b . a 0 12 r b - является ошибкой
-
Направление содержит один символ l - двигаться влево, r - двигаться вправо или * - не менять направление. Всё движение смещает каретку на один символ в ленте.
-
Символ ";" является комментирующим, всё написанное после не будет учитываться при выполнении программы.
-
После встречи кодового слова "halt" программа будет останавливать выполнение. Например, "halt" или "halt-<любые символы>".
Семантика языка:
010101 - лента до выполнения.
0 0 1 r 1 - на текущей позиции, если текущий символ '0' совпадает с символом в ленте '0', то меняем на новый символ '1', переводи каретку по направлению 'r' (вправо) на один символ и переходим к позиции '1'.
110101 - лента после выполнения.
Если позиции '1' не найдено или при позиции '1' не совпадает ни один из текущих символов с символом в ленте, то произойдёт ошибка и выполнение прекратиться.
Пример ошибки:
0 0 1 r 1
1 0 1 r 0
В ленте "010101" на второй позиции находится '1', в условиях выполнения такое не предусмотрено, программа завершиться с ошибкой.
Обработка:
При запуске программы будет происходить построчное считывание кода. На этом этапе будет происходить проверка на соответствие синтаксису, а так же обработка кода. Сначала **Лексический анализ, а после ***синтаксический анализ.
Если нет ошибок написанный код будет выполняться.
Сама программа будет написана при использовании языка программирования С++.
Запись в файл будет производится по средствам библиотек языка С++.
Графическое оформление с применением фреймворка QT;
Приложения:
*Интерпретирование - построчный анализ и последующее выполнение программы.
**Лексический анализ - процесс аналитического разбора входной последовательности символов на распознанные группы.
***Синтаксический анализ - преобразование входных данных в структурированный формат.
Проект является курсовой работой по ТРПО Иванова Константина и Васильева Антона группа ИП-814 в 2019 году.
СибГУТИ, Новосибирск (с).