SQL语言的SELECT语句的正规式分析

简介: 以下为本人做的SQL词法分析器初步规则的设计,当然有些可能有些错误,可能需要后期修改 SQL语句->SELECT语句|UPDATE语句|DELETE语句|INSERT语句 值->[a-zA-Z]+[0-9]*(_)[a-zA-Z]+[0-9]* SELECT语句->SELECT语句 [UNIO...

以下为本人做的SQL词法分析器初步规则的设计,当然有些可能有些错误,可能需要后期修改

SQL语句->SELECT语句|UPDATE语句|DELETE语句|INSERT语句

->[a-zA-Z]+[0-9]*(_)[a-zA-Z]+[0-9]*

SELECT语句->SELECT语句 [UNION|UNION ALL] SELECT语句|SELECT (DISTINCT) 字段 FROM 表名 (分组) (连接) (WHERE 条件) (排序)

表名->|SELECT语句 (AS)

字段->字段(,字段)||*|(CASE语句 (AS ))

表名->|(SELECT语句 AS )

条件->条件( OR|AND 条件)| 比较条件

比较条件->>|<|>=|<=|=|<>|LIKE

分组->GROUP BY 字段 (HAVING 条件)

排序->ORDER BY 字段 (ASC|DESC)

连接->[LEFT JOIN|LEFT OUTER JOIN|RIGHT JOIN|RIGHT OUTER JOIN|INNER JOIN|FULL JOIN] 表名 ON 条件

CASE语句->CASE [WHEN 条件 THEN ]+ (ELSE ) END | CASE 条件 [WHEN THEN ]+ (ELSE ) END

 

非终结符替换

代号

代替的值

状态

A

SELECT语句

S1

B

表名

S2

C

字段

S3

D

分组

S4

E

连接

S5

F

条件

S6

G

排序

S7

H

S8

I

CASE语句

S9

J

比较条件

S10

K

关键字

S11

 

终结符替换(关键字)

终结符

状态

WHEN

C1

SELECT

C2

DISTINCT

C3

FROM

C4

WHERE

C5

LEFT JOIN

C6

LEFT OUTER JOIN

C7

RIGHT JOIN

C8

RIGHT OUTER JOIN

C9

INNER JOIN

C10

FULL JOIN

C11

HAVING

C12

ASC

C13

DESC

C14

CASE

C15

END

C16

ELSE

C17

ON

C18

UNION

C19

UNION ALL

C20

AS

C21

ORDER BY

C22

GOURP BY

C23

OR

C24

AND

C25

THEN

C26

LIKE

C27

 

推导式变为:

A->A C19 A|A C20 A|C2 (C3) C C4 B (D) (E) (C5 F) (G)

B->H|A C21 H

C->C(,C)|H|*|(I (C21 H))

D->C22 C (C12 F)

E->[C6|C7|C8|C9|C10|C12] B C18 F

F->F (C24|C25 F)|H J H

G->C23 C (C13|C14)

LETTER->A|B|…|Z|a|b|…|c

DIGIT->0|1|…|9

H->LETTER(LETTER|DIGIT)*

I->C15[ C1 F C26 H]+ (C17 H) C16|C15 C [C1 H THEN H ]+( C17 H) C16

J->>|<|>=|<=|=|<>|LIKE

 

消除A的直接左递归

A->C2 (C3) C C4 B (D) (E) (C5 F) (G) P1

P1->C19 A P1|ε

 

消除F的直接左递归

F-> H J H P2

P2-> (C24|C25 F) P2|ε

 

消除C的直接左递归

C-> (H|*|(I (C21 H))) P3

P3->(,C) P3|ε

相关文章
|
11月前
|
SQL 数据可视化 关系型数据库
MCP与PolarDB集成技术分析:降低SQL门槛与简化数据可视化流程的机制解析
阿里云PolarDB与MCP协议融合,打造“自然语言即分析”的新范式。通过云原生数据库与标准化AI接口协同,实现零代码、分钟级从数据到可视化洞察,打破技术壁垒,提升分析效率99%,推动企业数据能力普惠化。
911 3
|
11月前
|
SQL 数据管理 关系型数据库
SQL 语言入门:开启数据管理的大门
在数字化时代,数据已成为核心资产,而 SQL 作为操作关系型数据库的标准语言,是数据从业者、程序员及办公人员必备技能。本文从基础概念讲起,详解 SQL 的核心用法,包括数据查询、插入、修改、删除及表结构操作,并通过实例演示帮助读者快速上手。掌握 SQL,不仅能提升数据处理效率,更为深入理解数据管理打下坚实基础。
|
10月前
|
SQL Oracle 关系型数据库
SQL语言小结
针对数据库、表单和数据行的增删改,没有涉及到sql真正的用途也就是查询,sql提供的查询语句的关键字占 sql 语言的一半之多,查询语句还是得单拿出来讲,不然太多了。 因为没有涉及到查询,所以sql的新增和修改都是很笼统的做法,drop、alter drop、delete这些很容易,逻辑性也不强,再次说明sql的真正精髓在于查询,不然为啥叫做结构化查询语言
505 0
|
10月前
|
SQL 关系型数据库 MySQL
(SQL)SQL语言中的查询语句整理
查询语句在sql中占了挺大一部分篇幅,因为在数据库中使用查询语句的次数远多于更新与删除命令。而查询语句比起其他语句要更加的复杂,可因为sql是数据库不可或缺的一部分,所以即使不懂,也必须得弄懂,以上。
502 0
|
SQL 关系型数据库 MySQL
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
|
SQL 算法 数据挖掘
【SQL周周练】:利用行车轨迹分析犯罪分子作案地点
【SQL破案系列】第一篇: 如果监控摄像头拍下了很多车辆的行车轨迹,那么如何利用这些行车轨迹来分析车辆运行的特征,是不是能够分析出犯罪分子“踩点”的位置
420 15
|
SQL 关系型数据库 MySQL
【MySQL】SQL分析的几种方法
以上就是SQL分析的几种方法。需要注意的是,这些方法并不是孤立的,而是相互关联的。在实际的SQL分析中,我们通常需要结合使用这些方法,才能找出最佳的优化策略。同时,SQL分析也需要对数据库管理系统,数据,业务需求有深入的理解,这需要时间和经验的积累。
510 12
|
SQL 存储 缓存
YashanDB SQL语言
YashanDB SQL语言
|
存储 SQL 关系型数据库
PostgreSQL 10.1 手册_部分 II. SQL 语言_第 12 章 全文搜索_12.9. GIN 和 GiST 索引类型
12.9. GIN 和 GiST 索引类型 有两种索引可以被用来加速全文搜索。注意全文搜索并非一定需要索引,但是在一个定期会被搜索的列上,通常需要有一个索引。 CREATE INDEX name ON table USING GIN(column); 创建一个基于 GIN(通用倒排索引)的索引。
1915 0