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