Лабораторная №6 — задание 6.1D #
Нужно реализовать и покрыть тестами поддержку типов данных в интерпретаторе.
⚠️ Обратите внимание #
Это задание выполняется по спецификации семантики типов данных, подготовленной аналитиком в задании 6.1A.
- Спецификация должна появиться до начала кодирования — так же, как и в реальных проектах.
- Вы можете составлять спецификацию совместно с аналитиком, а затем приступить к реализации.
- Ждать проверки спецификации преподавателем не нужно.
Порядок выполнения #
- Получите спецификацию семантики типов данных для своего языка программирования у аналитика
- Напишите (или допишите) список тестов семантики типов в формате markdown
- добавьте в том числе 2-3 примера программ, подготовленных аналитиком в его задании
- Реализуйте поддержку типов данных
- рекомендуется следовать подходу TDD или ATDD
- выделите модуль
src/Runtimeи в нём опишите классы для поддержи значений, тип которых определяется динамически - внесите доработки в остальные модули
Требования к поддержке типов данных #
- Следует создать класс, моделирующий значение, тип которого определяется динамически
- Можно назвать его
Value,RuntimeValueили иным разумным способом - Класс должен обеспечивать безопасный интерфейс, не позволяющий по ошибке поместить значение совершенного иного типа, не соответствующего семантике типов данных языка программирования
- Можно назвать его
- Следует проверять типы данных во всех операторах (бинарных и унарных)
- При несоответствии типов следует бросать подходящий тип исключения
- Проверки типов должны строго соответствовать правилам, заданным в спецификации
Требования к списку тестов #
Список тестов должен соответствовать спецификации, подготовленной аналитиком:
- Список должен быть полным — каждое правило из спецификации должно быть покрыто хотя бы одним тестом
- Не обязательно на каждую фразу спецификации делать отдельный тест, поскольку один тест может проверить несколько вещей
- С другой стороны, может быть полезным на одно правило спецификации сделать несколько тестов под разные варианты (например, разные комбинации типов операндов бинарной операции)
- Список тестов должен быть корректным — в нём нет лишних пунктов, противоречащих спецификации
- Антипример: в спецификации семантики типов указано, что арифметические операторы принимают только целые числа, а в тесте оператором
+складываются строки
- Антипример: в спецификации семантики типов указано, что арифметические операторы принимают только целые числа, а в тесте оператором