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|ε

相关文章
|
1月前
|
SQL 存储 BI
【软件设计师备考 专题 】数据库语言(SQL)
【软件设计师备考 专题 】数据库语言(SQL)
90 0
|
14天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
88 6
|
1月前
|
SQL 存储 关系型数据库
SQL的基本语法以及SQL语句的关键字的使用,SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER、DROP等。
SQL的基本语法以及SQL语句的关键字的使用,SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER、DROP等。
|
2天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
|
11天前
|
SQL 数据库
数据库SQL语言实战(二)
数据库SQL语言实战(二)
|
17天前
|
SQL 数据库 索引
SQL索引失效原因分析与解决方案
SQL索引失效原因分析与解决方案
22 0
|
24天前
|
SQL 关系型数据库 MySQL
【MySQL】慢SQL分析流程
【4月更文挑战第1天】【MySQL】慢SQL分析流程
|
29天前
|
SQL 关系型数据库 MySQL
SQL INSERT INTO order_record SELECT * FROM 从一张表查出数据插入到另一张表
SQL INSERT INTO order_record SELECT * FROM 从一张表查出数据插入到另一张表
14 0
|
1月前
|
SQL 关系型数据库 MySQL
Flink 提供了一种名为 Flink SQL 的查询语言,它支持多种数据库之间的 DDL 语句转换
【2月更文挑战第18天】Flink 提供了一种名为 Flink SQL 的查询语言,它支持多种数据库之间的 DDL 语句转换
171 2
|
1月前
|
SQL 数据库 数据库管理