===== Кейс 008: Язык конфигураций (gram:case-008) ===== === Общая информация === ^ Уровень сложности ^ 🟡 Средний ^ ^ Рекомендуемые языки ^ Python, Java ^ ^ Основные инструменты ^ ANTLR4 ^ ^ Предметная область ^ Информатика, конфигурирование ^ === Описание кейса === Разработка предметно-ориентированного языка для конфигурации учебных систем и генерации параметризованных заданий. === Грамматика языка === // Лексемы STRING : '"' (~["\\] | '\\' .)* '"' NUMBER : [0-9]+ ('.' [0-9]+)? BOOL : 'true' | 'false' ID : [a-zA-Z_][a-zA-Z_0-9]* ASSIGN : '=' LBRACE : '{' RBRACE : '}' COMMA : ',' COLON : ':' WS : [ \t\r\n]+ -> skip // Синтаксис config : section+ section : ID LBRACE setting* RBRACE setting : ID ASSIGN value (COMMA value)* value : STRING | NUMBER | BOOL | array | object array : LBRACE value (COMMA value)* RBRACE object : LBRACE setting* RBRACE task_config : config constraints variants constraints : 'constraints' LBRACE range* RBRACE variants : 'variants' NUMBER range : ID COLON min_max min_max : NUMBER '..' NUMBER === План лабораторных работ === ==== ЛР1: Лексический анализ ==== **Задачи:** - Распознавание различных типов данных - Поддержка структур (объекты, массивы) - Обработка вложенных конструкций ==== ЛР2: Синтаксический анализ ==== **Задачи:** - Парсер конфигурационных файлов - Построение AST конфигурации - Валидация структуры секций ==== ЛР3: Семантический анализ ==== **Задачи:** - Проверка типов значений - Валидация диапазонов параметров - Генерация конфигураций по шаблонам ==== ЛР4: Генерация заданий ==== **Задачи:** - Создание вариантов на основе конфигурации - Подстановка параметров в шаблоны - Экспорт в различные форматы === Пример конфигурации === math_task { topic = "algebra", difficulty = "medium", constraints { numbers_range = 1..100, variables_count = 1..3 }, variants = 10 } === Педагогическое применение === **Использование в школе:** - Настройка генераторов заданий - Создание индивидуальных траекторий - Управление сложностью материалов ---- [[gram:labs|← К списку]] | [[gram:case-007|← 007]] | [[gram:case-009|009 →]]