gram:case-013
Table of Contents
Кейс 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
}
Педагогическое применение
Использование в школе:
- Создание индивидуальных заданий по программированию
- Автоматическая проверка решений
- Подготовка к олимпиадам
← К списку | ← 012 | 014 →
gram/case-013.txt · Last modified: by eugeneai
