CN112860233A - 目标语法树的生成方法以及相关设备 - Google Patents

目标语法树的生成方法以及相关设备 Download PDF

Info

Publication number
CN112860233A
CN112860233A CN201911194471.XA CN201911194471A CN112860233A CN 112860233 A CN112860233 A CN 112860233A CN 201911194471 A CN201911194471 A CN 201911194471A CN 112860233 A CN112860233 A CN 112860233A
Authority
CN
China
Prior art keywords
tree
grammar
syntax
language
target
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
Application number
CN201911194471.XA
Other languages
English (en)
Other versions
CN112860233B (zh
Inventor
刘志
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Cloud Computing Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201911194471.XA priority Critical patent/CN112860233B/zh
Publication of CN112860233A publication Critical patent/CN112860233A/zh
Application granted granted Critical
Publication of CN112860233B publication Critical patent/CN112860233B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/425Lexical analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages

Abstract

本申请提供了一种目标语法树的生成方法以及相关设备。所述方法,包括:通用语法分析器将输入的语句进行词法分析,从而得到语言单元链,其中,所述语言单元链包括多个语言单元;将所述多个语言单元和所述语法规则树进行匹配,从而生成语法分析栈,其中,所述语法规则树采用树的形式来表示语法规则,所述语法规则描述了所述语言单元链组合起来的规则;结合反射技术对所述语法分析栈进行归约,从而得到目标语法树。上述方法能够有效降低了开发和维护的复杂度。

Description

目标语法树的生成方法以及相关设备
技术领域
本申请涉及编译领域,尤其涉及一种目标语法树的生成方法以及相关设备。
背景技术
编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。
但是,研发人员在长期研究下发现,编译工作的开发和维护的复杂度非常高。
发明内容
为了解决上述问题,本申请提供了一种目标语法树的生成方法以及相关设备,能够有效降低了开发和维护的复杂度。
第一方面,提供了一种目标语法树的生成方法,包括:
通用语法分析器将输入的语句进行词法分析,从而得到语言单元链,其中,所述语言单元链包括多个语言单元;
将所述语言单元链和所述语法规则树进行匹配,从而生成语法分析栈,其中,所述语法规则树采用树的形式来表示语法规则,所述语法规则描述了所述语言单元链组合起来的规则;
结合反射技术对所述语法分析栈进行归约,从而得到目标语法树。
上述方案利用语法规则树和编程语言的反射技术,直接将输入的语句转换成了目标语法树。与先将输入的语句转为抽象语法树,然后,再将抽象语法树转换为目标语法树相比,无需生成抽象语法树,因而能够有效降低了开发和维护的复杂度。
在一些可能的设计中,将所述语言单元链和所述语法规则树进行匹配,从而生成语法分析栈之前,所述方法还包括:
根据目标语法树对象模型生成语法规则树,其中,所述目标语法树对象模型是目标语法树具有的共同特征的抽象。
上述方案中,通用语法分析器自动根据目标语法树对象模型生成语法规则树,与原来的方案中研发人员需要提供语法文件以及目标语法树模型以及语法树转换逻辑相比,只要提供目标语法树对象模型即可,有效减少了开发和维护的复杂度,而且,通用语法分析器自动根据目标语法树对象模型生成语法规则树能够使得目标语法树对象模型和语法规则树是一致的,相关的,因此,不存在要确保语法文件、目标语法树对象模型以及语法树转换逻辑三者一致的问题,进一步降低了开发和维护的复杂度。
在一些可能的设计中,所述目标语法树对象模型是使用具备结构化描述的能力,以及反射构造对象的能力的编程语言编写的。
在一些可能的设计中,所述编程语言包括Java、C++、C#、Python中的一种或者多种。
在一些可能的设计中,所述通用语法分析器为结构化查询语言SQL解析器。
第二方面,提供了一种通用语法分析器,包括:词法分析器以及语法分析器,
所述词法分析器用于将输入的语句进行词法分析,从而得到语言单元链,其中,所述语言单元链包括多个语言单元;
所述语法分析器用于将所述语言单元链和所述语法规则树进行匹配,从而生成语法分析栈,其中,所述语法规则树用于采用树的形式来表示语法规则,所述语法规则描述了所述语言单元链组合起来的规则;
所述语法分析器用于结合反射技术对所述语法分析栈进行归约,从而得到目标语法树。
在一些可能的设计中,所述通用语法分析器还包括语法规则树构造器,
所述语法规则树构造器用于根据目标语法树对象模型生成语法规则树,其中,所述目标语法树对象模型是目标语法树具有的共同特征的抽象。
在一些可能的设计中,所述目标语法树对象模型是使用具备结构化描述的能力,以及反射构造对象的能力的编程语言编写的。
在一些可能的设计中,所述编程语言包括Java、C++、C#、Python中的一种或者多种。
在一些可能的设计中,所述通用语法分析器为SQL解析器。
第三方面,提供了一种计算机可读存储介质,包括指令,当所述指令在服务器上运行时,使得所述服务器执行如上述第一方面任一项所述的方法。
第四方面,提供了一种服务器,包括处理器以及存储器,所述存储器用于存储指令,所述处理器运行所述存储器中的指令执行如第一方面任一项所述的方法。
第五方面,提供了一种计算机程序产品,当所述计算机程序产品被计算机读取并执行时,如第一方面任一项所述的方法将被执行。
附图说明
为了更清楚地说明本申请实施例或背景技术中的技术方案,下面将对本申请实施例或背景技术中所需要使用的附图进行说明。
图1是本申请涉及的一种通用语法分析器的结构示意图;
图2是本申请涉及的一种语法分析的流程示意图;
图3是本申请涉及的一种目标语法树的结构示意图;
图4是本申请提供的一种目标语法树的生成方法的示意图;
图5是本申请提供的一种通用语法分析器的结构示意图;
图6是本申请提供的一种语法规则树的生成方法的示意图;
图7是本申请提供的两种语法规则树的示意图;
图8是本申请提供的一种嵌套的语法规则树的示意图;
图9是将语言单元链和语法规则树匹配的示意图;
图10是本申请提供的一种语法栈的结构示意图;
图11是本申请涉及的一种关系型数据库查询引擎的结构示意图;
图12是本申请提供的一种目标语法树的生成方法的流程示意图;
图13是本申请提供的一种服务器的结构示意图;
图14是本申请提出的另一种服务器的结构示意图。
具体实施方式
参见图1,图1是本申请涉及的一种通用语法分析器的结构示意图。本实施例中的通用语法分析器包括:词法分析器110、语法分析器120以及语法树转换器130。下面将结合图1 所示的通用语法分析器对语法解析过程进行详细的介绍。
语法解析过程,是通用语法分析器根据定义的语法规则(又称语法结构),将输入的语句转换为对应目标语法树的过程。
语法规则描述了语言单元(token)一个接着一个组合起来的规则,通常是采用专门格式 (例如,巴科斯范式)的语法文件进行描述。在一具体的实施例中,通过巴科斯范式描述的个位数加减法表达式语法规则可以如下所示:
<表达式>:=<表达式>+<表达式>
<表达式>:=<表达式>-<表达式>
<表达式>:=<数值>
<数值>:=0|1|2|3|4|5|6|7|8|9。
语句可以是用户输入的。以个位数加减法表达式为例,输入语句可以是“1+2-3”等等。
目标语法树可以是以树的形式表现输入的语句的语法结构。目标语法树是通用语法分析器根据输入的语句解析得到的。以输入语句为“1+2-3”为例,通用语法分析器可以根据输入语句“1+2-3”解析得到如图1所示的目标语法树,该目标语法树表示先将1+2,然后,再将 1+2得到的结果减去3。
语法解析过程一般大致分为两个阶段:词法分析阶段和语法分析阶段。下面将结合图2 进行具体的说明。
在词法分析阶段中,词法分析器110将输入的语句切成语言单元链。例如,输入的语句为“1+2-3”,则可以切成“1”、“+”、“2”、“-”以及“3”。这个阶段只进行分词,并不检查语言单元和语言单元的组合是否构成合法的语法结构,例如,输入的语句为“1++2”,虽然不是一个合法的表达式,但是词法分析阶段依然会将它切成“1”,“+”,“+”和“2”这4个语言单元。
在语法分析阶段中,语法分析器120是将通过词法分析得到的语言单元链,与语法规则进行匹配,并转换成与之相应的抽象语法树,然后,语法树转换器130将抽象语法树转换为如图3所示的目标语法树。转换的过程同时进行语法检查,如果没有找到匹配的语法规则,则说明输入语句是不合法的。
基于现有技术方案,语法规则和目标语法树是单独定义的,语法规则通常是用专门格式 (如巴科斯范式)的语法文件进行描述,而目标语法树是用特定编程语言编写(如Java),语法规则与目标语法树不并产生直接联系。因此,通用语法分析器无法将语句直接转换为目标语法树(TST),而先生成抽象语法树(AST),再通过开发人员编写的抽象语法树(AST) 到目标语法树(TST)的转换逻辑,将抽象语法树(AST)转换为目标语法树(TST)。中间多了一层转换过程,导致整体解析效率并不太高。
另外,上述方案需要开发人员至少需要完成以下几项工作:(1)编写用于描述语法规则的语法文件,(2)编写目标语法树(TST)对象模型,(3)编写抽象语法树(AST)到目标语法树(TST)的转换逻辑。语法文件的格式(如巴科斯范式)不同于一般编程语言(如 Java),需要专门进行学习,通常此类文件格式在集成开发环境(Integrated DevelopmentEnvironment,IDE)支持方面是不太友好的,除了要增加额外的学习成本,开发效率也并不高。除了开发工作量比较大之外,开发人员还需要确保语法文件、目标语法树模型以及语法树转换逻辑三者行为上是完全一致的,这个要求进一步加大了开发和维护的难度。当用户需要增加新的语法规则的时候,开发人员需要根据新需要重复二次开发的过程,所以二次开发过程越复杂,便意味着后期维护的难度也越大。
为了解决上述问题,本申请提出了一种目标语法树的生成方法以及相关设备,能够有效提高整体的解析效率。
参见图4,图4是本申请提供的一种目标语法树的生成方法的示意图。如图4所示,将语句210输入通用语法分析器220,从而得到目标语法树。其中,如图5所示,通用语法分析器220通常包括语法规则树构造器221、词法分析器222以及语法分析器223。通用语法分析器220中存储了语法规则树。
由于目标语法树的生成方法中需要使用到语法规则树,因此,下面将详细介绍语法规则树的生成方法。
参见图6,图6是本申请提供的一种语法规则树的生成方法的示意图。如图6所示,将目标语法树对象模型310输入通用语法分析器220,从而得到语法规则树330。
目标语法树对象模型310可以是目标语法树具有的共同特征的抽象。目标语法树对象模型是使用具备结构化描述的能力,以及,反射构造对象的能力的编程语言编写的。其中,该编程语言可以是C++、C#、Java、Python等等。
在一具体的实施例中,以目标语法树对象模型为JAVA语言编写的加法的构造方法为例。对于加法(PlusExpression)而言,只有一种合法的语法结构,即,“实数(Real)+加号(+) +实数(Real)”。因此,加法的构造方法可以包括必选的实数(Real)、必选的加号(PLUS)以及必选的实数(Real),加法的目标语法树对象模型可以表示为:
Public PlusExpression(
@Required Real real1,
@Required PLUS plus,
@Required Real real2
)。
在一具体的实施例中,以目标语法树对象模型为JAVA语言编写的实数的构造方法为例。对于实数(Real)而言,有两种合法的语法结构,即两种写法:一种是“数字(Number)+小数点(POINT)+数字(Number)”,如“1.02”;另一种是“小数点(POINT)+数字(Number)”,如“.02”。因此,实数的构造方法可以包括可选的数值(Number)、必选的点(POINT)和必选的数值(Number),实数的目标语法树对象模型可以表示为:
Public Real(
@Optional Number integer,
@Required POINT point,
@Required Number decimal
)。
语法规则树330用于采用树的形式来表示语法规则。其中,语法规则描述了语言单元(token)组合起来的规则。对于加法来说,加法只有一种语法规则,即,“实数(Real)+ 加号(+)+实数(Real)”。对于实数来说,实数可以有两种语法规则,即,“实数(<number>) +小数点(.)+实数(<number>)”以及“小数点(.)+实数(<number>2)”。
语法规则树330可以是语法规则树构造器221根据目标语法树对象模型310的参数类型、个数以及顺序等等描述得到的。因此,上述的加法的目标语法树对象模型可以通过转换为如图7中(a)所示的加法的语法规则树。图7中(a)所示的加法的语法规则树包括一个分支,实数“Real”——>加号“+”——>实数“Real”。对于实数来说,实数可以有两种语法规则,即,“实数(<number>)+小数点(.)+实数(<number>)”以及“小数点(.)+实数(<number>2)”。因此,上述的实数的目标语法树对象模型可以转换为如图7中(b)所示的实数的语法规则树。图7中(b)所示的实数的语法规则树包括一个分支,第一个分支为实数“<number>”——>小数点“.”——>实数“<number>”,第二个分支为小数点“.”——>实数“<number>”。
可以理解,上述的目标语法树对象模型310和语法规则树330均是较为简单的,在实际应用中,还可以通过目标语法树对象模型310的嵌套,从而实现复杂的语法规则树330。例如,将加法的目标语法树对象模型和实数的目标语法树对象模型进行嵌套,可以得到如图8 所示的语法规则树。
继续对目标语法树的生成方法进行详细的说明。目标语法树的生成方法大致分为两个阶段:词法分析阶段和语法分析阶段。
在词法分析阶段中,词法分析器222根据语法规则树将输入的语句进行词法分析,从而得到第一语言单元链。其中,第一语言单元链包括多个语言单元。举个例子说明,假设输入的语句为“1.02+2.46”,则通过词法分析得到的第一语言单元链可以是“1”、“.”、“02”、“+”、“2”、“.”以及“46”。其中,“”内的内容为一个语言单元。在语法分析阶段中,语法分析器223将第一语言单元链和语法规则树进行匹配,从而生成语法分析栈,然后,结合反射技术对语法分析栈进行归约,从而得到目标语法树。
参见图9,继续以上述的例子为例详细说明将第一语言单元链和语法规则进行匹配,从而生成语法分析栈的过程。
通用语法分析器220根据第一语言单元链中的第一个语言单元“1”属于“number”类型,查找父节点为根节点的直接或间接以“<number>”开头的语法规则树。以查找的语法规则树为加法的语法规则树为例,通用语法分析器220首先查找加法的语法规则树的根节点 PlusExpression,并查找根节点PlusExpression下的一级子节点Real,因为,一级子节点Real 嵌套了实数的语法规则树,因此,继续查找实数的语法规则树的根节点Real,并查找到根节点Real下的一级子节点为<number>,于是,将<number>压入栈。
通用语法分析器220根据第一语言单元链中的第二个语言单元“.”属于“.”类型,查找父节点为“<number>”节点的直接或间接以“.”节点为后续节点的语法规则树。继续以上述例子为例,通用语法分析器220查找到实数的语法规则树的一级子节点<number>下的二级子节点为“.”节点,于是,将“.”压入栈。
根据第一语言单元链中的第三个语言单元“02”属于“number”类型,查找父节点为“.”节点的直接或间接以“<number>”节点为后续节点的语法规则树。继续以上述例子为例,通用语法分析器220继续查找到实数的语法规则树的二级子节点“.”下的三级子节点为 <number>节点,于是,将<number>压入栈。
由于,通用语法分析器220确定三级子节点<number>为叶子节点,因此,将Real(<number>,”.”,<number>)压入栈,并返回加法的语法规则树。
根据第一语言单元链中的第四个语言单元“+”属于“+”类型,查找父节点为“Real”节点的直接或者间接以“+”节点为后续节点的语法规则树。继续以上述例子为例,通用语法分析器220继续查找到加法的语法规则树的一级子节点“Real”下的二级子节点为“+”节点,于是,将“+”压入栈。
根据第一语言单元链中的第五个语言单元“2”属于“number”类型,查找父节点为“+”节点后续直接或者间接以“<number>”节点为后续节点的语法规则树。继续以上述例子为例,通用语法分析器220继续查找到加法的语法规则树的二级子节点“+”下的三级子节点“Real”,因为,三级子节点Real嵌套了实数的语法规则树,因此,继续查找实数的语法规则树的根节点Real,并查找到根节点Real下的一级子节点为<number>节点,于是,将<number>压入栈。
根据第一语言单元链中的第六个语言单元“.”属于“.”类型,查找父节点为“<number>”节点后续直接或者间接以“.”节点为后续节点的语法规则树。继续以上述例子为例,通用语法分析器220查找到实数的语法规则树的一级子节点“<number>”下的二级子节点为“.”节点,于是,将“.”压入栈。
根据第一语言单元链中的第七个语言单元“46”属于“number”类型,查找父节点为“.”节点后续直接或者间接以“<number>”节点为后续节点的语法规则树。继续以上述例子为例,通用语法分析器220继续查找到实数的语法规则树的二级子节点“.”下的三级子节点为 <number>节点,于是,将<number>压入栈。
通用语法分析器220确定三级子节点<number>为叶子节点,因此,将 Real(<number>,”.”,<number>)压入栈,并返回加法的语法规则树。
通用语法分析器220确定三级子节点<Real>为叶子节点,因此,将PlusExpression(Real,” +”,Real)压入栈。
通过上述步骤,从而得到如图10所示的语法栈。
上述方案需要开发人员只需要完成以下工作:编写目标语法树(TST)对象模型。
上述方案利用语法规则树和编程语言的反射技术,直接将输入的语句转换成了目标语法树。与先将输入的语句转为抽象语法树,然后,再将抽象语法树转换为目标语法树相比,无需生成抽象语法树,因而能够有效降低了开发和维护的复杂度。通用语法分析器自动根据目标语法树对象模型生成语法规则树,与原来的方案中研发人员需要提供语法文件以及目标语法树模型以及语法树转换逻辑相比,只要提供目标语法树对象模型即可,有效减少了开发和维护的复杂度,而且,通用语法分析器自动根据目标语法树对象模型生成语法规则树能够使得目标语法树对象模型和语法规则树是一致的,相关的,因此,不存在要确保语法文件、目标语法树对象模型以及语法树转换逻辑三者一致的问题,进一步降低了开发和维护的复杂度。
本申请可以适用于各种结构化语句的解析场景,例如,结构化查询语言(structured query language,SQL)场景、JavaScript对象表示法(JavaScript ObjectNotation,JSON)场景等等,此处不作具体限定。如图11所示,以关系型数据库查询引擎为例,该引擎通常包括SQL解析器410、SQL分析器420和SQL优化器430三个部分。其中,SQL解析器可以是上述的通用语法分析器220。
参见图12,图12是本申请提出的一种目标语法树的生成方法的流程示意图。本实施方式的目标语法树的生成方法包括如下步骤:
S101:通用语法分析器将输入的语句进行词法分析,从而得到语言单元链。其中,所述语言单元链包括多个语言单元。
S102:通用语法分析器将所述语言单元链和所述语法规则树进行匹配,从而生成语法分析栈。
在一具体的实施例中,所述语法规则树采用树的形式来表示语法规则,所述语法规则描述了所述语言单元链组合起来的规则。对于加法来说,加法只有一种语法规则,即,“实数 (Real)+加号(+)+实数(Real)”。对于实数来说,实数可以有两种语法规则,即,“实数(<number>)+小数点(.)+实数(<number>)”以及“小数点(.)+实数(<number>2)”。
在一具体的实施例中,语法规则树可以是语法规则树构造器根据目标语法树对象模型的参数类型、个数以及顺序等等描述得到的。
在一具体的实施例中,目标语法树对象模型310可以是目标语法树具有的共同特征的抽象。目标语法树对象模型是使用具备结构化描述的能力,以及,反射构造对象的能力的编程语言编写的。
在一具体的实施例中,以目标语法树对象模型为JAVA语言编写的加法的构造方法为例。对于加法(PlusExpression)而言,只有一种合法的语法结构,即,“实数(Real)+加号(+) +实数(Real)”。因此,加法的构造方法可以包括必选的实数(Real)、必选的加号(PLUS)以及必选的实数(Real),加法的目标语法树对象模型可以表示为:
Public PlusExpression(
@Required Real real1,
@Required PLUS plus,
@Required Real real2
)。
在一具体的实施例中,以目标语法树对象模型为JAVA语言编写的实数的构造方法为例。对于实数(Real)而言,有两种合法的语法结构,即两种写法:一种是“数字(Number)+小数点(POINT)+数字(Number)”,如“1.02”;另一种是“小数点(POINT)+数字(Number)”,如“.02”。因此,实数的构造方法可以包括可选的数值(Number)、必选的点(POINT)和必选的数值(Number),实数的目标语法树对象模型可以表示为:
Public Real(
@Optional Number integer,
@Required POINT point,
@Required Number decimal
)。
语法规则树330用于采用树的形式来表示语法规则。其中,语法规则描述了语言单元 (token)组合起来的规则。对于加法来说,加法只有一种语法规则,即,“实数(Real)+ 加号(+)+实数(Real)”。对于实数来说,实数可以有两种语法规则,即,“实数(<number>) +小数点(.)+实数(<number>)”以及“小数点(.)+实数(<number>2)”。
在一具体的实施例中,上述的加法的目标语法树对象模型可以通过转换为如图7中(a) 所示的加法的语法规则树。图7中(a)所示的加法的语法规则树包括一个分支,实数“Real”——>加号“+”——>实数“Real”。对于实数来说,实数可以有两种语法规则,即,“实数(<number>)+小数点(.)+实数(<number>)”以及“小数点(.)+实数(<number>2)”。因此,上述的实数的目标语法树对象模型可以转换为如图7中(b)所示的实数的语法规则树。图7中(b)所示的实数的语法规则树包括一个分支,第一个分支为实数“<number>”——> 小数点“.”——>实数“<number>”,第二个分支为小数点“.”——>实数“<number>”。
在一具体的实施例中,语法分析栈的生成过程可以参见上文,此处不再详细陈述。
S103:通用语法分析器结合反射技术对所述语法分析栈进行归约,从而得到目标语法树。
为了简便起见,此处没有对本实施例的目标语法树的生成方法进行详细的介绍,具体请参见图4至图11以及相关描述。
继续参见图5,图5是本申请提供的一种通用语法分析器的结构示意图。本实施方式的通用语法分析器,包括:词法分析器222以及语法分析器223。
所述词法分析器222用于将输入的语句进行词法分析,从而得到语言单元链,其中,所述语言单元链包括多个语言单元;
所述语法分析器223用于将所述语言单元链和所述语法规则树进行匹配,从而生成语法分析栈,其中,所述语法规则树用于采用树的形式来表示语法规则,所述语法规则描述了所述语言单元链组合起来的规则;
所述语法分析器223用于结合反射技术对所述语法分析栈进行归约,从而得到目标语法树。
可选地,所述通用语法分析器还包括语法规则树构造器221,所述语法规则树构造器用于根据目标语法树对象模型生成语法规则树,其中,所述目标语法树对象模型是目标语法树具有的共同特征的抽象。
可选地,所述目标语法树对象模型是使用具备结构化描述的能力,以及反射构造对象的能力的编程语言编写的。
可选地,所述编程语言包括Java、C++、C#、Python中的一种或者多种。
可选地,所述通用语法分析器为SQL解析器。
为了简便起见,此处没有对本实施例的通用语法分析器进行详细的介绍,具体请参见图 4至图11以及相关描述。
参见图13,图13是本申请提供的一种服务器的结构示意图。本实施方式的服务器可以包括处理器410、存储器420、收发器430以及总线440。
处理器410可以是一个或者多个通用处理器,其中,通用处理器可以是能够处理电子指令的任何类型的设备,包括中央处理器(Central Processing Unit,CPU)、微处理器、微控制器、主处理器、控制器以及专用集成电路(Application Specific IntegratedCircuit,ASIC)等等。处理器410执行各种类型的数字存储指令,例如存储在存储器420中的软件或者固件程序。在一具体的实施例中,处理器410可以是x86处理器等等。处理器410通过物理接口将命令发送给存储器420,以完成存储相关的任务,例如,处理器410可以提供的命令包括读取命令、写入命令、复制命令以及擦除命令等等。所述命令可以指定与存储器420的特定页和块有关的操作。作为一个示例,一个命令可以请求将数据写入到特定物理页,或者,另一个命令可以请求擦除特定物理块。处理器410内可以虚拟出多个虚拟机,每个虚拟机上可以安装相应的操作系统。
存储器420可以包括只读存储器(Read-OnlyMemory,ROM)或者硬盘(Hard DiskDrive, HDD)或固态硬盘(Solid-StateDrive,SSD)。存储器420可以用于存储目标语法树对象模型。
收发器430用于接收和发送数据。
内存450可以是随机存取存储器(Random Access Memory,RAM)、快闪存储器(FlashMemory)等。内存450可以用于存储语法规则树以及目标语法树。
处理器410运行第一存储器中的程序代码,从而执行如下步骤:
处理器410用于将输入的语句进行词法分析,从而得到语言单元链,其中,所述语言单元链包括多个语言单元。
处理器410用于将所述语言单元链和所述语法规则树进行匹配,从而生成语法分析栈,其中,所述语法规则树用于采用树的形式来表示语法规则,所述语法规则描述了所述语言单元链组合起来的规则。
处理器410用于结合反射技术对所述语法分析栈进行归约,从而得到目标语法树。
为了简便起见,此处没有对本实施例的服务器进行详细的介绍,具体请参见图4至图11 以及相关描述。
参见图14,图14是本申请提出的另一种服务器的结构示意图。本实施方式的服务器包括:本实施方式的服务器可以包括第一处理器510、第一存储器520、智能网卡530、总线540 以及内存550。
第一处理器510可以是一个或者多个通用处理器,其中,通用处理器可以是能够处理电子指令的任何类型的设备,包括中央处理器(Central Processing Unit,CPU)、微处理器、微控制器、主处理器、控制器以及专用集成电路(Application Specific IntegratedCircuit,ASIC) 等等。第一处理器510执行各种类型的数字存储指令,例如存储在第一存储器520中的软件或者固件程序。在一具体的实施例中,第一处理器510可以是x86处理器等等。第一处理器 510通过物理接口将命令发送给第一存储器520,以完成存储相关的任务,例如,第一处理器 510可以提供的命令包括读取命令、写入命令、复制命令以及擦除命令等等。所述命令可以指定与第一存储器520的特定页和块有关的操作。作为一个示例,一个命令可以请求将数据写入到特定物理页,或者,另一个命令可以请求擦除特定物理块。第一处理器510内可以虚拟出多个虚拟机,每个虚拟机上可以安装相应的操作系统。
第一存储器520可以包括只读存储器(Read-OnlyMemory,ROM)或者硬盘(HardDisk Drive,HDD)或固态硬盘(Solid-StateDrive,SSD)。第一存储器520可以用于存储目标语法树对象模型等等。
智能网卡530,还被称为网络接口控制器、网络接口卡或者局域网(Local AreaNetwork, LAN)适配器。每块智能网卡530都有一个唯一的MAC地址,是智能网卡530厂家在生产时烧入只读存储芯片中的。智能网卡530包括第二处理器531、第二存储器532以及收发器 533。第二处理器531与第一处理器520相类似,但是,第二处理器531的性能要求可以低于第一处理器520的性能要求。在一具体的实施例中,第二处理器531可以是ARM处理器等等。第二存储器532也可以是快闪存储器、HDD或者SDD,第二存储器532的存储容量可以小于第一存储器520的存储容量。收发器533可以用于接收和发送报文,并将接收到的报文上传给第二处理器531进行处理。智能网卡530还可以包括多个端口,端口可以是粗缆接口、细缆接口和双绞线接口三种接口类型中的任意一种或者多种。
内存550可以是随机存取存储器(Random Access Memory,RAM)、快闪存储器(FlashMemory)等。内存550可以用于存储语法规则树以及目标语法树。
第一处理器510运行第一存储器中的程序代码,从而执行如下步骤:
第一处理器510用于将输入的语句进行词法分析,从而得到语言单元链,其中,所述语言单元链包括多个语言单元;
第一处理器510用于将所述语言单元链和所述语法规则树进行匹配,从而生成语法分析栈,其中,所述语法规则树采用树的形式来表示语法规则,所述语法规则描述了所述语言单元链组合起来的规则;
第一处理器510用于结合反射技术对所述语法分析栈进行归约,从而得到目标语法树。
为了简便起见,此处没有对本实施例的服务器进行详细的介绍,具体请参见图4至图11 以及相关描述。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线) 或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、存储盘、磁带)、光介质(例如,DVD)、或者半导体介质。

Claims (12)

1.一种目标语法树的生成方法,其特征在于,包括:
通用语法分析器将输入的语句进行词法分析,从而得到语言单元链,其中,所述语言单元链包括多个语言单元;
将所述语言单元链和所述语法规则树进行匹配,从而生成语法分析栈,其中,所述语法规则树采用树的形式来表示语法规则,所述语法规则描述了所述语言单元链组合起来的规则;
结合反射技术对所述语法分析栈进行归约,从而得到目标语法树。
2.根据权利要求1所述的方法,其特征在于,将所述语言单元链和所述语法规则树进行匹配,从而生成语法分析栈之前,所述方法还包括:
根据目标语法树对象模型生成语法规则树,其中,所述目标语法树对象模型是目标语法树具有的共同特征的抽象。
3.根据权利要求2所述的方法,其特征在于,所述目标语法树对象模型是使用具备结构化描述的能力,以及反射构造对象的能力的编程语言编写的。
4.根据权利要求3所述的方法,其特征在于,所述编程语言包括Java、C++、C#、Python中的一种或者多种。
5.根据权利要求1至4任一权利要求所述的方法,其特征在于,所述通用语法分析器为结构化查询语言SQL解析器。
6.一种通用语法分析器,其特征在于,包括:词法分析器以及语法分析器,
所述词法分析器用于将输入的语句进行词法分析,从而得到语言单元链,其中,所述语言单元链包括多个语言单元;
所述语法分析器用于将所述语言单元链和所述语法规则树进行匹配,从而生成语法分析栈,其中,所述语法规则树用于采用树的形式来表示语法规则,所述语法规则描述了所述语言单元链组合起来的规则;
所述语法分析器用于结合反射技术对所述语法分析栈进行归约,从而得到目标语法树。
7.根据权利要求6所述的分析器,其特征在于,所述通用语法分析器还包括语法规则树构造器,
所述语法规则树构造器用于根据目标语法树对象模型生成语法规则树,其中,所述目标语法树对象模型是目标语法树具有的共同特征的抽象。
8.根据权利要求7所述的分析器,其特征在于,所述目标语法树对象模型是使用具备结构化描述的能力,以及反射构造对象的能力的编程语言编写的。
9.根据权利要求8所述的分析器,其特征在于,所述编程语言包括Java、C++、C#、Python中的一种或者多种。
10.根据权利要求6至9任一权利要求所述的分析器,其特征在于,所述通用语法分析器为SQL解析器。
11.一种计算机可读存储介质,其特征在于,包括指令,当所述指令在服务器上运行时,使得所述服务器执行如权利要求1至5任一项所述的方法。
12.一种服务器,其特征在于,包括处理器以及存储器,所述存储器用于存储指令,所述处理器运行所述存储器中的指令执行如权利要求1至5任一项所述的方法。
CN201911194471.XA 2019-11-28 2019-11-28 目标语法树的生成方法以及相关设备 Active CN112860233B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911194471.XA CN112860233B (zh) 2019-11-28 2019-11-28 目标语法树的生成方法以及相关设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911194471.XA CN112860233B (zh) 2019-11-28 2019-11-28 目标语法树的生成方法以及相关设备

Publications (2)

Publication Number Publication Date
CN112860233A true CN112860233A (zh) 2021-05-28
CN112860233B CN112860233B (zh) 2024-03-15

Family

ID=75995827

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911194471.XA Active CN112860233B (zh) 2019-11-28 2019-11-28 目标语法树的生成方法以及相关设备

Country Status (1)

Country Link
CN (1) CN112860233B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117217214A (zh) * 2023-09-05 2023-12-12 广州正是网络科技有限公司 C#语法树生成方法、应用、系统、存储介质及电子设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004061651A2 (en) * 2003-01-07 2004-07-22 International Business Machines Corporation A method and system for dynamically creating parsers in a message broker
US20080040496A1 (en) * 2005-01-21 2008-02-14 Huawei Technologies Co., Ltd. Parser for parsing text-coded protocol
FR2925192A1 (fr) * 2007-12-14 2009-06-19 Canon Kk Procede et dispositif de generation d'expressions et de documents
CN103092667A (zh) * 2011-11-01 2013-05-08 镇江华扬信息科技有限公司 基于手机中间件的JavaScript解释器系统
US20140282444A1 (en) * 2013-03-15 2014-09-18 ArtinSoft Corporation Programming language transformations with abstract syntax tree extensions

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004061651A2 (en) * 2003-01-07 2004-07-22 International Business Machines Corporation A method and system for dynamically creating parsers in a message broker
US20080040496A1 (en) * 2005-01-21 2008-02-14 Huawei Technologies Co., Ltd. Parser for parsing text-coded protocol
FR2925192A1 (fr) * 2007-12-14 2009-06-19 Canon Kk Procede et dispositif de generation d'expressions et de documents
CN103092667A (zh) * 2011-11-01 2013-05-08 镇江华扬信息科技有限公司 基于手机中间件的JavaScript解释器系统
US20140282444A1 (en) * 2013-03-15 2014-09-18 ArtinSoft Corporation Programming language transformations with abstract syntax tree extensions

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117217214A (zh) * 2023-09-05 2023-12-12 广州正是网络科技有限公司 C#语法树生成方法、应用、系统、存储介质及电子设备

Also Published As

Publication number Publication date
CN112860233B (zh) 2024-03-15

Similar Documents

Publication Publication Date Title
CN107844294B (zh) 一种高可用的合约执行方法及系统
US9239710B2 (en) Programming language transformations with abstract syntax tree extensions
US8997070B2 (en) Extension mechanism for scripting language compiler
US7219338B2 (en) Multi-language compilation
US9122540B2 (en) Transformation of computer programs and eliminating errors
US20140123119A1 (en) Cobol to bytecode translation
JP5530449B2 (ja) モジュラフォレストオートマトン
CN110554875B (zh) 代码转换方法及装置、电子设备、存储介质
JP5791149B2 (ja) データベース・クエリ最適化のためのコンピュータで実装される方法、コンピュータ・プログラム、およびデータ処理システム
JP5113157B2 (ja) データの記憶及び検索を行うためのシステム及び方法
JP2009535730A (ja) プログラミング言語における式ツリーの深い埋め込みのためのジェネリックインターフェイス
GB2575844A (en) Processing method using binary intermediate representations
CN112988163B (zh) 编程语言智能适配方法、装置、电子设备和介质
CN112860233B (zh) 目标语法树的生成方法以及相关设备
US10416971B2 (en) Method of creating the balanced parse tree having optimized height
CN112000690B (zh) 解析结构化操作语句的方法和装置
CN113467785A (zh) 一种拟态数据库的sql转译方法和系统
US20230113783A1 (en) Cross-platform code conversion method and device
WO2023123111A1 (zh) 编译方法以及用于编译的装置
JP7344259B2 (ja) 深層学習フレームワークにおけるパターン変換方法、装置、電子デバイス、コンピューター記憶媒体およびコンピュータープログラム製品
CN111191106B (zh) Dsl的构建方法、系统、电子设备和介质
CN110737431A (zh) 软件开发方法、开发平台、终端设备及存储介质
US20220075778A1 (en) Transforming operations of a computer program for execution at a database
JP7393404B2 (ja) コンパイル方法、コンパイル装置、電子デバイス、記憶媒体及びプログラム
CN114416050A (zh) Swift代码的处理方法、装置、电子设备及存储介质

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
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20220209

Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province

Applicant after: Huawei Cloud Computing Technology Co.,Ltd.

Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen

Applicant before: HUAWEI TECHNOLOGIES Co.,Ltd.

GR01 Patent grant
GR01 Patent grant