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;


 

相关文章
|
8月前
|
SQL 数据可视化 关系型数据库
MCP与PolarDB集成技术分析:降低SQL门槛与简化数据可视化流程的机制解析
阿里云PolarDB与MCP协议融合,打造“自然语言即分析”的新范式。通过云原生数据库与标准化AI接口协同,实现零代码、分钟级从数据到可视化洞察,打破技术壁垒,提升分析效率99%,推动企业数据能力普惠化。
701 3
|
SQL 安全 关系型数据库
SQL注入之万能密码:原理、实践与防御全解析
本文深入解析了“万能密码”攻击的运行机制及其危险性,通过实例展示了SQL注入的基本原理与变种形式。文章还提供了企业级防御方案,包括参数化查询、输入验证、权限控制及WAF规则配置等深度防御策略。同时,探讨了二阶注入和布尔盲注等新型攻击方式,并给出开发者自查清单。最后强调安全防护需持续改进,无绝对安全,建议使用成熟ORM框架并定期审计。技术内容仅供学习参考,严禁非法用途。
1883 0
|
SQL 存储 自然语言处理
SQL的解析和优化的原理:一条sql 执行过程是什么?
SQL的解析和优化的原理:一条sql 执行过程是什么?
SQL的解析和优化的原理:一条sql 执行过程是什么?
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
4783 11
|
SQL IDE 数据库连接
IntelliJ IDEA处理大文件SQL:性能优势解析
在数据库开发和管理工作中,执行大型SQL文件是一个常见的任务。传统的数据库管理工具如Navicat在处理大型SQL文件时可能会遇到性能瓶颈。而IntelliJ IDEA,作为一个强大的集成开发环境,提供了一些高级功能,使其在执行大文件SQL时表现出色。本文将探讨IntelliJ IDEA在处理大文件SQL时的性能优势,并与Navicat进行比较。
354 4
|
SQL Java 数据库连接
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
|
SQL 监控 数据库
SQL语句是否都需要解析及其相关技巧和方法
在数据库管理中,SQL(结构化查询语言)语句的使用无处不在,它们负责数据的查询、插入、更新和删除等操作
|
SQL 监控 安全
员工上网行为监控软件:SQL 在数据查询监控中的应用解析
在数字化办公环境中,员工上网行为监控软件对企业网络安全和管理至关重要。通过 SQL 查询和分析数据库中的数据,企业可以精准了解员工的上网行为,包括基础查询、复杂条件查询、数据统计与分析等,从而提高网络管理和安全防护的效率。
364 0
|
SQL 数据可视化 BI
SQL语句及查询结果解析:技巧与方法
在数据库管理和数据分析中,SQL语句扮演着至关重要的角色
1934 0
|
SQL 监控 关系型数据库
SQL错误代码1303解析与处理方法
在SQL编程和数据库管理中,遇到错误代码是常有的事,其中错误代码1303在不同数据库系统中可能代表不同的含义

推荐镜像

更多
  • DNS