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