Поддержка переменных и функций

Поддержка переменных и функций #

Нужно добавить в язык поддержку переменных и функций.

Порядок выполнения #

  1. Напишите падающие приёмочные тесты с примерами программ на вашем языкее
    • эти примеры должны показывать все новые возможности языка
  2. Обновите спецификацию языка: EBNF-грамматику,
    • проверьте, что в грамматике нет проблем левой рекурсии и левой факторизации
    • проверьте, что примеры соответствуют спецификации
  3. Реализуйте изменения, пройдите все тесты, исправьте выявленные ошибки в любой из подсистем интерпретатора

Требования к языку #

Язык должен поддерживать:

  1. Объявление переменных с указанием типа
    • пока достаточно одного типа данных
  2. Доступ к переменным — например, выражение x + 5 читает значение переменной x
  3. Присваивание переменных
  4. Объявление пользовательских функций
    • с параметрами и без параметров
    • с возвращаемым значением и без возвращаемого значения
  5. Инструкцию возврата из функции — например, return — либо правило семантики, согласно которому функция возвращает результат последнего выражения
  6. Правила, предписывающие порядок вычисления аргументов
  7. Встроенные функции — не менее 3 полезных встроенных функций

Все эти вещи должны быть покрыты приёмочными тестами.

Опишите также правила областей действия имён. Вопросы для самопроверки:

  1. Имена функций и переменных находятся в одном пространстве имён?
  2. Можно ли во вложенной области видимости объявить переменную с тем же именем, что во внешней?
    • это называется variable shadowing
  3. Используются лексические или динамические области видимости?
  4. Обязательна ли инициализация переменных? Если нет, то что происходит при доступе к неинициализированной переменной?

Возможности на выбор #

Нужно выбрать как минимум две возможности языка из списка ниже:

  1. Объявление глобальных переменных
  2. Объявление констант, для которых запрещено присваивание
  3. Вложенные присваивания, например, a = b = c — с правой ассоциативностью
  4. Средства для ввода чисел — например, встроенная функция readInt
  5. Встроенные функции min и max, принимающие произвольное число аргументов

Примеры программ для тестов #

В приёмочных тестах следует добавить как минимум две программы, выполняющих осмысленную работу, например:

  1. CircleSquare — читает радиус круга и печатает его площадь
  2. RectSquare — читает координаты прямоугольника и печатает его площадь
  3. HeronFormula — читает координаты вершин треугольника в виде 3 пар чисел и печатает площадь треугольника
    • в программе должна быть определена структура Point2D, представляющая точку в двумерном пространстве
    • в программе должна быть определена функция либо метод Distance(...) для вычисления расстояния между двумя точками