Поддержка переменных и функций #
Нужно добавить в язык поддержку переменных и функций.
Порядок выполнения #
- Напишите падающие приёмочные тесты с примерами программ на вашем языкее
- эти примеры должны показывать все новые возможности языка
- Обновите спецификацию языка: EBNF-грамматику,
- проверьте, что в грамматике нет проблем левой рекурсии и левой факторизации
- проверьте, что примеры соответствуют спецификации
- Реализуйте изменения, пройдите все тесты, исправьте выявленные ошибки в любой из подсистем интерпретатора
Требования к языку #
Язык должен поддерживать:
- Объявление переменных с указанием типа
- пока достаточно одного типа данных
- Доступ к переменным — например, выражение
x + 5читает значение переменнойx - Присваивание переменных
- Объявление пользовательских функций
- с параметрами и без параметров
- с возвращаемым значением и без возвращаемого значения
- Инструкцию возврата из функции — например,
return— либо правило семантики, согласно которому функция возвращает результат последнего выражения - Правила, предписывающие порядок вычисления аргументов
- Встроенные функции — не менее 3 полезных встроенных функций
Все эти вещи должны быть покрыты приёмочными тестами.
Опишите также правила областей действия имён. Вопросы для самопроверки:
- Имена функций и переменных находятся в одном пространстве имён?
- Можно ли во вложенной области видимости объявить переменную с тем же именем, что во внешней?
- это называется variable shadowing
- Используются лексические или динамические области видимости?
- Обязательна ли инициализация переменных? Если нет, то что происходит при доступе к неинициализированной переменной?
Возможности на выбор #
Нужно выбрать как минимум две возможности языка из списка ниже:
- Объявление глобальных переменных
- Объявление констант, для которых запрещено присваивание
- Вложенные присваивания, например,
a = b = c— с правой ассоциативностью - Средства для ввода чисел — например, встроенная функция
readInt - Встроенные функции
minиmax, принимающие произвольное число аргументов
Примеры программ для тестов #
В приёмочных тестах следует добавить как минимум две программы, выполняющих осмысленную работу, например:
- CircleSquare — читает радиус круга и печатает его площадь
- RectSquare — читает координаты прямоугольника и печатает его площадь
- HeronFormula — читает координаты вершин треугольника в виде 3 пар чисел и печатает площадь треугольника
- в программе должна быть определена структура
Point2D, представляющая точку в двумерном пространстве - в программе должна быть определена функция либо метод
Distance(...)для вычисления расстояния между двумя точками
- в программе должна быть определена структура