CN110018829A - 提高pl/sql语言解释器执行效率的方法及装置 - Google Patents
提高pl/sql语言解释器执行效率的方法及装置 Download PDFInfo
- Publication number
- CN110018829A CN110018829A CN201910255875.9A CN201910255875A CN110018829A CN 110018829 A CN110018829 A CN 110018829A CN 201910255875 A CN201910255875 A CN 201910255875A CN 110018829 A CN110018829 A CN 110018829A
- Authority
- CN
- China
- Prior art keywords
- expression formula
- syntax tree
- executable
- sql language
- calculating
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/425—Lexical analysis
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供一种提高PL/SQL语言解释器执行效率的方法及装置,所述方法包括:对PL/SQL语言源代码进行词法分析,对词法分析产生的单词token逐一进行语法语义分析,获得符合语法语义规则的结果信息;对所述符合语法语义规则的结果信息中的表达式逐一进行计算因子类型判断,根据计算因子类型判断结果生成可执行语法树对象;通过遍历所述可执行语法树对象执行所述PL/SQL语言源代码中的计算逻辑。本发明实施例提在生成可执行语法树的过程中增加计算因子类型判断,并在可执行语法树的类结构中增加执行接口,无需开发与抽象语法树对应的执行器类,可减少执行过程中的分支判断次数,从而提升解释器的执行效率。
Description
技术领域
本发明实施例涉及计算机程序设计技术领域,更具体地,涉及一种提高PL/SQL语言解释器执行效率的方法及装置。
背景技术
解释器是一种计算机程序,能够把高级编程语言逐行解释并运行,每翻译一行程序就立刻运行,然后再翻译下一行,再运行,如此不停地进行下去。目前大多数解释器的实现方法是,通过词法分析、语法分析和语义分析对源代码进行解析,产生抽象语法树,然后创建与抽象语法树结构对应的执行器类,最后,通过遍历抽象语法树实现执行器类计算逻辑。对于PL/SQL(Procedural Language/Structured Query Language)语言,抽象语法树中的语句和表达式种类很丰富,因此,执行器类包含多个执行器子类,执行器子类的种类也很丰富。
现有PL/SQL语言解释器的实现方案是将数据结构与算法分离的方式,即将抽象语法树和执行器类分离,在架构上是低耦合的。由于大多数执行器类都可以计算不止一种类型的抽象语法树,执行器类在实现向下递推的过程中需要对传入的抽象语法树节点的数据类型进行判断,如图1所示为现有技术中加法表达式执行器的判断逻辑示意图。
由于PL/SQL支持的数据类型比较丰富,包括Int、Long、Double、Number、Char、Varchar、Date、Timestamp、Lob、String等10余种基础类型,还支持数组、记录和游标等复合类型,执行器类需进行多次冗余的判断,例如,对于一个双目表达式执行器子类,若实现10种基础数据类型,则需要10*10=100次的判断,若实际传入的表达式类型恰好是最后一个判断分支,则会浪费99次判断的时间,若此表达式处在10万行的游标遍历计算中,则会浪费上千万次的判断时间。判断完成后执行器类才进入正确的计算逻辑。目前这种低耦合的解释器在运行过程中会出现大量冗余判断,执行效率低下。
发明内容
本发明实施例提供一种克服上述问题或者至少部分地解决上述问题的提高PL/SQL语言解释器执行效率的方法及装置。
第一方面,本发明实施例提供一种提高PL/SQL语言解释器执行效率的方法,包括:
对PL/SQL语言源代码进行词法分析,对词法分析产生的单词token逐一进行语法语义分析,获得符合语法语义规则的结果信息;
对所述符合语法语义规则的结果信息中的表达式逐一进行计算因子类型判断,根据计算因子类型判断结果生成可执行语法树对象;
通过遍历所述可执行语法树对象执行所述PL/SQL语言源代码中的计算逻辑。
第二方面,本发明实施例提供一种提高PL/SQL语言解释器执行效率的装置,包括:
解析模块,用于对PL/SQL语言源代码进行词法分析,对词法分析产生的单词token逐一进行语法语义分析,获得符合语法语义规则的结果信息;
可执行语法树生成模块,对所述符合语法语义规则的结果信息中的表达式逐一进行计算因子类型判断,根据计算因子类型判断结果生成可执行语法树对象;
计算逻辑执行模块,通过遍历所述可执行语法树对象执行所述PL/SQL语言源代码中的计算逻辑。
第三方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所提供的提高PL/SQL语言解释器执行效率的方法的步骤。
第四方面,本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所提供的提高PL/SQL语言解释器执行效率的方法的步骤。
本发明实施例提供的提高PL/SQL语言解释器执行效率的方法及装置,在生成可执行语法树的过程中增加计算因子类型判断,并在可执行语法树的类结构中增加执行接口,无需开发与抽象语法树一一对应的执行器类,可减少执行过程中的分支判断次数,从而有效提高解释器的执行效率,并且在功能持续增加,类型持续丰富的开发场景下,新增功能不会影响原功能的执行逻辑,可使开发更加模块化。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中加法表达式执行器的判断逻辑示意图;
图2为本发明实施例提供的提高PL/SQL语言解释器执行效率的方法的流程示意图;
图3为现有技术中抽象语法树的生成过程示意图;
图4为本发明实施例中可执行语法树的生成过程示意图;
图5为现有技术中抽象语法树的结构示意图;
图6为本发明实施例所生成的可执行语法树的结构示意图;
图7为本发明实施例提供的可执行语法树对象所对应的类结构示意图;
图8为本发明实施例提供的赋值语句的可执行语法树遍历过程示意图;
图9为本发明实施例提供的提高PL/SQL语言解释器执行效率的装置的结构示意图;
图10为本发明实施例提供的电子设备的实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图2所示,为本发明实施例提供的提高PL/SQL语言解释器执行效率的方法的流程示意图,包括:
步骤100、对PL/SQL语言源代码进行词法分析,对词法分析产生的单词token逐一进行语法语义分析,获得符合语法语义规则的结果信息;
具体地,PL/SQL语言解释器通常包括:词法分析单元(lexer)、语法分析单元(parser)和执行单元(executor)。其中,词法分析单元用于对源代码(source)进行词法解析,生成单词token;语法分析单元用于对词法分析单元生成的单词token进行语法分析和语义分析,生成抽象语法树(Syntax Tree);执行单元用于创建与抽象语法树节点一一对应的执行器类,实现抽象语法树的计算逻辑。
在本发明实施例中PL/SQL语言解释器中的词法分析单元对源代码进行词法分析,分离出多个单词token。
PL/SQL语言解释器中的语法分析单元对词法分析单元产生的单词token逐一根据语法规则进行语法分析,根据语义规则进行语义分析,获得符合语法语义规则的结果信息。
所述符合语法语义规则的结果信息包括语句(statement)和表达式(expression)。对于PL/SQL语言,语句包括:赋值语句(Assign Statement)、块语句(BlockStatement)、条件判断语句(If Statement和Case When Statement)、变量声明语句(Declare Statement)、循环语句(Loop Statement、While Statement、For Statement)、异常抛出语句(Raise Statement)、异常处理语句(Exception Handle Statement)、游标声明语句(Cursor Declare Statement)、Select Into语句、动态执行语句(ExecuteStatement)等;表达式包括:加法表达式(Add Expression)、减法表达式(SubExpression)、乘法表达式(Multiply Expression)、除法表达式(Div Expression)、大于表达式(Greater Expression)、小于表达式(Less Expression)、等于表达式(EqualExpression)、与表达式(And Expression)、或表达式(Or Expression)、非表达式(NotExpression)、包含表达式(In Expression)、Between And表达式、Case When表达式、变量表达式(Variable Expression)、常量表达式(Constant Expression)等。PL/SQL语言的语句和表达式的种类丰富。
步骤101、对所述符合语法语义规则的结果信息中的表达式逐一进行计算因子类型判断,根据计算因子类型判断结果生成可执行语法树对象;
具体地,PL/SQL语言解释器中的语法分析单元对所述符合语法语义规则的结果信息中的表达式逐一进行计算因子类型判断。
图3为现有技术中抽象语法树的生成过程示意图,现有PL/SQL语言解释器中的语法分析单元直接根据符合语法语义规则的结果信息生成抽象语法树(Syntax Tree)。而在本发明实施例中,在生成抽象语法树之前,语法分析单元要对所述符合语法语义规则的结果信息中的表达式逐一进行计算因子类型判断(factor judgment)。计算因子类型判断是指判断表达式中各计算因子的数据类型,例如,对于加法表达式,加法表达式中存在两个计算因子,判断两个计算因子的数据类型。
然后,根据计算因子类型判断结果,对表达式进行类型细化操作,例如加法表达式,若加法表达式的两个计算因子一个是整型,一个是日期,则将该加法表达式细化为整型加日期表达式(Int Add Date Expression),由于这种表达式各计算因子的数据类型是已知的,在进行计算逻辑时,就不需要再去判断数据类型,而是可以直接执行相应的计算逻辑。在本发明实施例中,将这种已知计算因子数据类型的表达式称为可执行表达式。
对于所述符合语法语义规则的结果信息中的任一表达式,对所述表达式中的各计算因子进行数据类型判断,返回计算因子类型判断结果,并根据所述计算因子类型判断结果对所述表达式进行类型细化操作,获得可执行表达式。
PL/SQL语言解释器中的语法分析单元利用计算因子类型判断结果生成可执行表达式,然后根据所述符合语法语义规则的结果信息中的语句和可执行表达式,生成可执行语法树对象,图4示出了本发明实施例中可执行语法树的生成过程示意图。
图5为现有技术中抽象语法树的结构示意图,图6为本发明实施例所生成的可执行语法树的结构示意图,可执行语法树与抽象语法树一样是具有父节点和子节点的树形结构,不同于抽象语法树的是,可执行语法树中的表达式为可执行表达式,如图6中的Int Addint Expression、Constant int Expression、Int Multiply int Expression等。图6中示出了赋值语句(A:=1+2*3)的可执行语法树的结构是赋值语句(Assign Statement)包含子节点变量表达式(Variable Expression)和加法表达式(Int Add Int Expression),加法表达式包含整型常量表达式(Constant Int Expression)和乘法表达式(Int MultiplyInt Expression),乘法表达式包含两个整型常量表达式(Constant Int Expression)。
可执行语法树在具体实现时,在抽象语法树的基础上,还增加了现有PL/SQL解释器中执行器类的接口。
具体地,如图7所示,为本发明实施例提供的可执行语法树对象所对应的类结构示意图,所述可执行语法树对象所对应的类结构包括:语句子类、可执行表达式子类和执行接口,其中,所述可执行表达式子类为已知计算因子数据类型的表达式子类,所述执行接口包括execute()方法。通过调用这个执行接口就可以开始执行相应的计算逻辑。
步骤102、通过遍历所述可执行语法树对象执行所述PL/SQL语言源代码中的计算逻辑。
由于本发明实施例所创建的可执行语法树包含了执行接口,因此,本发明实施例不需要再创建与抽象语法树对应一致的执行器类,而是可以直接通过遍历可执行语法树对象执行计算逻辑。
具体地,所述PL/SQL语言解释器中的执行单元遍历所述可执行抽象语法树,实现所述PL/SQL语言解释器中执行器类的计算逻辑。从所述可执行语法树对象的根节点开始,调用execute()方法逐层递推到叶子节点进行计算,将叶子节点的计算结果逐层返回给根节点,最后执行根节点的计算逻辑。图8示出了本发明实施例中赋值语句(A:=1+2*3)的可执行语法树遍历过程。图8中,Context是上下文栈,上下文栈是用来记录遍历计算可执行语法树过程中变量表达式的值。
可执行语法树与抽象语法树一样,都由词法解析,语法解析产生。不同的是,可执行语法树类结构进行了数据类型的细化,语法解析过程中会根据不同数据类型的计算因子组合生成对应的表达式子类,因此,在原存在于解释器中的判断逻辑实际上在语法解析阶段已经完成,不需要在执行中再做判断,虽然判断逻辑依然存在,但是解析阶段的判断是只有一次,因此,可以极大地提升解释器的运行效率。另外,可执行语法树集成了原执行单元中的execute()接口,因此,可执行语法树计算逻辑执行无需再依赖原执行单元进行遍历,可执行语法树可以通过直接调用execute()方法递推子树进行计算。
由于PL/SQL语言变量类型及表达式种类丰富,进行类结构细化后,会产生丰富的子类。虽然子类形式丰富,但是不会对开发管理造成困难,反而变得简单了。如IntAddIntExpression类的execute()方法,只需完成整型加法的计算。因此,若开发过程中对数据类型进行增加,无需对IntAddIntExpression进行任何改动,只需再增加类型,实现各自表达式的计算逻辑。
本发明实施例提供的提高PL/SQL语言解释器执行效率的方法,在生成可执行语法树的过程中增加计算因子类型判断,并在可执行语法树的类结构中增加执行接口,无需开发与抽象语法树一一对应的执行器类,可减少执行过程中的分支判断次数,从而有效提高解释器的执行效率,并且在功能持续增加,类型持续丰富的开发场景下,新增功能不会影响原功能的执行逻辑,可使开发更加模块化。
如图9所示,为本发明实施例提供的提高PL/SQL语言解释器执行效率的装置的结构示意图,包括:解析模块901、可执行语法树生成模块902和计算逻辑执行模块903,其中,
解析模块901,用于对PL/SQL语言源代码进行词法分析,对词法分析产生的单词token逐一进行语法语义分析,获得符合语法语义规则的结果信息;
具体地,PL/SQL语言解释器通常包括:词法分析单元、语法分析单元和执行单元。其中,词法分析单元用于对源代码(source)进行词法解析,生成单词token;语法分析单元用于对词法分析单元生成的单词token进行语法分析和语义分析,生成抽象语法树(SyntaxTree);执行单元用于创建与抽象语法树节点一一对应的执行器类,实现抽象语法树的计算逻辑。
在本发明实施例中,解析模块901对PL/SQL语言源代码进行词法分析,分离出多个单词token,然后对单词token逐一根据语法规则进行语法分析,根据语义规则进行语义分析,获得符合语法语义规则的结果信息。
所述符合语法语义规则的结果信息包括语句(statement)和表达式(expression)。对于PL/SQL语言,语句包括:赋值语句(Assign Statement)、块语句(BlockStatement)、条件判断语句(If Statement和Case When Statement)、变量声明语句(Declare Statement)、循环语句(Loop Statement、While Statement、For Statement)、异常抛出语句(Raise Statement)、异常处理语句(Exception Handle Statement)、游标声明语句(Cursor Declare Statement)、Select Into语句、动态执行语句(ExecuteStatement)等;表达式包括:加法表达式(Add Expression)、减法表达式(SubExpression)、乘法表达式(Multiply Expression)、除法表达式(Div Expression)、大于表达式(Greater Expression)、小于表达式(Less Expression)、等于表达式(EqualExpression)、与表达式(And Expression)、或表达式(Or Expression)、非表达式(NotExpression)、包含表达式(In Expression)、Between And表达式、Case When表达式、变量表达式(Variable Expression)、常量表达式(Constant Expression)等。PL/SQL语言的语句和表达式的种类丰富。
可执行语法树生成模块902,对所述符合语法语义规则的结果信息中的表达式逐一进行计算因子类型判断,根据计算因子类型判断结果生成可执行语法树对象;
具体地,可执行语法树生成模块902对所述符合语法语义规则的结果信息中的表达式逐一进行计算因子类型判断。
现有PL/SQL语言解释器中的语法分析单元直接根据符合语法语义规则的结果信息生成抽象语法树(Syntax Tree)。而在本发明实施例中,在生成抽象语法树之前,可执行语法树生成模块902要对所述符合语法语义规则的结果信息中的表达式逐一进行计算因子类型判断(factor judgment)。计算因子类型判断是指判断表达式中各计算因子的数据类型,例如,对于加法表达式,加法表达式中存在两个计算因子,判断两个计算因子的数据类型。
然后,可执行语法树生成模块902根据计算因子类型判断结果,对表达式进行类型细化操作,例如加法表达式,若加法表达式的两个计算因子一个是整型,一个是日期,则将该加法表达式细化为整型加日期表达式(Int Add Date Expression),由于这种表达式各计算因子的数据类型是已知的,在进行计算逻辑时,就不需要再去判断数据类型,而是可以直接执行相应的计算逻辑。在本发明实施例中,将这种已知计算因子数据类型的表达式称为可执行表达式。
可执行语法树生成模块902具体对于所述符合语法语义规则的结果信息中的任一表达式,对所述表达式中的各计算因子进行数据类型判断,返回计算因子类型判断结果,并根据所述计算因子类型判断结果对所述表达式进行类型细化操作,获得可执行表达式。
可执行语法树生成模块902利用计算因子类型判断结果生成可执行表达式,然后根据所述符合语法语义规则的结果信息中的语句和可执行表达式,生成可执行语法树对象,
可执行语法树与抽象语法树一样是具有父节点和子节点的树形结构,不同于抽象语法树的是,可执行语法树中的表达式为可执行表达式。
可执行语法树在具体实现时,在抽象语法树的基础上,增加了现有PL/SQL解释器中执行器类的接口。
所述可执行语法树对象所对应的类结构包括:语句子类、可执行表达式子类和执行接口,其中,所述可执行表达式子类为已知计算因子数据类型的表达式子类,所述执行接口包括execute()方法。通过调用这个执行接口就可以开始执行计算逻辑。
计算逻辑执行模块903,通过遍历所述可执行语法树对象执行所述PL/SQL语言源代码中的计算逻辑。
由于本发明实施例可执行语法树生成模块902所创建可执行语法树包含了执行接口,因此,计算逻辑执行模块903不需要再创建与抽象语法树对应一致的执行器类,可以直接通过遍历可执行语法树对象执行计算逻辑。
具体地,计算逻辑执行模块903遍历所述可执行抽象语法树,实现所述PL/SQL语言解释器中执行器类的计算逻辑。从所述可执行语法树对象的根节点开始,调用execute()方法逐层递推到叶子节点进行计算,将叶子节点的计算结果逐层返回给根节点,最后执行根节点的计算逻辑。
本发明实施例提供的提高PL/SQL语言解释器执行效率的装置,通过对符合语法语义规则的结果信息中的表达式进行数据类型判断生成可执行表达式,并在可执行语法树中增加执行接口,无需开发与抽象语法树一一对应的执行器类,可减少执行过程中的分支判断次数,从而有效提高解释器的执行效率,并且在功能持续增加,类型持续丰富的开发场景下,新增功能不会影响原功能的执行逻辑,可使开发更加模块化。
图10为本发明实施例提供的电子设备的实体结构示意图,如图10所示,该电子设备可以包括:处理器(processor)1010、通信接口(Communications Interface)1020、存储器(memory)1030和通信总线1040,其中,处理器1010,通信接口1020,存储器1030通过通信总线1040完成相互间的通信。处理器1010可以调用存储在存储器1030上并可在处理器1010上运行的计算机程序,以执行上述各方法实施例所提供的提高PL/SQL语言解释器执行效率的方法,例如包括:对PL/SQL语言源代码进行词法分析,对词法分析产生的单词token逐一进行语法语义分析,获得符合语法语义规则的结果信息;对所述符合语法语义规则的结果信息中的表达式逐一进行计算因子类型判断,根据计算因子类型判断结果生成可执行语法树对象;通过遍历所述可执行语法树对象执行所述PL/SQL语言源代码中的计算逻辑。
此外,上述的存储器1030中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例提供的提高PL/SQL语言解释器执行效率的方法,例如包括:对PL/SQL语言源代码进行词法分析,对词法分析产生的单词token逐一进行语法语义分析,获得符合语法语义规则的结果信息;对所述符合语法语义规则的结果信息中的表达式逐一进行计算因子类型判断,根据计算因子类型判断结果生成可执行语法树对象;通过遍历所述可执行语法树对象执行所述PL/SQL语言源代码中的计算逻辑。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种提高PL/SQL语言解释器执行效率的方法,其特征在于,包括:
对PL/SQL语言源代码进行词法分析,对词法分析产生的单词token逐一进行语法语义分析,获得符合语法语义规则的结果信息;
对所述符合语法语义规则的结果信息中的表达式逐一进行计算因子类型判断,根据计算因子类型判断结果生成可执行语法树对象;
通过遍历所述可执行语法树对象执行所述PL/SQL语言源代码中的计算逻辑。
2.根据权利要求1所述的方法,其特征在于,所述可执行语法树对象所对应的类结构包括:语句子类、可执行表达式子类和执行接口,其中,所述可执行表达式子类为已知计算因子数据类型的表达式子类,所述执行接口包括execute()方法。
3.根据权利要求1所述的方法,其特征在于,所述对所述符合语法语义规则的结果信息中的表达式逐一进行计算因子类型判断,并根据计算因子类型判断结果生成可执行语法树对象的步骤,具体为:
对于所述符合语法语义规则的结果信息中的任一表达式,对所述表达式中的各计算因子进行数据类型判断,返回计算因子类型判断结果,并根据所述计算因子类型判断结果对所述表达式进行类型细化操作,获得可执行表达式;
根据所述结果信息中的语句和所述可执行表达式生成可执行语法树对象。
4.根据权利要求1所述的方法,其特征在于,所述通过遍历所述可执行语法树对象执行所述PL/SQL语言源代码中的计算逻辑的步骤,具体为:
从所述可执行语法树对象的根节点开始,调用execute()方法逐层递推到叶子节点进行计算,将叶子节点的计算结果逐层返回给根节点,最后执行根节点的计算逻辑。
5.一种提高PL/SQL语言解释器执行效率的装置,其特征在于,包括:
解析模块,用于对PL/SQL语言源代码进行词法分析,对词法分析产生的单词token逐一进行语法语义分析,获得符合语法语义规则的结果信息;
可执行语法树生成模块,对所述符合语法语义规则的结果信息中的表达式逐一进行计算因子类型判断,根据计算因子类型判断结果生成可执行语法树对象;
计算逻辑执行模块,通过遍历所述可执行语法树对象执行所述PL/SQL语言源代码中的计算逻辑。
6.根据权利要求5所述的装置,其特征在于,所述可执行语法树对象所对应的类结构包括:语句子类、可执行表达式子类和执行接口,其中,所述可执行表达式子类为已知计算因子数据类型的表达式子类,所述执行接口包括execute()方法。
7.根据权利要求5所述的装置,其特征在于,所述可执行语法树生成模块具体用于:
对于所述符合语法语义规则的结果信息中的任一表达式,对所述表达式中的各计算因子进行数据类型判断,返回计算因子类型判断结果,并根据所述计算因子类型判断结果对所述表达式进行类型细化操作,获得可执行表达式;
根据所述结果信息中的语句和所述可执行表达式生成可执行语法树对象。
8.根据权利要求5所述的装置,其特征在于,所述计算逻辑执行模块具体用于:
从所述可执行语法树对象的根节点开始,调用execute()方法逐层递推到叶子节点进行计算,将叶子节点的计算结果逐层返回给根节点,最后执行根节点的计算逻辑。
9.一种电子设备,其特征在于,包括:
至少一个处理器;以及
与所述处理器通信连接的至少一个存储器,其中:
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如权利要求1至4任一所述的方法。
10.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如权利要求1至4任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910255875.9A CN110018829B (zh) | 2019-04-01 | 2019-04-01 | 提高pl/sql语言解释器执行效率的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910255875.9A CN110018829B (zh) | 2019-04-01 | 2019-04-01 | 提高pl/sql语言解释器执行效率的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110018829A true CN110018829A (zh) | 2019-07-16 |
CN110018829B CN110018829B (zh) | 2022-11-11 |
Family
ID=67190331
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910255875.9A Active CN110018829B (zh) | 2019-04-01 | 2019-04-01 | 提高pl/sql语言解释器执行效率的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110018829B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110471666A (zh) * | 2019-07-18 | 2019-11-19 | 五八有限公司 | 代码自动转换方法和装置、代码转换器及介质 |
CN110825384A (zh) * | 2019-10-28 | 2020-02-21 | 国电南瑞科技股份有限公司 | 一种基于llvm的st语言编译方法及编译系统和编译器 |
CN111061767A (zh) * | 2019-12-10 | 2020-04-24 | 美林数据技术股份有限公司 | 一种基于内存计算与sql计算的数据处理方法 |
CN111158691A (zh) * | 2019-12-05 | 2020-05-15 | 杭州安恒信息技术股份有限公司 | 实现规则引擎动态化的方法 |
CN111611174A (zh) * | 2020-05-28 | 2020-09-01 | 北京字节跳动网络技术有限公司 | 一种测试数据的构造方法、装置、计算机设备及存储介质 |
CN112270175A (zh) * | 2020-10-29 | 2021-01-26 | 成都四方伟业软件股份有限公司 | 一种基于antlr的复杂报表公式解析方法及装置 |
CN112346730A (zh) * | 2020-11-04 | 2021-02-09 | 星环信息科技(上海)股份有限公司 | 一种中间表示的生成方法、计算机设备及存储介质 |
CN112363727A (zh) * | 2020-11-10 | 2021-02-12 | 中国平安人寿保险股份有限公司 | Sql代码的java转换方法、装置、计算机设备及存储介质 |
CN112579856A (zh) * | 2019-09-30 | 2021-03-30 | 北京国双科技有限公司 | 对爬取控制指令的处理方法及装置 |
CN117057640A (zh) * | 2023-07-26 | 2023-11-14 | 广东优翼航空技术有限公司 | 一种基于解释器对飞行品质进行评估的方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150128114A1 (en) * | 2013-11-07 | 2015-05-07 | Steven Arthur O'Hara | Parser |
CN107515739A (zh) * | 2016-06-16 | 2017-12-26 | 阿里巴巴集团控股有限公司 | 提高代码执行性能的方法及装置 |
CN108664238A (zh) * | 2018-05-21 | 2018-10-16 | 国网河南省电力公司电力科学研究院 | 一种解释型脚本语言c-sub的执行方法及装置 |
CN109255209A (zh) * | 2017-07-13 | 2019-01-22 | 阿里巴巴集团控股有限公司 | 一种数据处理方法、装置、设备和存储介质 |
-
2019
- 2019-04-01 CN CN201910255875.9A patent/CN110018829B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150128114A1 (en) * | 2013-11-07 | 2015-05-07 | Steven Arthur O'Hara | Parser |
CN107515739A (zh) * | 2016-06-16 | 2017-12-26 | 阿里巴巴集团控股有限公司 | 提高代码执行性能的方法及装置 |
CN109255209A (zh) * | 2017-07-13 | 2019-01-22 | 阿里巴巴集团控股有限公司 | 一种数据处理方法、装置、设备和存储介质 |
CN108664238A (zh) * | 2018-05-21 | 2018-10-16 | 国网河南省电力公司电力科学研究院 | 一种解释型脚本语言c-sub的执行方法及装置 |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110471666A (zh) * | 2019-07-18 | 2019-11-19 | 五八有限公司 | 代码自动转换方法和装置、代码转换器及介质 |
CN112579856A (zh) * | 2019-09-30 | 2021-03-30 | 北京国双科技有限公司 | 对爬取控制指令的处理方法及装置 |
CN110825384A (zh) * | 2019-10-28 | 2020-02-21 | 国电南瑞科技股份有限公司 | 一种基于llvm的st语言编译方法及编译系统和编译器 |
CN111158691A (zh) * | 2019-12-05 | 2020-05-15 | 杭州安恒信息技术股份有限公司 | 实现规则引擎动态化的方法 |
CN111158691B (zh) * | 2019-12-05 | 2023-10-13 | 杭州安恒信息技术股份有限公司 | 实现规则引擎动态化的方法 |
CN111061767A (zh) * | 2019-12-10 | 2020-04-24 | 美林数据技术股份有限公司 | 一种基于内存计算与sql计算的数据处理方法 |
CN111611174B (zh) * | 2020-05-28 | 2023-08-11 | 北京火山引擎科技有限公司 | 一种测试数据的构造方法、装置、计算机设备及存储介质 |
CN111611174A (zh) * | 2020-05-28 | 2020-09-01 | 北京字节跳动网络技术有限公司 | 一种测试数据的构造方法、装置、计算机设备及存储介质 |
CN112270175A (zh) * | 2020-10-29 | 2021-01-26 | 成都四方伟业软件股份有限公司 | 一种基于antlr的复杂报表公式解析方法及装置 |
CN112346730A (zh) * | 2020-11-04 | 2021-02-09 | 星环信息科技(上海)股份有限公司 | 一种中间表示的生成方法、计算机设备及存储介质 |
CN112363727A (zh) * | 2020-11-10 | 2021-02-12 | 中国平安人寿保险股份有限公司 | Sql代码的java转换方法、装置、计算机设备及存储介质 |
CN117057640A (zh) * | 2023-07-26 | 2023-11-14 | 广东优翼航空技术有限公司 | 一种基于解释器对飞行品质进行评估的方法及系统 |
CN117057640B (zh) * | 2023-07-26 | 2024-04-12 | 广东优翼航空技术有限公司 | 一种基于解释器对飞行品质进行评估的方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN110018829B (zh) | 2022-11-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110018829A (zh) | 提高pl/sql语言解释器执行效率的方法及装置 | |
CN112100054B (zh) | 一种面向数据管控的程序静态分析方法和系统 | |
US11334692B2 (en) | Extracting a knowledge graph from program source code | |
CN110347719B (zh) | 一种基于大数据的企业外贸风险预警方法及系统 | |
CN106897322B (zh) | 一种数据库和文件系统的访问方法和装置 | |
CN102279738B (zh) | 标识强连通分量的入口和出口的技术 | |
CN110502227B (zh) | 代码补全的方法及装置、存储介质、电子设备 | |
Schaarschmidt et al. | Lift: Reinforcement learning in computer systems by learning from demonstrations | |
CN106293664A (zh) | 代码生成方法及装置 | |
US20210365253A1 (en) | Heterogeneity-agnostic and topology-agnostic data plane programming | |
US11768831B2 (en) | Systems and methods for translating natural language queries into a constrained domain-specific language | |
CN109791492A (zh) | 流水线相关树查询优化器和调度器 | |
CN104102701B (zh) | 一种基于hive的历史数据存档与查询方法 | |
CN107885501A (zh) | 获取Android中组件相互引用关系的方法及装置 | |
CN106547520A (zh) | 一种代码路径分析方法及装置 | |
CN111767217A (zh) | Js单元测试案例生成方法及装置 | |
CN112988163A (zh) | 编程语言智能适配方法、装置、电子设备和介质 | |
CN105511935B (zh) | 资源索引值的获取方法及装置 | |
CN107330014A (zh) | 一种数据表的创建方法与设备 | |
US11573790B2 (en) | Generation of knowledge graphs based on repositories of code | |
CN102929596A (zh) | 代码排查方法和相关装置 | |
CN110333990A (zh) | 数据处理方法以及装置 | |
US20070044080A1 (en) | Structure initializers and complex assignment | |
US11200037B1 (en) | Systems and methods for translation based computing (TBC) with incorporating ontology and pearl schema | |
Dower et al. | ESDL: A simple description language for population-based evolutionary computation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |