===== Кейс 012: Декларативный язык разметки (gram:case-012) =====
=== Общая информация ===
^ Уровень сложности ^ 🟠 Продвинутый ^
^ Рекомендуемые языки ^ Python, Java ^
^ Основные инструменты ^ ANTLR4 ^
^ Предметная область ^ Информатика, обработка текстов ^
=== Описание кейса ===
Язык для разметки учебных материалов: структурирование контента, генерация вариантов представления, экспорт в различные форматы.
=== Грамматика языка ===
// Лексемы
TITLE : 'title'
SECTION : 'section'
SUBSECTION : 'subsection'
QUESTION : 'question'
ANSWER : 'answer'
OPTION : 'option'
CORRECT : 'correct'
LBRACKET : '['
RBRACKET : ']'
LBRACE : '{'
RBRACE : '}'
EQ : '='
STRING : '"' (~["\\] | '\\' .)* '"'
NUMBER : [0-9]+
ID : [a-zA-Z_][a-zA-Z_0-9]*
WS : [ \t\r\n]+ -> skip
// Синтаксис
document : element+
element : title | section | question
title : TITLE LBRACKET STRING RBRACKET
section : SECTION LBRACKET STRING RBRACKET LBRACE element* RBRACE
subsection : SUBSECTION LBRACKET STRING RBRACKET LBRACE element* RBRACE
question : QUESTION LBRACKET attributes RBRACKET LBRACE content RBRACE
attributes : (type EQ STRING) (difficulty EQ NUMBER)?
content : text (answer | options)+
text : STRING
answer : ANSWER LBRACE expression RBRACE
options : OPTION LBRACE option_item+ RBRACE
option_item : text (CORRECT?)
expression : term ( (PLUS | MINUS) term )*
term : factor ( (MUL | DIV) factor )*
factor : NUMBER | ID | LPAREN expression RPAREN
=== План лабораторных работ ===
==== ЛР1: Лексический анализ ====
**Задачи:**
- Распознавание элементов разметки
- Поддержка атрибутов и метаданных
- Обработка вложенных структур
==== ЛР2: Синтаксический анализ ====
**Задачи:**
- Парсер структурированных документов
- Построение AST документа
- Валидация вложенности элементов
==== ЛР3: Семантический анализ ====
**Задачи:**
- Проверка ссылок и зависимостей
- Валидация типов вопросов
- Контроль корректности вариантов ответов
==== ЛР4: Генерация материалов ====
**Задачи:**
- Экспорт в GIFT-формат для Moodle
- Генерация HTML-представления
- Создание PDF-вариантов
=== Пример разметки ===
title "Контрольная работа по математике"
section "Алгебра" {
subsection "Уравнения" {
question [type="linear" difficulty=2] {
"Решите уравнение: 2x + 5 = 13"
answer { "4" }
}
}
}
=== Педагогическое применение ===
**Использование в школе:**
- Создание структурированных учебных материалов
- Быстрая генерация вариантов контрольных
- Подготовка интерактивных заданий
----
[[gram:labs|← К списку]] | [[gram:case-011|← 011]] | [[gram:case-013|013 →]]