User Tools

Site Tools


gram:case-013

Кейс 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: Лексический анализ

Задачи:

  1. Распознавание спецификаций задач
  2. Поддержка типов данных и диапазонов
  3. Обработка примеров и ограничений

ЛР2: Синтаксический анализ

Задачи:

  1. Парсер шаблонов задач
  2. Построение AST спецификации
  3. Валидация структуры описания

ЛР3: Семантический анализ

Задачи:

  1. Проверка согласованности типов
  2. Валидация диапазонов значений
  3. Контроль уникальности генерируемых данных

ЛР4: Генерация и проверка

Задачи:

  1. Создание уникальных вариантов задач
  2. Генерация тестовых данных
  3. Проверка решений учащихся

Пример спецификации

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
}

Педагогическое применение

Использование в школе:

  1. Создание индивидуальных заданий по программированию
  2. Автоматическая проверка решений
  3. Подготовка к олимпиадам

← К списку | ← 012 | 014 →

gram/case-013.txt · Last modified: by eugeneai