===== Кейс 011: Простой SQL-подобный язык (gram:case-011) ===== === Общая информация === ^ Уровень сложности ^ 🟠 Продвинутый ^ ^ Рекомендуемые языки ^ Python, Java ^ ^ Основные инструменты ^ ANTLR4 ^ ^ Предметная область ^ Информатика, базы данных ^ === Описание кейса === Учебный язык запросов к базам данных для обучения основам SQL: SELECT-запросы, фильтрация, сортировка, агрегация. === Грамматика языка === // Лексемы SELECT : 'SELECT' FROM : 'FROM' WHERE : 'WHERE' ORDER : 'ORDER' BY : 'BY' ASC : 'ASC' DESC : 'DESC' AND : 'AND' OR : 'OR' NOT : 'NOT' LIKE : 'LIKE' IN : 'IN' COUNT : 'COUNT' SUM : 'SUM' AVG : 'AVG' MIN : 'MIN' MAX : 'MAX' STAR : '*' COMMA : ',' SEMI : ';' LPAREN : '(' RPAREN : ')' EQ : '=' NEQ : '!=' LT : '<' GT : '>' LEQ : '<=' GEQ : '>=' STRING : '\'' (~['\\] | '\\' .)* '\'' NUMBER : [0-9]+ ('.' [0-9]+)? ID : [a-zA-Z_][a-zA-Z_0-9]* WS : [ \t\r\n]+ -> skip // Синтаксис query : select from where? order? limit? SEMI select : SELECT (STAR | column (COMMA column)*) column : (aggregate LPAREN ID RPAREN | ID) (AS ID)? aggregate : COUNT | SUM | AVG | MIN | MAX from : FROM ID (AS ID)? where : WHERE condition condition : expression ( (AND | OR) expression )* expression : column comparison value | column IN LPAREN value (COMMA value)* RPAREN comparison : EQ | NEQ | LT | GT | LEQ | GEQ | LIKE value : STRING | NUMBER | ID order : ORDER BY order_item (COMMA order_item)* order_item : ID (ASC | DESC)? limit : LIMIT NUMBER === План лабораторных работ === ==== ЛР1: Лексический анализ ==== **Задачи:** - Распознавание SQL-ключевых слов - Поддержка агрегатных функций - Обработка условий и операторов ==== ЛР2: Синтаксический анализ ==== **Задачи:** - Парсер SELECT-запросов - Построение AST запроса - Валидация структуры предложений ==== ЛР3: Семантический анализ ==== **Задачи:** - Проверка существования таблиц и столбцов - Контроль типов в условиях - Валидация агрегатных функций ==== ЛР4: Исполнение запросов ==== **Задачи:** - Интерпретация запросов на учебных данных - Сравнение с эталонным результатом - Генерация тестовых баз данных === Пример запроса === SELECT имя, оценка FROM студенты WHERE оценка >= 4 ORDER BY оценка DESC; === Педагогическое применение === **Использование в школе:** - Обучение основам баз данных - Тренажер написания SQL-запросов - Подготовка к олимпиадам по информатике ---- [[gram:labs|← К списку]] | [[gram:case-010|← 010]] | [[gram:case-012|012 →]]