Техническое задание к программе "Fingy"

Краткое описание

Программа предназначена для обучения программированию детей школьного возраста (~5-7 классы). Программа представляет из себя среду для разработки на простом ЯП (языке программирования), включая редактор, интерпретатор, отладчик и несколько ИО (игровых окружений).

Требования к программе

Требования к среде разработки

Среда разработки включает в себя редактор и отладчик. В среду разработки можно загрузить определенное ИО и начальную обстановку к нему. В специальной области (панельке) отображается специфичная для ИО информация (координатная плоскость для рисования и т.п.). Область ИО можно сбросить до первоначального состояния (очистить область рисования и т.п.).

Редактор

Редактор должен обладать следующими возможностями:

  • Подсветка синтаксиса
  • Нумерация строк
  • Подсветка точек останова (например красной линией)
  • Подсветка текущей выполняющейся команды. При интерактивном выполнении индикатор команды показывает какая команда в данный момент выполняется.
  • Подсветка строк, на которых обнаружены синтаксические ошибки. Подсветка выполняется после запуска скрипта (при наличии ошибок).

Отладчик

Отладчик должен обладать следующими возможностями:

  • Интерактивное выполнение скрипта (с определенной паузой между командами)
  • Установка точек останова (breakpoints)
  • Выполнение программы до позиции курсора
  • Прерывание выполнения программы
  • Приостановка выполнения программы (пауза)
  • Посветка текущей точки выполнения программы
  • Выполнение по шагам (step over, step into)
  • Просмотр/изменение значений переменных

Требования к ЯП

ЯП должен быть простым и лаконичным. Типизация динамическая. Синтаксис языка должен быть Pascal-подобным, с некоторыми изменениями. Ключевые слова должны быть в латинице (for, end, и т.п.), однако язык должен позволять объявлять и использовать переменные с кириллическими именами. Язык должен позволять объявлять функции, пользовательские модули.

Пример простого скрипта для ИО "Turtle" (черновой вариант синтаксиса):

# рисуем 15 равносторонних треугольников
# со сторонами 1, 1, 2, 3, 5, 8, 13 ...

def triangle(n)
  for i from 1 to 3 do
    forward(n)
    left(120)
  end
end

var n = 15
var fb = array(n)  # встроенная функция array создает новый массив
fb[1] = 1
fb[2] = 1

for i from 3 to n do
  fb[i] = fb[i - 2] + fb[i - 1]
end

for i from 1 to n do
  # рисуем треугольник
  triangle(fb[i])
  forward(fb[i])
end

Поддерживаемые типы должны включать в себя:

  • int (64битное знаковое целое)
  • float (64битное вещественное число)
  • bool (логическая переменная)
  • string (строка)
  • array (массив, тип элементов любой)

Управляющие операторы

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

  • if ... then ... (elif ...)* [else ...] end
  • for v from ... to ... [by ...] do ... end
  • while ... do ... end
  • loop ... end (бесконечный цикл)
  • break и continue (в циклах)
  • return (в функциях)

Области видимости

Переменные вводятся в текущую область видимости при помощи оператора var. Переменная доступна до конца текущего блока кода (до ключевого слова end). Пример:

var A
for I from 1 to 10 do
  # A и I доступны
  var B
  # A, B, и I доступны
  ...
end
# A доступна

Стандартные библиотеки

Должно быть предусмотрено несколько стандартных библиотек:

  • string - функции для работы со строками
  • math - математические функции
  • io - ввод и вывод

ИО могут добавлять собственные библиотеки.

Описания ИО

В программе должно быть реализовано 2 ИО (с возможностью добавления новых).

Turtle (Черепаха)

На плоском поле с декартовыми координатами находится исполнитель "черепаха". Черепаха может двигаться вперед/назад на вещественное расстояние. При этом черепаха оставляет за собой след в виде линии. Черепаха может поворачивать на определенное число градусов. Суть данного ИО - начертить при помощи черепахи определенный рисунок: треугольник, елочку и т.п. Черепаха может менять цвет и стиль следа, "поднимать живот" (при перемещении след не оставляется) и т.п.

Robot (Робот)

На плоском сетчатом поле в некоторых клетках находятся различные предметы: камни, ямы и т.п. В одной из клеток находится робот. Некоторые клетки поля закрыты "облаками", такие клетки не отличаются от обычных, однако ребенок не может посмотреть, что на них находится (это вынуждает ребенка использовать алгоритмы с ветвлениями и циклами). Роботом можно управлять, отдавая ему различные команды: вверх, вниз, поднять предмет из текущей клетки, опустить предмет и т.п. Робот может переносить предметы. На поле также могут находится другие роботы, настроенные враждебно. При встрече с враждебным роботом наш робот "погибает". Некоторые роботы двигаются по определенным правилам (например, по направлению нашего робота), некоторые двигаются в случайном направлении. Суть данного ИО - выолнять различные задания, начиная от "добраться из А в Б" и "перенести все камни в точку Б", заканчивая "добраться до Б, не встретившись с вражескими роботами".

Требования к расширяемости

Программа должна позволять создавать новые библиотеки и игровые окружения. Для этого должен быть предусмотрен API (набор Java классов и интерфейсов) для создания новых библиотек и ИО.