这是一个基于 Flex 和 Bison 实现的 SQL 解析器项目,支持图形界面(GUI)和命令行两种使用方式。
本项目实现了一个简单的数据库管理系统(DBMS),能够处理基本的 SQL 命令,包括:
- CREATE DATABASE / DROP DATABASE
- USE DATABASE
- CREATE TABLE / DROP TABLE
- INSERT
- SELECT
- UPDATE
- DELETE
- SHOW TABLES
- Flex:词法分析器生成工具
- Bison:语法分析器生成工具
- C 语言:核心实现语言
- Windows API:GUI 界面实现
- MSYS2:提供 Windows 下的类 Unix 环境
.
├── sql.l # 词法分析器定义文件
├── sql.y # 语法分析器定义文件
├── sql.c # 数据库核心实现
├── sql.h # 数据库头文件
├── gui.c # GUI 界面实现
├── gui.h # GUI 头文件
├── sql_exec.c # SQL 执行包装器
├── sql_exec.h # SQL 执行头文件
├── build_gui.bat # GUI 版本构建脚本
├── run_gui.bat # GUI 版本运行脚本
├── database.txt # 数据库存储文件
└── README.md # 项目说明文档
- 数据库的创建、删除和切换
- 表的创建和删除
- 数据的插入、查询、更新和删除
- 条件查询(WHERE 子句)
- 基本的表达式计算
- 支持基本的算术运算(+、-、*、/)
- 支持比较运算符(=、<、>、<=、>=、!=)
- 支持逻辑运算符(AND、OR)
- 运算符优先级处理
- INT:整数类型
- CHAR(n):字符串类型,n 为字符串长度
- 友好的 Windows GUI 界面
- SQL 语句输入框
- 执行结果实时显示
- 支持中文显示
- 安装 MSYS2
- 通过 MSYS2 安装必要的工具:
pacman -S gcc pacman -S flex pacman -S bison
-
使用 build_gui.bat 脚本编译项目:
build_gui.bat
-
运行生成的可执行文件:
run_gui.bat
或者直接双击
dbms_gui.exe
如果需要命令行版本,可以修改 sql.y 文件,移除 #ifndef GUI_MODE 条件编译,然后使用命令行方式编译运行。
CREATE DATABASE school;USE school;CREATE TABLE students (
id INT,
name CHAR(50),
age INT
);INSERT INTO students (id, name, age) VALUES (1, 'Alice', 20);
INSERT INTO students (id, name, age) VALUES (2, 'Bob', 22);SELECT * FROM students;
SELECT * FROM students WHERE age > 18;
SELECT name, age FROM students WHERE age >= 20;UPDATE students SET age = 21 WHERE id = 1;DELETE FROM students WHERE age < 18;SHOW TABLES;DROP TABLE students;DROP DATABASE school;- 所有 SQL 语句必须以分号结尾
- 字符串值需要使用单引号括起来
- 支持的数据类型包括 INT 和 CHAR(n)
- 数据库和表名、字段名区分大小写
- 数据库文件自动保存到
database.txt,程序启动时自动加载
GUI 界面包含以下组件:
- SQL 输入框:在上方多行文本框中输入 SQL 语句
- 执行 SQL 按钮:点击执行输入的 SQL 语句
- 清空输出按钮:清空结果显示区域
- 结果显示区域:下方显示 SQL 执行结果和消息
sql.l:Flex 词法分析器定义文件sql.y:Bison 语法分析器定义文件sql.c:数据库操作核心实现sql.h:数据库数据结构定义gui.c:Windows GUI 界面实现gui.h:GUI 函数声明sql_exec.c:SQL 字符串执行包装器sql_exec.h:SQL 执行函数声明database.txt:数据库持久化存储文件
欢迎提交 Issue 和 Pull Request 来帮助改进项目。在提交代码前,请确保:
- 代码符合项目的编码规范
- 添加了必要的测试用例
- 更新了相关文档
lbqlovel