User Tools

Site Tools


gram:case-011

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

Задачи:

  1. Распознавание SQL-ключевых слов
  2. Поддержка агрегатных функций
  3. Обработка условий и операторов

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

Задачи:

  1. Парсер SELECT-запросов
  2. Построение AST запроса
  3. Валидация структуры предложений

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

Задачи:

  1. Проверка существования таблиц и столбцов
  2. Контроль типов в условиях
  3. Валидация агрегатных функций

ЛР4: Исполнение запросов

Задачи:

  1. Интерпретация запросов на учебных данных
  2. Сравнение с эталонным результатом
  3. Генерация тестовых баз данных

Пример запроса

SELECT имя, оценка 
FROM студенты 
WHERE оценка >= 4 
ORDER BY оценка DESC;

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

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

  1. Обучение основам баз данных
  2. Тренажер написания SQL-запросов
  3. Подготовка к олимпиадам по информатике

← К списку | ← 010 | 012 →

gram/case-011.txt · Last modified: by eugeneai