CN107291521B - 编译计算机语言的方法和装置 - Google Patents
编译计算机语言的方法和装置 Download PDFInfo
- Publication number
- CN107291521B CN107291521B CN201610200937.2A CN201610200937A CN107291521B CN 107291521 B CN107291521 B CN 107291521B CN 201610200937 A CN201610200937 A CN 201610200937A CN 107291521 B CN107291521 B CN 107291521B
- Authority
- CN
- China
- Prior art keywords
- node
- sequence
- grammar
- compiled
- statement
- 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.)
- Active
Links
Images
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
-
- 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/427—Parsing
Abstract
本发明公开了一种编译计算机语言的方法和装置。其中,该方法包括:依据预设语法检测待编译语句是否存在错误的语法单元;在检测结果为是的情况下,判断语法单元所在的子节点是否为对应的父节点中的可选节点;在判断结果为是的情况下,删除语法单元。本发明解决了由于现有技术中缺少对计算机语言进行容错编译的技术,导致的计算机语言编译效率低的技术问题。
Description
技术领域
本发明涉及计算机技术应用领域,具体而言,涉及一种编译计算机语言的方法和装置。
背景技术
随着计算机语言的广泛运用,计算机语言的编译成为了计算机语言在使用过程中不可或缺的关键步骤,由于人工编写的计算机语言存在主观性,在计算机语言的语法上会出现初始的语法错误,因此如何高效正确的对人工编写的计算机语言进行编译成为了本领域技术人员需要解决的问题。
对计算机语言进行分析,编译,使其从人容易理解的语言变成计算机容易理解的语言,该编译基本过程是将源码变成认证Token序列,然后根据定义的语法grammer变成语法分析树(Parse Tree,简称PST),再经过语义分析变成抽象语法树(Abstract SyntaxTree,简称AST),这样得到的AST就可以被计算机理解了。
但是问题在于,由于被分析编译的源码由工程人员输入,经常有各种错误。对于简单的Token,例如使用了不该使用的字符,现有编译器大部分可以在生成PST阶段可以一定程度的容忍错误,尽量多的编译剩余的源码以便发现更多错误。但是如果出错的地方使其无法转换成对应的AST,因为AST是一个树形的嵌套结构,父节点依赖于所有字节点的正确生成,则会导致整个AST生成阶段无法进行。AST无法生成会导致依赖AST的功能无法使用,例如在编译中很多提示类型错误,在集成开发环境(Integrated DevelopmentEnvironment,简称IDE)中的提示用户可能用到的函数等。
现有技术中对所解析的语言的每一个语法单元进行特殊处理,判断其是否可以被允许进入更进一步的分析。但是工作量大,现实中对于一种计算机语言难以完整实现。依据上述提到的方法尽量生成AST,但是因为工作量太大且容易出错所以现实中难以实现。
针对上述由于现有技术中缺少对计算机语言进行容错编译的技术,导致的计算机语言编译效率低的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种编译计算机语言的方法和装置,以至少解决由于现有技术中缺少对计算机语言进行容错编译的技术,导致的计算机语言编译效率低的技术问题。
根据本发明实施例的一个方面,提供了一种编译计算机语言的方法,包括:依据预设语法检测待编译语句是否存在错误的语法单元;在检测结果为是的情况下,判断语法单元所在的子节点是否为对应的父节点中的可选节点;在判断结果为是的情况下,删除语法单元。
根据本发明实施例的另一方面,还提供了一种编译计算机语言的装置,包括:检测模块,用于依据预设语法检测待编译语句是否存在错误的语法单元;判断模块,用于在检测结果为是的情况下,判断语法单元所在的子节点是否为对应的父节点中的可选节点;第一执行模块,用于在判断结果为是的情况下,删除语法单元。
在本发明实施例中,通过依据预设语法检测待编译语句是否存在错误的语法单元;在检测结果为是的情况下,判断语法单元所在的子节点是否为对应的父节点中的可选节点;在判断结果为是的情况下,删除语法单元,达到了在计算机语言存在多出错误的同时提升编译成功率的目的,从而实现了提升编译效率的技术效果,进而解决了由于现有技术中缺少对计算机语言进行容错编译的技术,导致的计算机语言编译效率低的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是本发明实施例的一种编译计算机语言的方法的计算机终端的硬件结构框图;
图2是根据本发明实施例一的编译计算机语言的方法的流程图;
图3是根据本发明实施例一的简化的SQL中的SELECT语句的目标AST树的结构示意图;
图4是根据本发明实施例一的一种编译计算机语言的方法的流程图;
图5是根据本发明实施例一的另一种编译计算机语言的方法的流程图;
图6是根据本发明实施例一的又一种编译计算机语言的方法的流程图;
图7是根据本发明实施例二的编译计算机语言的装置的结构示意图;
图8是根据本发明实施例二的一种编译计算机语言的装置的结构示意图;
图9是根据本发明实施例二的另一种编译计算机语言的装置的结构示意图;
图10是根据本发明实施例二的又一种编译计算机语言的装置的结构示意图;
图11是根据本发明实施例二的再一种编译计算机语言的装置的结构示意图;
图12是根据本发明实施例二的一种编译计算机语言的装置中第二执行模块的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本申请实施例涉及的技术名词:
语法分析树:Parse Tree,简称PST;
抽象语法树:Abstract Syntax Tree,简称AST。
实施例1
根据本发明实施例,还提供了一种编译计算机语言的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本申请实施例一所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图1是本发明实施例的一种编译计算机语言的方法的计算机终端的硬件结构框图。如图1所示,计算机终端10可以包括一个或多个(图中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输模块106。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储应用软件的软件程序以及模块,如本发明实施例中的编译计算机语言的方法对应的程序指令/模块,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的应用程序的漏洞检测方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
在上述运行环境下,本申请提供了如图2所示的编译计算机语言的方法。图2是根据本发明实施例一的编译计算机语言的方法的流程图。
步骤S202,依据预设语法检测待编译语句是否存在错误的语法单元;
本申请上述步骤S202中,本申请实施例提供的编译计算机语言的方法可以适用于将源码变成Token序列,然后根据定义的语法grammer变成PST,再经过语义分析变成AST的计算机语言编译过程。为了规避现有技术问题中由于一旦PST对应的地方无法转换成AST,会导致整个AST生成阶段无法进行,AST无法生成会导致依赖AST的功能无法使用的问题发生。本申请实施例提供的编译计算机语言的方法中在实现计算机语言编译的过程中,首先,遍历PST计算机语言中是否存在有错误的语法单元。
具体的,假设一条待编译语句,“SELECT userId,userName FROM user t WHEREuserAge>20”,根据预设语法,一条待编译语句中需要包含“Select”,“FROM”和/或“WHERE”部分,由上述提供的待编译语句可知,Select”,“FROM”和“WHERE”中的语义清楚,并且不存在符号错误,且存在语序逻辑,所以在检测待编译语句的过程中,若“Select”,“FROM”和/或“WHERE”没有语法错误,则认为可以生成完整正确的AST,其中,需要说明的是“Select”,“FROM”和/或“WHERE”即,本申请实施例提供的语法单元。
步骤S204,在检测结果为是的情况下,判断语法单元所在的子节点是否为对应的父节点中的可选节点;
基于步骤S202的检测,本申请上述步骤S204中,在检测结果为待编译语句存在错误的语法单元的情况下,先判断该语法单元所在的子节点是否为对应的父节点中的可选节点。其中,基于步骤S202中提到的AST,由于AST是一个树形的嵌套结构,父节点依赖于所有字节点的正确生成,并且,在本申请实施例提供的编译计算机语言的方法中,当可选节点出错时,可以剔除该可选节点对应的语法单元,保障必选节点的正确编译,进而保障AST生成的最大正确AST。即,在判断结果为是的情况下,执行步骤S206;在判断结果为否的情况下,执行步骤S208。
具体的,图3是根据本发明实施例一的简化的SQL中的SELECT语句的目标AST树的结构示意图;如图3所示,目标AST树中所有标有‘?’后缀的节点在其父节点中是可选的,例如,选择语句SelectStatement必须有选择子句序列SelectClause,来源子句序列FromClause,而WHERE子句序列WhereClause不一定有。没有WhereClause时候SelectStatement仍然是正确的,但没有SelectClause和FromClause就不正确,即非法语句。
步骤S206,在判断结果为是的情况下,删除语法单元;
基于步骤S204的判断结果,本申请上述步骤S206中,在判断结果为语法单元所在的子节点是对应父节点中的可选节点的情况下,将删除该语法单元。
具体的,仍旧结合步骤S204中的图3,假设待编译语句中的FROM子句序列中来源别名TableAlias存在错误,在判断该来源别名TableAlias为FROM子句序列中的可选节点的情况下,删除该条件表述序列,编译SelectClause和FromClause中剩余正确的语法单元部分。
此外,图4是根据本发明实施例一的一种编译计算机语言的方法的流程图。如图4所示,当步骤S202依据预设语法检测待编译语句中的语法单元时,即,在检测结果为否的情况下,编译该待编译语句中的语法单元。
由上可知,本申请上述实施例一所提供的方案,通过依据预设语法检测待编译语句是否存在错误的语法单元;在检测结果为是的情况下,判断语法单元所在的子节点是否为对应的父节点中的可选节点;在判断结果为是的情况下,删除语法单元,达到了在计算机语言存在多出错误的同时提升编译成功率的目的,从而实现了提升编译效率的技术效果,进而解决了由于现有技术中缺少对计算机语言进行容错编译的技术,导致的计算机语言编译效率低的技术问题。
可选的,图5是根据本发明实施例一的另一种编译计算机语言的方法的流程图,如图5所示,在步骤S204判断语法单元所在的子节点是否为对应的父节点中的可选节点之后,本申请实施例提供的编译计算机语言的方法还包括:
步骤S208,在判断结果为否的情况下,递归查询父节点是否为对应上一级父节点中的可选节点;
基于步骤S204中的判断结果,本申请上述步骤S208中,在判断结果为语法单元所在的子节点不是对应父节点中的可选节点的情况下,即,该语法单元所在的子节点为对应父节点中的必选节点,将递归查询该语法单元所在的子节点对应的父节点是否为该父节点中的可选节点。
具体的,仍旧结合步骤S204中的图3,假设待编译语句中的WHERE子句序列中的条件表述序列存在错误,如图3所示,该条件表述序列Condition不是WhereCondition中的可选节点,此时需要查询继续查看WhereCondition的父节点WhereCluase是否为可选节点,如图3所示,WhereCondition在WhereCluase中仍然不是可选节点,将查询WhereCluase是否为父节点SelectStatement中的可选节点。
其中,如图3所示,在本申请实施例提供的编译计算机语言的方法中,递归查询父节点是否为对应上一级父节点中的可选节点的方式具体如下:
方式一,查询该语法单元所在的子节点为对应父节点的上一级节点,层层递进查询;
假设当前待编译语句为“SELECT userId,userName FROM user t WHEREuserAge*20”。
由此可见,WhereClause中的Expression存在错误,即,“userAge*20”中的“*”为图3中不可识别标识符。
因此,如图3所示,Expression的父节点为Condition,由于该Condition为必选节点,因此继续查询该Condition的父节点WhereClause。
方式二,查询该语法单元所在的子节点为对应父节点所属分类,查询分类节点处的节点类型。
仍旧以方式一中的举例为例,若WhereClause中的Expression存在错误,则由于Expression为WhereClause中的语法单元,所以直接查询Expression所属的WhereClause是否为可选节点。
结合方式一和方式二,本申请实施例提供的编译计算机语言的方法中以方式一的实现方式为优选方式为例进行说明,以实现本申请实施例提供的编译计算机语言的方法为准,具体不做限定。
步骤S210,在查询结果为是的情况下,删除父节点对应的语法单元,编译待编译语句中剩余正确的语法单元。
基于步骤S208中递归查询父节点是否为对应父节点中的可选节点,本申请上述步骤S210中,在查询结果为该父节点对应的父节点中的可选节点时,删除该父节点对应的语法单元,编译待编译语句中剩余正确的语法单元。
具体的,仍旧以步骤S208中的示例为例,在查询得到WhereCluase是为父节点SelectStatement中的可选节点的情况下,将整个对应WhereClause的部分裁减,其他部分仍然可以生成SelectStatement的合法AST,只是不包含有错的WhereClause,仍然可以用来支持后续所有基于AST的功能。
本申请实施例可以根据语法结构中对于一个AST节点在其父节点中是否是可选的信息,自动的对有错误的PST节点进行裁减,使所有能够生成正确AST的PST还能够生成AST,所有会导致错误AST的节点都被忽略。生成的AST刚好是能够生成的最大正确AST,仍然能够最大的支持基于AST的应用。节点在其父节点中是否可选可以从要分析的计算机语言的语法定义中自动取得,一般的语法定义和编译代码生成器,例如Yacc,Antlr,JFlex等,都可以直接或间接提供此功能。
可选的,待编译语句中的语法单元包括:选择子句序列和来源子句序列,其中,选择子句序列包括:选择列表,选择列表中任意一列均为选择列表中的可选节点;来源子句序列包括:来源表名和/或来源别名,来源别名为来源子句序列中的可选节点。
可选的,在错误的语法单元为选择子句序列中的选择列表的情况下,步骤S204中判断语法单元所在的子节点是否为对应的父节点中的可选节点包括:
Step1,判断选择列表中的每一列是否均存在语法错误;
本申请上述步骤S204中的Step1中,在待编译语句中的选择子句序列中的选择列表存在错误的情况下,判断该选择列表中的每一列是否均存在语法错误。
具体的,结合图3所示,在选择列表中每一列Column1…ColumnN都是可选的,因此需要判断该选择列表中的每一列是否都存在语法错误。在判断结果为是的情况下,执行步骤Step 4,在判断结果为否的情况下,执行步骤Step2和Step3。
Step2,在判断结果为否的情况下,判断选择列表中的至少一列是否存在语法错误;
基于Step1中的判断,本申请上述步骤Step2中,在判断结果为选择列表中的每一列并不全部存在语法错误的情况下,需要判断该选择列表中的至少一列是否存在语法错误。
具体的,结合图3,在假设选择子句序列SelectCluase中的选择列表SelectList中并不是每一列都存在语法错误的情况下,需要判断选择列表SelectList中存在语法错误的列的个数。
Step3,在判断结果为选择列表中的至少一列存在语法错误的情况下,判断选择列表是否为选择子句序列中的可选节点;
基于Step2中的判断,本申请上述步骤Step3中,在判断结果为选择列表中的至少一列存在语法错误的情况下,判断选择列表是否为选择子句序列中的可选节点。
具体的,结合图3,如图3所示,在判断结果为选择列表中的至少一列存在语法错误的情况下,判断选择列表SelectList是否为选择子句序列SelectCluase中的可选节点。
Step4,在判断结果为选择列表中的每一列均存在语法错误的情况下,判定待编译语句为非法语句。
本申请上述步骤Step4中,在判断结果为选择列表中的每一列均存在语法错误的情况下,如果所有列Column都有错,会导致整个SelectStatement都无法正确生成,但也是预期的结果,因为没有选择列表的Select语句就是不合法的。
可选的,图6是根据本发明实施例一的又一种编译计算机语言的方法的流程图,如图6所示,在步骤S208中递归查询父节点是否为对应上一级父节点中的可选节点之后,本申请实施例提供的编译计算机语言的方法还包括:
步骤S209,在查询结果为选择列表为选择子句序列中的必选节点的情况下,编译选择列表中语法正确的列。
本申请上述步骤S209中,在选择子句序列中存在错误的语法单元的情况下,基于步骤S208递归查询父节点是否为对应父节点中的可选节点之后,在查询结果为选择列表为选择子句序列中的必选节点的情况下,编译选择列表中语法正确的列。
具体的,仍旧以上述步骤S204中的示例为例,假设选择列表SelectList中存在错误的列Column,则递归查询该Column的父节点SelectList是否为可选节点,在查询结果为父节点SelectList为父节点SelectCluase中的必选结果的情况下,编译SelectList中语法正确的列。
可选的,在错误的语法单元为来源子句序列中的来源别名的情况下,步骤S204中判断语法单元所在的子节点是否为对应的父节点中的可选节点包括:
Step1,判断来源别名是否为来源子句序列中的可选节点。
本申请上述步骤S204中的Step1中,在错误的语法单元为来源子句序列中的来源别名的情况下,需判断该来源别名是否为来源子句序列中的可选节点。
进一步地,可选的,步骤S206中在判断结果为是的情况下,删除语法单元包括:
Step1,在判断结果为来源别名是来源子句序列中的可选节点的情况下,删除来源别名对应的语法单元,编译待编译语句中剩余正确的语法单元。
基于上述步骤S204的判断,本申请上述步骤S206中的Step1中,在判断结果为来源别名是来源子句序列中的可选节点的情况下,删除来源别名对应的语法单元,编译待编译语句中剩余正确的语法单元。
具体的,如图3所示,该来源别名TableAlias为可选节点,因此删除该来源节点对应的语法单元,编译待编译语句中剩余正确的语法单元。即,假设“SELECT userId,userName FROM user‘@#$%’WHERE userAge>20”;语句中对应Alias的节点‘@#$%’是个非法节点,无法被翻译成正常的Alias AST。此时查看Alias确定其在父节点,也就是Table中,是可选节点。则不生成Alias AST,父节点Table中包含值为’user’的TableName节点,仍然是个合法的AST。语句中其他部分没有任何问题,生成的完整AST树种除了没有Table的Alias,仍然可以用来支持后续所有基于AST的功能。
可选的,待编译语句中的语法单元还包括:第一子句序列,其中,第一子句序列包括:条件表述序列;第一子句序列为待编译语句中的可选节点,条件表述序列为第一子句序列的必选节点。
进一步地,可选的,在待编译语句中条件表述序列中的表述条件错误的情况下,步骤S208中递归查询父节点是否为对应父节点中的可选节点包括:
Step1,查询条件表述序列是否为第一子句序列中的可选节点;
本申请上述步骤S208中的Step1中,在待编译语句中条件表述序列中的表述条件错误的情况下,需要查询该条件表述序列所在的子节点是否为第一子句序列中的可选节点,在查询结果为否的情况下执行步骤Step2。
Step2,在查询结果为否的情况下,查询第一子句序列是否为待编译语句中的可选节点。
基于Step1中的查询,本申请上述步骤Step2中,在查询结果为该条件表述序列不是该第一子句序列中的可选节点的情况下,需要查询第一子句序列是否为待编译语句中的可选节点。
具体的,结合图3,假设存在待编译语句“SELECT userId,userName FROM user tWHERE userAge*20”;其中,语句中对应Condition的节点中关系操作符非法,’*’不是一个可被接受的关系操作符,无法被翻译成正常的AST。此时查看条件表述序列对应的父节点,也就是Condition中,不是可选节点,导致其父节点Condition也不能生成AST,查询Condition在条件表述序列WhereCondition中是否可选,若是必选节点,则继续查看条件表述序列WhereCondition的父节点第一子句序列WhereCluase,查询该条件表述序列WhereCondition在第一子句序列WhereCluase中是否为可选节点,在查询结果为是的情况下,则继续查看第一子句序列WhereCluase在父节点SelectStatement中是否为可选节点。
进一步地,可选的,步骤S210中删除父节点对应的语法单元,编译待编译语句中剩余正确的语法单元包括:
Step1,删除第一子句序列对应的语法单元,编译待编译语句中剩余正确的语法单元。
本申请上述步骤S210中的Step1中,在查询结果为该父节点为该父节点对应父节点中的可选节点的情况下,将删除该第一子句序列对应的语法单元,编译待编译语句中剩余正确的语法单元。
具体的,仍旧以上述步骤S208中的Step1和Step2中的示例为例,在查询得到该第一子句序列WhereClause为可选节点,则将整个对应WhereClause的部分裁减,其他部分仍然可以生成SelectStatement的合法AST,只是不包含有错的WhereClause,仍然可以用来支持后续所有基于AST的功能。
结合步骤S202至步骤S210,本申请实施例提供的编译计算机语言的方法中可以包含三种语法错误,具体如下:
1.完全正确的输入源码:
“SELECT userId,userName FROM user t WHERE userAge>20”;
此语句没有任何问题,可生成完整AST树。
2.错误情况一,单一可选节点出错:
“SELECT userId,userName FROM user‘@#$%’WHERE userAge>20”;
语句中对应Alias的节点‘@#$%’是个非法节点,无法被翻译成正常的Alias AST。此时查看Alias确定其在父节点,也就是Table中,是可选节点。则不生成Alias AST,父节点Table中包含值为’user’的TableName节点,仍然是个合法的AST。语句中其他部分没有任何问题,生成的完整AST树种除了没有Table的Alias,仍然可以用来支持后续所有基于AST的功能。
3.错误情况二,单一不可选节点出错:
“SELECT userId,userName FROM user t WHERE userAge*20”;
语句中对应Condition的节点中关系操作符非法,’*’不是一个可被接受的关系操作符,无法被翻译成正常的AST。此时查看其在父节点,也就是Condition中,不是可选节点,导致其父亲节点Condition也不能生成AST,即使其其他节点都没有错误。此时继续查看Condition在其父节点中是否可选,如果可选则裁减此部分的PST,如果不可选递归的查看父节点中是否可选。对于此例,Condition在WhereCondition中不是可选,而是必须项,所以继续查看WhereCondition的父节点WhereCluase,发现WhereCondition在WhereCluase中仍然不是可选节点,则继续查看WhereCondition的父节点SelectStatement,发现可选,则将整个对应WhereClause的部分裁减,其他部分仍然可以生成SelectStatement的合法AST,只是不包含有错的WhereClause,仍然可以用来支持后续所有基于AST的功能。
4.错误情况三,一或多个可选循环节点出错:
“SELECT userId,user@#ame,userAge,&usexxx FROM user t WHERE userAge>20”;
AST中Column1…ColumnN共同组成Select列表,其中任何一个都是可选的,但是最终列表中至少要有一个。此示例语句中对应Column2,Column4节点中有非法字符,无法被翻译成Column的AST。此时查看其父节点,也就是SelectList中,是否还有其他合法的Condition,发现还有Column1,Column3正确,则裁减有错的Column2,Column4,仍然可以包含Column1,Column3的正确SelectList节点。最后仍然可以生成合法的SelectStatement,只是不包含有错的两个Column,仍然可以用来支持后续所有基于AST的功能。此例中,如果所有Column都有错,按照此例与例三种的规则,会导致整个SelectStatement都无法正确生成,但也是预期的结果,因为没有选择列表的Select语句就是不合法的。
综上,综上,本申请实施例提供的编译计算机语言的方法可以应用在对SQL语言的编译器中。也可应用到任何其他计算机语言。本申请实施例提供的编译计算机语言的方法可以用递归的判断AST在其父节点中是否可选,实现对计算机语言的容错分析,降低了编译过程中的工作量,实现对计算机语言的最大化正确编译。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的编译计算机语言的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
实施例2
根据本发明实施例,还提供了一种用于实施上述方法实施例的装置实施例,本申请上述实施例所提供的装置可以在计算机终端上运行。
图7是根据本发明实施例二的编译计算机语言的装置的结构示意图。
如图7所示,该编译计算机语言的装置可以包括:检测模块71、判断模块72、第一执行模块73。
其中,检测模块71,用于依据预设语法检测待编译语句是否存在错误的语法单元;判断模块72,用于在检测结果为是的情况下,判断语法单元所在的子节点是否为对应的父节点中的可选节点;第一执行模块73,用于在判断结果为是的情况下,删除语法单元。
由上可知,本申请上述实施例二所提供的方案,通过依据预设语法检测待编译语句是否存在错误的语法单元;在检测结果为是的情况下,判断语法单元所在的子节点是否为对应的父节点中的可选节点;在判断结果为是的情况下,删除语法单元,达到了在计算机语言存在多出错误的同时提升编译成功率的目的,从而实现了提升编译效率的技术效果,进而解决了由于现有技术中缺少对计算机语言进行容错编译的技术,导致的计算机语言编译效率低的技术问题。
此处需要说明的是,上述检测模块71、判断模块72和第一执行模块73对应于实施例一中的步骤S202至步骤S206,三个模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中,可以通过软件实现,也可以通过硬件实现。
可选的,图8是根据本发明实施例二的一种编译计算机语言的装置的结构示意图,如图8所示,本申请实施例提供的编译计算机语言的装置还包括:查询模块74和第二执行模块75。
其中,查询模块74,用于在判断语法单元所在的子节点是否为对应的父节点中的可选节点之后,在判断结果为否的情况下,递归查询父节点是否为对应上一级父节点中的可选节点;第二执行模块75,用于在查询结果为是的情况下,删除父节点对应的语法单元,编译待编译语句中剩余正确的语法单元。
此处需要说明的是,上述查询模块74和第二执行模块75对应于实施例一中的步骤S208和步骤S210,两个模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中,可以通过软件实现,也可以通过硬件实现。
可选的,待编译语句中的语法单元包括:选择子句序列和来源子句序列,其中,选择子句序列包括:选择列表,选择列表中任意一列均为选择列表中的可选节点;来源子句序列包括:来源表名和/或来源别名,来源别名为来源子句序列中的可选节点。
可选的,图9是根据本发明实施例二的另一种编译计算机语言的装置的结构示意图。如图9所示,判断模块72包括:第一判断单元721、第二判断单元722、第三判断单元723和第四判断单元724。
其中,第一判断单元721,用于在错误的语法单元为选择子句序列中的选择列表的情况下,判断选择列表中的每一列是否均存在语法错误;第二判断单元722,用于在判断结果为否的情况下,判断选择列表中的至少一列是否存在语法错误;第三判断单元723,用于在判断结果为选择列表中的至少一列存在语法错误的情况下,判断选择列表是否为选择子句序列中的可选节点;第四判断单元724,用于在判断结果为选择列表中的每一列均存在语法错误的情况下,判定待编译语句为非法语句。
此处需要说明的是,上述第一判断单元721、第二判断单元722、第三判断单元723和第四判断单元724对应于实施例一中的步骤S204中的Step1至Step4,四个模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中,可以通过软件实现,也可以通过硬件实现。
可选的,图10是根据本发明实施例二的又一种编译计算机语言的装置的结构示意图。如图10所示,本申请实施例提供的编译计算机语言的装置还包括:编译模块76。
其中,编译模块76,用于在递归查询父节点是否为对应上一级父节点中的可选节点之后在查询结果为选择列表为选择子句序列中的必选节点的情况下,编译选择列表中语法正确的列。
此处需要说明的是,上述编译模块76对应于实施例一中的步骤S209,该模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中,可以通过软件实现,也可以通过硬件实现。
可选的,判断模块72包括:第五判断单元。
其中,第五判断单元,用于在错误的语法单元为来源子句序列中的来源别名的情况下,判断来源别名是否为来源子句序列中的可选节点。
此处需要说明的是,上述第五判断单元对应于实施例一中的步骤S204中的Step1,该模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中,可以通过软件实现,也可以通过硬件实现。
可选的,图11是根据本发明实施例二的再一种编译计算机语言的装置的结构示意图。如图11所示,第一执行模块73包括:第一执行单元731。
其中,第一执行单元731,用于在判断结果为来源别名是来源子句序列中的可选节点的情况下,删除来源别名对应的语法单元,编译待编译语句中剩余正确的语法单元。
此处需要说明的是,上述第一执行单元731对应于实施例一中的步骤S206中的Step1,该模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中,可以通过软件实现,也可以通过硬件实现。
可选的,待编译语句中的语法单元还包括:第一子句序列,其中,第一子句序列包括:条件表述序列;第一子句序列为待编译语句中的可选节点,条件表述序列为第一子句序列的必选节点。
可选的,查询模块74包括:第一查询单元和第二查询单元。
其中,第一查询单元,用于在待编译语句中条件表述序列中的表述条件错误的情况下,查询条件表述序列是否为第一子句序列中的可选节点;第二查询单元,用于在查询结果为否的情况下,查询第一子句序列是否为待编译语句中的可选节点。
此处需要说明的是,上述第一查询单元和第二查询单元对应于实施例一中的步骤S208中的Step1和Step2,两个模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中,可以通过软件实现,也可以通过硬件实现。
进一步地,可选的,图12是根据本发明实施例二的一种编译计算机语言的装置中第二执行模块的结构示意图。如图12所示,第二执行模块75包括:第二执行单元751。
其中,第二执行单元751,用于删除第一子句序列对应的语法单元,编译待编译语句中剩余正确的语法单元。
此处需要说明的是,上述第二执行单元751对应于实施例一中的步骤S210中的Step1,该模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中,可以通过软件实现,也可以通过硬件实现。
综上,本申请实施例提供的编译计算机语言的方法可以应用在对SQL语言的编译器中。也可应用到任何其他计算机语言。本申请实施例提供的编译计算机语言的方法可以用递归的判断AST在其父节点中是否可选,实现对计算机语言的容错分析,降低了编译过程中的工作量,实现对计算机语言的最大化正确编译。
实施例3
本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于保存上述实施例一所提供的编译计算机语言的方法所执行的程序代码。
可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:依据预设语法检测待编译语句是否存在错误的语法单元;在检测结果为是的情况下,判断语法单元所在的子节点是否为对应的父节点中的可选节点;在判断结果为是的情况下,删除语法单元。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:在判断结果为否的情况下,递归查询父节点是否为对应上一级父节点中的可选节点;在查询结果为是的情况下,删除父节点对应的语法单元,编译待编译语句中剩余正确的语法单元。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:待编译语句中的语法单元包括:选择子句序列和来源子句序列,其中,选择子句序列包括:选择列表,选择列表中任意一列均为选择列表中的可选节点;来源子句序列包括:来源表名和/或来源别名,来源别名为来源子句序列中的可选节点。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:判断选择列表中的每一列是否均存在语法错误;在判断结果为否的情况下,判断选择列表中的至少一列是否存在语法错误;在判断结果为选择列表中的至少一列存在语法错误的情况下,判断选择列表是否为选择子句序列中的可选节点;在判断结果为选择列表中的每一列均存在语法错误的情况下,判定待编译语句为非法语句。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:在查询结果为选择列表为选择子句序列中的必选节点的情况下,编译选择列表中语法正确的列。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:判断来源别名是否为来源子句序列中的可选节点。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:在判断结果为来源别名是来源子句序列中的可选节点的情况下,删除来源别名对应的语法单元,编译待编译语句中剩余正确的语法单元。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:查询条件表述序列是否为第一子句序列中的可选节点;在查询结果为否的情况下,查询第一子句序列是否为待编译语句中的可选节点。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:删除第一子句序列对应的语法单元,编译待编译语句中剩余正确的语法单元。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (18)
1.一种编译计算机语言的方法,其特征在于,包括:
依据预设语法检测待编译语句是否存在错误的语法单元;
在检测结果为是的情况下,判断所述语法单元所在的子节点是否为对应的父节点中的可选节点;
在判断结果为是的情况下,删除所述语法单元;
在所述判断所述语法单元所在的子节点是否为对应的父节点中的可选节点之后,所述方法还包括:在判断结果为否的情况下,递归查询所述父节点是否为对应上一级父节点中的所述可选节点;在查询结果为是的情况下,删除所述父节点对应的所述语法单元,编译所述待编译语句中剩余正确的语法单元。
2.根据权利要求1所述的方法,其特征在于,所述待编译语句中的语法单元包括:选择子句序列和来源子句序列,其中,所述选择子句序列包括:选择列表,所述选择列表中任意一列均为所述选择列表中的所述可选节点;所述来源子句序列包括:来源表名和/或来源别名,所述来源别名为所述来源子句序列中的所述可选节点。
3.根据权利要求2所述的方法,其特征在于,在所述错误的语法单元为所述选择子句序列中的所述选择列表的情况下,所述判断所述语法单元所在的子节点是否为对应的父节点中的可选节点包括:
判断所述选择列表中的每一列是否均存在语法错误;
在判断结果为否的情况下,判断所述选择列表中的至少一列是否存在语法错误;
在判断结果为所述选择列表中的至少一列存在语法错误的情况下,判断所述选择列表是否为所述选择子句序列中的所述可选节点;
在判断结果为所述选择列表中的每一列均存在语法错误的情况下,判定所述待编译语句为非法语句。
4.根据权利要求3所述的方法,其特征在于,在所述递归查询所述父节点是否为对应上一级父节点中的所述可选节点之后,所述方法还包括:
在查询结果为所述选择列表为所述选择子句序列中的必选节点的情况下,编译所述选择列表中语法正确的列。
5.根据权利要求2所述的方法,其特征在于,在所述错误的语法单元为所述来源子句序列中的所述来源别名的情况下,所述判断所述语法单元所在的子节点是否为对应的父节点中的可选节点包括:
判断所述来源别名是否为所述来源子句序列中的所述可选节点。
6.根据权利要求5所述的方法,其特征在于,所述在判断结果为是的情况下,删除所述语法单元包括:
在判断结果为所述来源别名是所述来源子句序列中的所述可选节点的情况下,删除所述来源别名对应的语法单元,编译所述待编译语句中剩余正确的语法单元。
7.根据权利要求2所述的方法,其特征在于,所述待编译语句中的语法单元还包括:第一子句序列,其中,所述第一子句序列包括:条件表述序列;所述第一子句序列为所述待编译语句中的可选节点,所述条件表述序列为所述第一子句序列的必选节点。
8.根据权利要求7所述的方法,其特征在于,在所述待编译语句中所述条件表述序列中的表述条件错误的情况下,所述递归查询所述父节点是否为对应上一级父节点中的所述可选节点包括:
查询所述条件表述序列是否为所述第一子句序列中的所述可选节点;
在查询结果为否的情况下,查询所述第一子句序列是否为所述待编译语句中的所述可选节点。
9.根据权利要求8所述的方法,其特征在于,所述删除所述父节点对应的所述语法单元,编译所述待编译语句中剩余正确的语法单元包括:
删除所述第一子句序列对应的所述语法单元,编译所述待编译语句中剩余正确的语法单元。
10.一种编译计算机语言的装置,其特征在于,包括:
检测模块,用于依据预设语法检测待编译语句是否存在错误的语法单元;
判断模块,用于在检测结果为是的情况下,判断所述语法单元所在的子节点是否为对应的父节点中的可选节点;
第一执行模块,用于在判断结果为是的情况下,删除所述语法单元;
所述装置包括:查询模块,用于在所述判断所述语法单元所在的子节点是否为对应的父节点中的可选节点之后,在判断结果为否的情况下,递归查询所述父节点是否为对应上一级父节点中的所述可选节点;第二执行模块,用于在查询结果为是的情况下,删除所述父节点对应的所述语法单元,编译所述待编译语句中剩余正确的语法单元。
11.根据权利要求10所述的装置,其特征在于,所述待编译语句中的语法单元包括:选择子句序列和来源子句序列,其中,所述选择子句序列包括:选择列表,所述选择列表中任意一列均为所述选择列表中的所述可选节点;所述来源子句序列包括:来源表名和/或来源别名,所述来源别名为所述来源子句序列中的所述可选节点。
12.根据权利要求11所述的装置,其特征在于,所述判断模块包括:
第一判断单元,用于在所述错误的语法单元为所述选择子句序列中的所述选择列表的情况下,判断所述选择列表中的每一列是否均存在语法错误;
第二判断单元,用于在判断结果为否的情况下,判断所述选择列表中的至少一列是否存在语法错误;
第三判断单元,用于在判断结果为所述选择列表中的至少一列存在语法错误的情况下,判断所述选择列表是否为所述选择子句序列中的所述可选节点;
第四判断单元,用于在判断结果为所述选择列表中的每一列均存在语法错误的情况下,判定所述待编译语句为非法语句。
13.根据权利要求12所述的装置,其特征在于,所述装置还包括:
编译模块,用于在所述递归查询所述父节点是否为对应上一级父节点中的所述可选节点之后,在查询结果为所述选择列表为所述选择子句序列中的必选节点的情况下,编译所述选择列表中语法正确的列。
14.根据权利要求11所述的装置,其特征在于,所述判断模块包括:
第五判断单元,用于在所述错误的语法单元为所述来源子句序列中的所述来源别名的情况下,判断所述来源别名是否为所述来源子句序列中的所述可选节点。
15.根据权利要求14所述的装置,其特征在于,所述第一执行模块包括:
第一执行单元,用于在判断结果为所述来源别名是所述来源子句序列中的所述可选节点的情况下,删除所述来源别名对应的语法单元,编译所述待编译语句中剩余正确的语法单元。
16.根据权利要求11所述的装置,其特征在于,所述待编译语句中的语法单元还包括:第一子句序列,其中,所述第一子句序列包括:条件表述序列;所述第一子句序列为所述待编译语句中的可选节点,所述条件表述序列为所述第一子句序列的必选节点。
17.根据权利要求16所述的装置,其特征在于,所述查询模块包括:
第一查询单元,用于在所述待编译语句中所述条件表述序列中的表述条件错误的情况下,查询所述条件表述序列是否为所述第一子句序列中的所述可选节点;
第二查询单元,用于在查询结果为否的情况下,查询所述第一子句序列是否为所述待编译语句中的所述可选节点。
18.根据权利要求17所述的装置,其特征在于,所述第二执行模块包括:
第二执行单元,用于删除所述第一子句序列对应的所述语法单元,编译所述待编译语句中剩余正确的语法单元。
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610200937.2A CN107291521B (zh) | 2016-03-31 | 2016-03-31 | 编译计算机语言的方法和装置 |
TW106105973A TWI746520B (zh) | 2016-03-31 | 2017-02-22 | 編譯計算機語言的方法和裝置 |
EP17773148.6A EP3438818B1 (en) | 2016-03-31 | 2017-03-23 | Method and device for compiling computer language |
PCT/CN2017/077910 WO2017167118A1 (zh) | 2016-03-31 | 2017-03-23 | 编译计算机语言的方法和装置 |
US16/144,792 US10606568B2 (en) | 2016-03-31 | 2018-09-27 | Method and apparatus for compiling computer language |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610200937.2A CN107291521B (zh) | 2016-03-31 | 2016-03-31 | 编译计算机语言的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107291521A CN107291521A (zh) | 2017-10-24 |
CN107291521B true CN107291521B (zh) | 2020-12-04 |
Family
ID=59962600
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610200937.2A Active CN107291521B (zh) | 2016-03-31 | 2016-03-31 | 编译计算机语言的方法和装置 |
Country Status (5)
Country | Link |
---|---|
US (1) | US10606568B2 (zh) |
EP (1) | EP3438818B1 (zh) |
CN (1) | CN107291521B (zh) |
TW (1) | TWI746520B (zh) |
WO (1) | WO2017167118A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109976760A (zh) * | 2017-12-27 | 2019-07-05 | 北京东土科技股份有限公司 | 一种图形语言的交叉编译方法及交叉编译器 |
US11809839B2 (en) | 2022-01-18 | 2023-11-07 | Robert Lyden | Computer language and code for application development and electronic and optical communication |
CN115830200B (zh) * | 2022-11-07 | 2023-05-12 | 北京力控元通科技有限公司 | 三维模型的生成方法、三维图形的渲染方法、装置及设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101499015A (zh) * | 2009-03-18 | 2009-08-05 | 北京和利时系统工程有限公司 | 一种高级语言转换成其它高级语言的方法及转换器 |
CN103645986A (zh) * | 2013-11-29 | 2014-03-19 | 北京广利核系统工程有限公司 | 一种编译器的可视化语法树的生成方法和重构方法 |
CN105095178A (zh) * | 2014-05-09 | 2015-11-25 | 安徽科大讯飞信息科技股份有限公司 | 实现文本语义容错理解的方法及系统 |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5487147A (en) * | 1991-09-05 | 1996-01-23 | International Business Machines Corporation | Generation of error messages and error recovery for an LL(1) parser |
US5673390A (en) * | 1992-09-03 | 1997-09-30 | International Business Machines Corporation | Method and system for displaying error messages |
GB2366402A (en) * | 2000-08-30 | 2002-03-06 | Ibm | Syntax validation using syntax trees |
JP3690730B2 (ja) * | 2000-10-24 | 2005-08-31 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 構造回復システム、構文解析システム、変換システム、コンピュータ装置、構文解析方法、及び記憶媒体 |
US7254810B2 (en) * | 2002-04-18 | 2007-08-07 | International Business Machines Corporation | Apparatus and method for using database knowledge to optimize a computer program |
US7165238B2 (en) * | 2003-06-06 | 2007-01-16 | Intentional Software Corporation | Method and system for organizing and manipulating nodes by category in a program tree |
US20050198627A1 (en) * | 2004-03-08 | 2005-09-08 | Intel Corporation | Loop transformation for speculative parallel threads |
US7281018B1 (en) * | 2004-05-26 | 2007-10-09 | Microsoft Corporation | Form template data source change |
US7680782B2 (en) * | 2006-10-18 | 2010-03-16 | International Business Machines Corporation | Method to generate semantically valid queries in the XQuery language |
US8516458B2 (en) * | 2008-02-29 | 2013-08-20 | Iti Scotland Limited | System representation and handling techniques |
CN101661543B (zh) * | 2008-08-28 | 2015-06-17 | 西门子(中国)有限公司 | 软件源代码安全漏洞的检测方法及检测装置 |
US9047267B2 (en) * | 2009-04-29 | 2015-06-02 | Nokia Technologies Oy | Method, apparatus, and computer program product for written mathematical expression analysis |
US8572566B2 (en) * | 2010-05-11 | 2013-10-29 | Smartshift Gmbh | Systems and methods for analyzing changes in application code from a previous instance of the application code |
US8359305B1 (en) * | 2011-10-18 | 2013-01-22 | International Business Machines Corporation | Query metadata engine |
CN103019801B (zh) * | 2012-12-20 | 2016-03-23 | 北京航天测控技术有限公司 | 一种应用于高速数字io波形引擎的编译器 |
US9710243B2 (en) * | 2013-11-07 | 2017-07-18 | Eagle Legacy Modernization, LLC | Parser that uses a reflection technique to build a program semantic tree |
US20160124723A1 (en) * | 2014-10-31 | 2016-05-05 | Weixi Ma | Graphically building abstract syntax trees |
KR101694783B1 (ko) * | 2014-11-28 | 2017-01-10 | 주식회사 파수닷컴 | 소스 코드의 오류 검출에 있어서 경보 유형 분류 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체 |
CN105159715B (zh) * | 2015-09-01 | 2018-07-20 | 南京大学 | 一种基于抽象语法树节点变更抽取的Python代码变更提示方法 |
US10042740B2 (en) * | 2015-12-04 | 2018-08-07 | Microsoft Technology Licensing, Llc | Techniques to identify idiomatic code in a code base |
-
2016
- 2016-03-31 CN CN201610200937.2A patent/CN107291521B/zh active Active
-
2017
- 2017-02-22 TW TW106105973A patent/TWI746520B/zh active
- 2017-03-23 WO PCT/CN2017/077910 patent/WO2017167118A1/zh active Application Filing
- 2017-03-23 EP EP17773148.6A patent/EP3438818B1/en active Active
-
2018
- 2018-09-27 US US16/144,792 patent/US10606568B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101499015A (zh) * | 2009-03-18 | 2009-08-05 | 北京和利时系统工程有限公司 | 一种高级语言转换成其它高级语言的方法及转换器 |
CN103645986A (zh) * | 2013-11-29 | 2014-03-19 | 北京广利核系统工程有限公司 | 一种编译器的可视化语法树的生成方法和重构方法 |
CN105095178A (zh) * | 2014-05-09 | 2015-11-25 | 安徽科大讯飞信息科技股份有限公司 | 实现文本语义容错理解的方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
EP3438818B1 (en) | 2021-02-24 |
US20190026087A1 (en) | 2019-01-24 |
EP3438818A4 (en) | 2019-12-18 |
CN107291521A (zh) | 2017-10-24 |
WO2017167118A1 (zh) | 2017-10-05 |
EP3438818A1 (en) | 2019-02-06 |
US10606568B2 (en) | 2020-03-31 |
TW201737119A (zh) | 2017-10-16 |
TWI746520B (zh) | 2021-11-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8806452B2 (en) | Transformation of computer programs and eliminating errors | |
CN110502227B (zh) | 代码补全的方法及装置、存储介质、电子设备 | |
CN103853650A (zh) | 一种模糊测试的测试用例生成方法及装置 | |
CN106295346B (zh) | 一种应用漏洞检测方法、装置及计算设备 | |
CN107291521B (zh) | 编译计算机语言的方法和装置 | |
CN112416962A (zh) | 数据查询方法、装置以及存储介质 | |
US8473504B2 (en) | Stabilized binary differencing | |
CN111475196B (zh) | 编译告警溯源方法、装置、电子设备及计算机可读介质 | |
CN111124480A (zh) | 应用程序包的生成方法、装置、电子设备及存储介质 | |
CN104361040A (zh) | 一种定制查询的方法及装置 | |
CN112130830A (zh) | 接口生成方法、装置及电子设备 | |
CN104899214A (zh) | 一种建立输入建议的数据处理方法和系统 | |
CN111767217A (zh) | Js单元测试案例生成方法及装置 | |
CN112000690B (zh) | 解析结构化操作语句的方法和装置 | |
KR101985309B1 (ko) | 최적화된 높이를 가지는 밸런스드 파스 트리를 생성하는 방법 | |
CN113821496B (zh) | 数据库迁移方法、系统、设备及计算机可读存储介质 | |
CN115982416A (zh) | 一种数据处理方法、装置、可读存储介质及电子设备 | |
CN112579093B (zh) | 一种信息推送方法、装置及相关设备 | |
CN112804315B (zh) | 微应用集成方法及装置 | |
CN113868375A (zh) | 基于结构化查询语言的数据查询方法、装置、设备及存储介质 | |
CN112486499A (zh) | Ts代码中目标节点的查找方法、装置、设备及存储介质 | |
CN107451050B (zh) | 函数获取方法和装置、服务器 | |
CN112084768A (zh) | 一种多轮交互方法、装置及存储介质 | |
JP2016051367A (ja) | データ解析装置、データ解析方法、および、プログラム。 | |
CN102609249A (zh) | 基于可扩展标记语言的可配置菜单实现方法 |
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 |