===== Кейс 013: Генератор задач по программированию (gram:case-013) ===== === Общая информация === ^ Уровень сложности ^ 🟠 Продвинутый ^ ^ Рекомендуемые языки ^ Python, Java ^ ^ Основные инструменты ^ ANTLR4, Jinja2 ^ ^ Предметная область ^ Информатика, программирование ^ === Описание кейса === Система для автоматической генерации уникальных задач по программированию с тестовыми данными и проверкой решений. === Грамматика языка === // Лексемы TASK : 'task' DESCRIPTION: 'description' INPUT : 'input' OUTPUT : 'output' EXAMPLE : 'example' CONSTRAINTS: 'constraints' VARIABLES : 'variables' GENERATE : 'generate' TYPE : 'type' RANGE : 'range' UNIQUE : 'unique' LBRACE : '{' RBRACE : '}' COLON : ':' COMMA : ',' STRING : '"' (~["\\] | '\\' .)* '"' NUMBER : [0-9]+ ID : [a-zA-Z_][a-zA-Z_0-9]* WS : [ \t\r\n]+ -> skip // Синтаксис task_pool : task+ task : TASK ID LBRACE task_content RBRACE task_content : description input output examples constraints generation description : DESCRIPTION COLON STRING input : INPUT COLON param_list output : OUTPUT COLON param_list examples : EXAMPLE COLON example+ example : INPUT COLON value_list OUTPUT COLON value_list constraints : CONSTRAINTS COLON constraint+ constraint : ID COLON type_spec range_spec? type_spec : TYPE COLON ('int' | 'float' | 'string' | 'array') range_spec : RANGE COLON NUMBER '..' NUMBER generation : GENERATE COLON generate_spec generate_spec : VARIABLES NUMBER UNIQUE? param_list : param (COMMA param)* param : ID COLON type_spec value_list : value (COMMA value)* value : NUMBER | STRING | array array : '[' value_list ']' === План лабораторных работ === ==== ЛР1: Лексический анализ ==== **Задачи:** - Распознавание спецификаций задач - Поддержка типов данных и диапазонов - Обработка примеров и ограничений ==== ЛР2: Синтаксический анализ ==== **Задачи:** - Парсер шаблонов задач - Построение AST спецификации - Валидация структуры описания ==== ЛР3: Семантический анализ ==== **Задачи:** - Проверка согласованности типов - Валидация диапазонов значений - Контроль уникальности генерируемых данных ==== ЛР4: Генерация и проверка ==== **Задачи:** - Создание уникальных вариантов задач - Генерация тестовых данных - Проверка решений учащихся === Пример спецификации === task sum_array { description: "Найдите сумму элементов массива" input: n: int, arr: array output: result: int examples: input: 3, [1, 2, 3] output: 6 input: 5, [10, 20, 30, 40, 50] output: 150 constraints: n: type: int range: 1..100 arr: type: array generate: variables 10 unique } === Педагогическое применение === **Использование в школе:** - Создание индивидуальных заданий по программированию - Автоматическая проверка решений - Подготовка к олимпиадам ---- [[gram:labs|← К списку]] | [[gram:case-012|← 012]] | [[gram:case-014|014 →]]