Wiki - Adidas05050/Team_Work GitHub Wiki

Информация о проекте

Интерпретатор языка программирования Машины Тьюринга.


Программа предназначена в учебных целях и преследует следующие задачи:

  1. Повышение уровня написания программ студентов, путём изучения новых путей решения поставленных задач.
  2. Обучение начальным навыкам командной работы.
  3. Решение поставленного задания. *Интерпретирование кода Тьюринга, написанного в программе.

Описание проекта:

Интерпретатор языка машины Тьюринга поможет ознакомится студентам с абстрактным исполнителем и тем, что любой алгоритм возможно реализовать используя простейшие алгоритмы без использования памяти. Сам продукт создаётся, как альтернативное решение машины Тьюринга без привязки к интернету и будет обладать схожим интерфейсом, с представленным ниже по ссылке, для удобства. http://morphett.info/turing/ - Turing machine simulator. Симулятор, который предлагают использовать студентам.

В финальной версии программы будут реализованы следующие пункты:

  1. Оконное приложение. (Бета)
  2. Ввод кода в поле предназначенное для этого. (Бета)
  3. Сохранение кода в текстовый файл. (Бета)
  4. Загрузка кода из текстового файла (Релиз)
  5. Выполнение написанного кода. (Бета)
  6. Визуальное отображение происходящего. Бесконечная в обе стороны лента. (Бета)
  7. Смена скорости выполнения два режима. (Релиз)
  8. Подсветка ошибок. (Релиз)
  9. Примеры программ в этом репозитории. (Релиз)

Функционал:

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

Синтаксис:

  1. <текущая позиция> <текущий символ> <новый символ> <направление> <новая позиция> - пример, a 0 1 r b . Текущая и новая позиции могут содержать любые символы, но начало программы обязательно с 0.

  2. Текущий и новый символы должны быть единичны или '_'(пустое место) - пример, a 0 1 r b . a 0 12 r b - является ошибкой

  3. Направление содержит один символ l - двигаться влево, r - двигаться вправо или * - не менять направление. Всё движение смещает каретку на один символ в ленте.

  4. Символ ";" является комментирующим, всё написанное после не будет учитываться при выполнении программы.

  5. После встречи кодового слова "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 году.

СибГУТИ, Новосибирск (с).