===== Кейс 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 →]]