PL/SQL语言的语法解析方法及装置制造方法及图纸

技术编号:30328457 阅读:40 留言:0更新日期:2021-10-10 00:23
本发明专利技术提供一种PL/SQL语言的语法解析方法及装置,方法通过根据预设语法规则将PL/SQL语言的源脚本切割为token串,并通过parser读取token串;记录token串中出现的源数据库对象,得到元数据组装模块;根据当前语法结构,对parser读取到的token串进行语法检查,通过ID解析器统计需查询元数据信息,生成抽象语法树;根据需查询元数据信息,调用元数据组装模块确定待查询数据库对象;将待查询数据库对象拼接成目标SQL,以通过目标数据库验证待查询数据库对象是否合法;若合法,调用语义检查方法,遍历抽象语法树进行语义检查,得到中间语法树;遍历中间语法树,调用源码解析中间语法树,生成目标语法树的方式,减少了与目标数据库的交互次数,有效地提高了语法解析的效率。有效地提高了语法解析的效率。有效地提高了语法解析的效率。

【技术实现步骤摘要】
PL/SQL语言的语法解析方法及装置


[0001]本专利技术涉及语法解析
,尤其涉及一种PL/SQL语言的语法解析方法及装置。

技术介绍

[0002]语法解析器通常是编译器和解释器的重要组件,主要作用是根据当前解析的语言的语法规则进行语法分析,大多以语法树(syntax tree)或抽象语法树(abstract syntax tree,AST)作为输出。
[0003]目前,大多数的实现方法首先进行词法分析,然后语法解析产生语法树。语法分析parser,不断的从lexer中读取token,根据token串分析当前解析的语言元素,比如变量声明、赋值语句、控制语句等。这时往往会用到符号表栈,符号表栈包含一个或多个符号表,而每个表中又包含多个表项。每个符号表项包含一个一般为标识符token的信息,根据符号表就可以知道出现的token是否已经被定义,以及它的类型、出现的位置等信息。parser基于源语言的语法和语义执行相关动作,如果存在语法或者语义错误,那么给出错误提示,如果不存在错误,那么生成对应的语法树,语法树是源代码的抽象语法结构的树状表示,具有上下层级关系。在Parser阶段按照从上到下依次完成解析,每遇到一个语法结构就会确定当前语法出现的数据库对象是否合法以及类型检查等。
[0004]但是,对于PL/SQL语言,很多时候PL/SQL的脚本比较复杂,会包含很多数据库对象,往往会嵌套调用,如果解析这种脚本,传统的从上到下依次一次性完成解析的话,会浪费很多时间和资源,导致解析的效率相对较低。

技术实现思路

[0005]本专利技术提供一种PL/SQL语言的语法解析方法及装置,用以解决现有技术中语法解析效率低下的缺陷,实现高效地完成语法解析。
[0006]本专利技术提供一种PL/SQL语言的语法解析方法,包括:
[0007]根据预设语法规则将PL/SQL语言的源脚本切割为token串,并通过parser读取所述token串;
[0008]记录所述token串中出现的源数据库对象,得到元数据组装模块;
[0009]根据当前语法结构,对所述parser读取到的token串进行语法检查,通过ID解析器统计需查询元数据信息,生成抽象语法树;
[0010]根据所述需查询元数据信息,调用所述元数据组装模块确定待查询数据库对象;
[0011]将所述待查询数据库对象拼接成目标SQL,以通过目标数据库验证所述待查询数据库对象是否合法;
[0012]若合法,调用语义检查方法,遍历所述抽象语法树进行语义检查,得到中间语法树;
[0013]遍历所述中间语法树,调用源码解析所述中间语法树,生成目标语法树。
[0014]根据本专利技术提供的一种PL/SQL语言的语法解析方法,所述记录所述token串中出现的源数据库对象,得到元数据组装模块,包括:
[0015]记录所述token串中出现的源数据库对象;
[0016]确认所述源数据库对象对应的历史元数据信息;
[0017]对所述历史元数据信息进行组装,得到元数据组装模块。
[0018]根据本专利技术提供的一种PL/SQL语言的语法解析方法,所述对所述历史元数据信息进行组装,得到元数据组装模块,包括:
[0019]确定所述历史元数据信息的属性;
[0020]根据所述历史元数据信息的属性对所述历史元数据信息进行组装,得到元数据组装模块。
[0021]根据本专利技术提供的一种PL/SQL语言的语法解析方法,所述属性包括:column属性、package属性、procedure属性和function属性;
[0022]所述元数据组装模块包括:第一Map集合、第二Map集合、第三Map集合和第四Map集合;
[0023]对应的,所述根据所述历史元数据信息的属性对所述历史元数据信息进行组装,得到元数据组装模块,包括:
[0024]根据所述column属性,对所述历史元数据信息进行组装,得到第一Map集合;
[0025]根据所述package属性,对所述历史元数据信息进行组装,得到第二Map集合;
[0026]根据所述procedure属性,对所述历史元数据信息进行组装,得到第三Map集合;
[0027]根据所述function属性,对所述历史元数据信息进行组装,得到第四Map集合;
[0028]对所述第一Map集合、所述第二Map集合、所述第三Map集合和所述第四Map集合进行组装,得到元数据组装模块。
[0029]根据本专利技术提供的一种PL/SQL语言的语法解析方法,所述通过ID解析器统计需查询元数据信息,包括:
[0030]根据当前语法结构,确定待查询数据库对象的出现位置;
[0031]在所述待查询数据库对象的出现位置,统计需查询元数据信息。
[0032]根据本专利技术提供的一种PL/SQL语言的语法解析方法,所述通过目标数据库验证所述待查询数据库对象是否合法之后,还包括:
[0033]若不合法,则发出错误提示,以通知管理员进行修改。
[0034]根据本专利技术提供的一种PL/SQL语言的语法解析方法,所述调用源码解析所述中间语法树,生成目标语法树,包括:
[0035]确定所述中间语法树的嵌套外部过程和嵌套外部函数,并生成子语法树;
[0036]通过子树连接模块,将所述子语法树与所述中间语法树进行连接,得到目标语法树。
[0037]本专利技术还提供一种PL/SQL语言的语法解析装置,包括:
[0038]切割模块,用于根据预设语法规则将PL/SQL语言的源脚本切割为token串,并通过parser读取所述token串;
[0039]记录模块,用于记录所述token串中出现的源数据库对象,得到元数据组装模块;
[0040]统计模块,用于根据当前语法结构,对所述parser读取到的token串进行语法检
查,通过ID解析器统计需查询元数据信息,生成抽象语法树;
[0041]确定模块,用于根据所述需查询元数据信息,调用所述元数据组装模块确定待查询数据库对象;
[0042]查询模块,用于将所述待查询数据库对象拼接成目标SQL,以通过目标数据库验证所述待查询数据库对象是否合法;
[0043]检查模块,用于若合法,调用语义检查方法,遍历所述抽象语法树进行语义检查,得到中间语法树;
[0044]生成模块,用于遍历所述中间语法树,调用源码解析所述中间语法树,生成目标语法树。
[0045]本专利技术还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述PL/SQL语言的语法解析方法的步骤。
[0046]本专利技术还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述PL/SQL语言的语法解析方法的步骤。
[004本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种PL/SQL语言的语法解析方法,其特征在于,包括:根据预设语法规则将PL/SQL语言的源脚本切割为token串,并通过parser读取所述token串;记录所述token串中出现的源数据库对象,得到元数据组装模块;根据当前语法结构,对所述parser读取到的token串进行语法检查,通过ID解析器统计需查询元数据信息,生成抽象语法树;根据所述需查询元数据信息,调用所述元数据组装模块确定待查询数据库对象;将所述待查询数据库对象拼接成目标SQL,以通过目标数据库验证所述待查询数据库对象是否合法;若合法,调用语义检查方法,遍历所述抽象语法树进行语义检查,得到中间语法树;遍历所述中间语法树,调用源码解析所述中间语法树,生成目标语法树。2.根据权利要求1所述的PL/SQL语言的语法解析方法,其特征在于,所述记录所述token串中出现的源数据库对象,得到元数据组装模块,包括:记录所述token串中出现的源数据库对象;确认所述源数据库对象对应的历史元数据信息;对所述历史元数据信息进行组装,得到元数据组装模块。3.根据权利要求2所述的PL/SQL语言的语法解析方法,其特征在于,所述对所述历史元数据信息进行组装,得到元数据组装模块,包括:确定所述历史元数据信息的属性;根据所述历史元数据信息的属性对所述历史元数据信息进行组装,得到元数据组装模块。4.根据权利要求3所述的PL/SQL语言的语法解析方法,其特征在于,所述属性包括:column属性、package属性、procedure属性和function属性;所述元数据组装模块包括:第一Map集合、第二Map集合、第三Map集合和第四Map集合;对应的,所述根据所述历史元数据信息的属性对所述历史元数据信息进行组装,得到元数据组装模块,包括:根据所述column属性,对所述历史元数据信息进行组装,得到第一Map集合;根据所述package属性,对所述历史元数据信息进行组装,得到第二Map集合;根据所述procedure属性,对所述历史元数据信息进行组装,得到第三Map集合;根据所述function属性,对所述历史元数据信息进行组装,得到第四Map集合;对所述第一Map集合、所述第二Map集合...

【专利技术属性】
技术研发人员:高新亮崔晓远陈武刚黄奇齐
申请(专利权)人:北京东方国信科技股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1