Задание 6.1D

Лабораторная №6 — задание 6.1D #

Нужно реализовать и покрыть тестами поддержку типов данных в интерпретаторе.

⚠️ Обратите внимание #

Это задание выполняется по спецификации семантики типов данных, подготовленной аналитиком в задании 6.1A.

  • Спецификация должна появиться до начала кодирования — так же, как и в реальных проектах.
  • Вы можете составлять спецификацию совместно с аналитиком, а затем приступить к реализации.
  • Ждать проверки спецификации преподавателем не нужно.

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

  1. Получите спецификацию семантики типов данных для своего языка программирования у аналитика
  2. Напишите (или допишите) список тестов семантики типов в формате markdown
    • добавьте в том числе 2-3 примера программ, подготовленных аналитиком в его задании
  3. Реализуйте поддержку типов данных
    • рекомендуется следовать подходу TDD или ATDD
    • выделите модуль src/Runtime и в нём опишите классы для поддержи значений, тип которых определяется динамически
    • внесите доработки в остальные модули

Требования к поддержке типов данных #

  1. Следует создать класс, моделирующий значение, тип которого определяется динамически
    • Можно назвать его Value, RuntimeValue или иным разумным способом
    • Класс должен обеспечивать безопасный интерфейс, не позволяющий по ошибке поместить значение совершенного иного типа, не соответствующего семантике типов данных языка программирования
  2. Следует проверять типы данных во всех операторах (бинарных и унарных)
    • При несоответствии типов следует бросать подходящий тип исключения
    • Проверки типов должны строго соответствовать правилам, заданным в спецификации

Требования к списку тестов #

Список тестов должен соответствовать спецификации, подготовленной аналитиком:

  1. Список должен быть полным — каждое правило из спецификации должно быть покрыто хотя бы одним тестом
    • Не обязательно на каждую фразу спецификации делать отдельный тест, поскольку один тест может проверить несколько вещей
    • С другой стороны, может быть полезным на одно правило спецификации сделать несколько тестов под разные варианты (например, разные комбинации типов операндов бинарной операции)
  2. Список тестов должен быть корректным — в нём нет лишних пунктов, противоречащих спецификации
    • Антипример: в спецификации семантики типов указано, что арифметические операторы принимают только целые числа, а в тесте оператором + складываются строки

Справочные материалы #

  1. Каноничный TDD и список тестов
  2. Пример PsTiger
  3. Лекция 10. Типы данных