SQL解析器之词法分析--预扫描

简介: 我设计的在SQL语句解析之前,先必须进行预扫描,其作用是 去除注释 去除前导空格 并且将各单词之间的多个空格压缩成一个 并且去掉所有的换行符便于语法分析 1 function TSCanner.

我设计的在SQL语句解析之前,先必须进行预扫描,其作用是

  • 去除注释
  • 去除前导空格
  • 并且将各单词之间的多个空格压缩成一个
  • 并且去掉所有的换行符便于语法分析
 1 function TSCanner.Pro_Process(str: string): string;
2 var
3 sTemp, sTemp1: string;
4 sList: TStringList;
5 iPos, iPos1, i: Integer;
6 begin
7 sList := TStringList.Create;
8 sList :=SplitString(str,#13#10);
9 for i := 0 to sList.Count - 1 do
10 begin
11 sTemp := sList[i];
12 iPos := Pos('//', stemp);
13 if iPos > 0 then
14 begin
15 sTemp1 := Copy(sTemp, 1, iPos - 1);
16 sList[i] := sTemp1;
17 end;
18 end;
19
20 sTemp := sList.Text;
21 sList.Free;
22
23 sTemp := StringReplace(sTemp, #13#10, ' ', [rfReplaceAll]);
24 while Pos(' ', sTemp) > 0 do
25 sTemp := StringReplace(sTemp, ' ', ' ', [rfReplaceAll]);
26 sTemp := Trim(StringReplace(sTemp, ', ', ',', [rfReplaceAll]));
27 iPos :=Pos('/*',sTemp);
28 if iPos>0 then
29 begin
30 iPos1 :=Pos('*/',sTemp);
31 if iPos1>0 then
32 begin
33 sTemp :=Trim(Copy(sTemp, 1,iPos-1)+copy(sTemp,iPos1+2,Length(sTemp)-ipos1-1));
34 end;
35 end;
36 sTemp1 := UpdateAllKey(sTemp);
37 Result := sTemp1;
38 end;
39
40
41 function TSCanner.UpdateAllKey(sWords:string):string;
42 var
43 i,j:Integer;
44 sList:TStringList;
45 sTemp:string;
46 begin
47 sTemp :=sWords;
48 sList :=TStringList.Create;
49 sList.CommaText :=StringReplace(sTemp,' ',#13#10,[rfReplaceAll]);
50 for i:=0 to sList.Count -1 do
51 begin
52 for j:=Low(SQLKEY) to High(SQLKEY) do
53 begin
54 if LowerCase(sList[i])=LowerCase(SQLKEY[j].Content) then
55 begin
56 sTemp :=StringReplace(sTemp,sList[i],UpperCase(SQLKEY[j].Content),[rfReplaceAll]);
57 Break;
58 end;
59 end;
60 end;
61 sList.Free;
62 Result :=sTemp;
63 end;


 

相关文章
|
2月前
|
SQL 关系型数据库 MySQL
MySQL - 一文解析 SQL 的执行顺序
MySQL - 一文解析 SQL 的执行顺序
|
4月前
|
SQL 消息中间件 Apache
Apache Calcite—sql执行和解析引擎
Apache Calcite—sql执行和解析引擎
56 0
|
4天前
|
SQL 分布式计算 资源调度
一文解析 ODPS SQL 任务优化方法原理
本文重点尝试从ODPS SQL的逻辑执行计划和Logview中的执行计划出发,分析日常数据研发过程中各种优化方法背后的原理,覆盖了部分调优方法的分析,从知道怎么优化,到为什么这样优化,以及还能怎样优化。
|
1月前
|
SQL 关系型数据库 API
Star 4.7k!高效SQL Parser!纯Python开发!自称目前最快的纯Python SQL解析器!
Star 4.7k!高效SQL Parser!纯Python开发!自称目前最快的纯Python SQL解析器!
|
2月前
|
SQL JSON Apache
Flink SQL问题之复杂JSON解析如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
401 0
|
4月前
|
SQL 数据采集 Java
Java【代码分享 02】商品全部分类数据获取(建表语句+Jar包依赖+树结构封装+获取及解析源代码)包含csv和sql格式数据下载可用
Java【代码分享 02】商品全部分类数据获取(建表语句+Jar包依赖+树结构封装+获取及解析源代码)包含csv和sql格式数据下载可用
41 0
|
4月前
|
SQL JSON 关系型数据库
【SQL编程】MySQL 5.7.28 版本使用 SQL 直接解析 JSON 字符串(判断是否是合法JSON类型+文本深度+文本长度+值类型+keys获取+值获取+不同深度数据获取)
【SQL编程】MySQL 5.7.28 版本使用 SQL 直接解析 JSON 字符串(判断是否是合法JSON类型+文本深度+文本长度+值类型+keys获取+值获取+不同深度数据获取)
54 0
|
4月前
|
SQL 数据库
SQL FULL OUTER JOIN 关键字:左右表中所有记录的全连接解析
SQL RIGHT JOIN关键字返回右表(table2)中的所有记录以及左表(table1)中的匹配记录。如果没有匹配,则左侧的结果为0条记录。
65 0
|
4月前
|
SQL XML Java
掌握MyBatis动态SQL:从标签到实战的全面解析
掌握MyBatis动态SQL:从标签到实战的全面解析
274 0
|
4月前
|
SQL JSON Apache
Apache Flink SQL目前还不支持直接解析JSON字符串并将其转换为预期的数据类型
Apache Flink SQL目前还不支持直接解析JSON字符串并将其转换为预期的数据类型
157 1

推荐镜像

更多