Table of Contents

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

Задачи:

  1. Распознавание элементов разметки
  2. Поддержка атрибутов и метаданных
  3. Обработка вложенных структур

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

Задачи:

  1. Парсер структурированных документов
  2. Построение AST документа
  3. Валидация вложенности элементов

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

Задачи:

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

ЛР4: Генерация материалов

Задачи:

  1. Экспорт в GIFT-формат для Moodle
  2. Генерация HTML-представления
  3. Создание PDF-вариантов

Пример разметки

title "Контрольная работа по математике"
section "Алгебра" {
    subsection "Уравнения" {
        question [type="linear" difficulty=2] {
            "Решите уравнение: 2x + 5 = 13"
            answer { "4" }
        }
    }
}

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

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

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

← К списку | ← 011 | 013 →