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