CN110471666A - 代码自动转换方法和装置、代码转换器及介质 - Google Patents

代码自动转换方法和装置、代码转换器及介质 Download PDF

Info

Publication number
CN110471666A
CN110471666A CN201910651844.5A CN201910651844A CN110471666A CN 110471666 A CN110471666 A CN 110471666A CN 201910651844 A CN201910651844 A CN 201910651844A CN 110471666 A CN110471666 A CN 110471666A
Authority
CN
China
Prior art keywords
code
syntax tree
abstract syntax
grammatical representation
semantic modules
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.)
Pending
Application number
CN201910651844.5A
Other languages
English (en)
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.)
Wuba Co Ltd
Original Assignee
Wuba 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 Wuba Co Ltd filed Critical Wuba Co Ltd
Priority to CN201910651844.5A priority Critical patent/CN110471666A/zh
Publication of CN110471666A publication Critical patent/CN110471666A/zh
Pending legal-status Critical Current

Links

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

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)

Abstract

本发明公开了代码自动转换方法和装置、代码转换器及介质。该代码转换方法包括:通过使用编译器,从源代码构建源代码的语义模块相应的抽象语法树;针对一个语义模块的相应抽象语法树,得到该抽象语法树的语法表达;基于得到的一个语义模块的相应抽象语法树的语法表达,依据预先规定的抽象语法树的语法表达与目标代码之间的转换规则,从该抽象语法树生成相应的目标代码语义模块。本发明通过使用编译器为源代码构建抽象语法树,并基于构建的抽象语法树,生成目标代码,由此实现程序代码的自动转换。

Description

代码自动转换方法和装置、代码转换器及介质
技术领域
本发明涉及程序代码转换技术,尤其涉及代码自动转换方法和装置、代码转换器及介质。
背景技术
在业界,对于程序代码自动转换的需求一直很大,却没有出现能够广泛运用的程序代码自动转换解决方案。
通常,实现程序代码转换的方案是:先将程序代码当作普通文本,进行正则分析,识别出其中的“[]”、“;”、”{}”等语言符号,来确定文本内容是语句还是函数调用等语义;然后,通过特定规则,生成相应的目标语言程序代码。
但是,现有技术的这种程序代码转换方***率较低,而且,需要程序开发人员对于待转换的程序语言与目标程序语言都要做词法分析和语法分析。因此,这种方案目前只能用于转换简单的代码,无法广泛应用。
综上可知,亟需一种能够提高程序代码转换的准确率的解决方案。
发明内容
为了解决以上问题之一,本发明提供了一种代码自动转换方法和装置、代码转换器及介质,以提高程序代码转换的准确率。
根据本发明的一个实施例,提供一种代码自动转换方法,包括:抽象语法树构建步骤,其中,通过使用编译器,从源代码构建源代码的语义模块相应的抽象语法树;语法表达解析步骤,其中,针对一个语义模块的相应抽象语法树,得到该抽象语法树的语法表达;转换步骤,其中,基于得到的一个语义模块的相应抽象语法树的语法表达,依据预先规定的抽象语法树的语法表达与目标代码之间的转换规则,从该抽象语法树生成相应的目标代码语义模块。
根据本发明的另一个实施例,提供一种代码自动转换装置,包括:抽象语法树构建部件,被配置用于通过使用编译器件,从源代码构建源代码的语义模块相应的抽象语法树;语法表达解析部件,被配置用于针对一个语义模块的相应抽象语法树,得到该抽象语法树的语法表达;转换部件,被配置用于基于得到的一个语义模块的相应抽象语法树的语法表达,依据预先规定的抽象语法树的语法表达与目标代码之间的转换规则,从该抽象语法树生成相应的目标代码语义模块。
根据本发明的再一个实施例,提供一种代码转换器,包括:处理器;以及存储器,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行上面描述的方法之一。
根据本发明的又一个实施例,提供一种非暂时性机器可读存储介质,其上存储有可执行代码,当所述可执行代码被处理器执行时,使所述处理器执行上面描述的方法之一。
本发明通过使用编译器为源代码构建抽象语法树,并基于构建的抽象语法树,生成目标代码,由此实现程序代码的自动转换。
在本发明中,使用编译器来构建源代码的抽象语法树,得到的语义的准确度比现有技术使用文本识别来确定的语义的准确度高。
进一步地,本发明在抽象语法树的基础上,基于抽象语法树的语义与目标代码之间预定的转换规则,生成目标代码。由于抽象语法树的语义与目标代码之间的转换规则通常要比源代码与目标代码之间的转换规则简单有效得多,因此,基于抽象语法树的语义来生成目标代码的方式得到的目标代码的准确率大大提高。
附图说明
通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的附图标记通常代表相同部件。
图1给出了根据本发明的示例性实施例的代码转换方法的示意性流程图。
图2给出了根据本发明的示例性实施例的代码转换装置的示意性框图。
图3给出了根据本发明的一个示例性实施例的代码转换器的示意性框图。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。这里需要说明的是,本申请中的数字、序号以及附图标记仅是为了方便描述而出现的,对于本发明的步骤、顺序等等均不构成任何限制,除非在说明书中明确指出了步骤的执行有特定的先后顺序。
如前所述,现有技术的程序代码转换方***率较低,而且,需要程序开发人员对于待转换的源程序语言与目标程序语言都要做词法分析和语法分析。针对该问题,本发明提出了一种能够提高程序代码转换的准确率的解决方案。
概括而言,本发明通过使用编译器为源代码的语义模块构建抽象语法树,并基于构建的抽象语法树,生成目标代码的语义模块,由此实现程序代码的自动转换。
以下将描述本发明的具体实施方式。
首先,编译器是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。在本发明中,通过使用编译器来为源代码生成抽象语法树。所使用的编译器可以根据源代码的类型来选择,本发明对此不作任何限制。
举例而言,比如,要转换Objective-C(本文可以简称为“OC”)类型的代码,则可以选择使用Clang来作为编译器,Clang能够将作为源代码的OC代码通过词法分析和语法分析来形成抽象语法树。本发明通过编译器构建的抽象语法树,能够生成出另外类型的程序语言代码(目标代码)。
这里,抽象语法树(Abstract Syntax Tree,AST)是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。之所以称为“抽象语法树”,是因为本领域技术人员都明白,这里的语法并不会表示出真实语法中出现的每一个细节。
下面,以源代码为OC代码,编译器为Clang作为例子,来具体描述本发明的一个示例。
在详细描述本发明的该示例之前,先举例介绍编译器的环境。本领域技术人员可知,若使用Clang作为编译器,可以先为其配置LLVM环境。LLVM是构架编译器的框架***,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间、链接时间、运行时间以及空闲时间,对开发者保持开放,并兼容已有脚本。
LLVM环境搭建之后,可以创建制作XCode插件的项目。在本例中,XCode插件用来将编译器构建的抽象语法树转换为目标代码。
由于环境搭建与制作XCode插件的内容是本领域技术人员公知的技术,并且不涉及本发明的实质,所以在此不做赘述。
下面将参照图1,描述根据本发明的示例性实施例的代码自动转换方法。
首先,在步骤S120,通过使用编译器,从源代码构建源代码的语义模块相应的抽象语法树。
这里,语义模块可以是由语义元素构成的一个功能模块,例如,一个语义模块可以是一个一元运算、二元运算、表达式、常量、if-else、while、{}、switch语句等等。其中,语义元素可以是用于表达语义的最小单位。
举例来说,对于OC代码而言,如前所述,可以针对源代码的语义模块,使用Clang编译器来进行编译,生成该语义模块的抽象语法树。
这里请注意,本发明中是逐个针对语义模块来生成抽象语法树的,而不是针对整个源代码,为整个源代码生成唯一的一个抽象语法树。
具体地,例如,Clang编译器可以通过词法分析,将语义模块中的代码分解成单词和记号,删除注释、空格、制表符等等,并将保留字转化为编译器的内部表示;然后,通过语法分析,基于上述的词法分析产生的单词和记号的物理布局,将其进行组合,转化为抽象语法树。
其中,抽象语法树的节点主要包括三个类:Decl、Stmt、Type。通过节点之间的连接和分布(形成节点、子节点等等),构成一个语义模块的抽象语法树。
然后,在步骤S130,针对一个语义模块的相应抽象语法树,得到该抽象语法树的语法表达。
综上可知,源代码的一个语义模块可以形成一个抽象语法树,抽象语法树上具有节点和子节点,由节点和各子节点共同完成对抽象语法树所对应的该语义模块的语法的描述(本文称为“抽象语法树的语法表达”)。
这里,对抽象语法树进行解析,得到抽象语法树的语法表达。本领域技术人员可知,不同的平台对于抽象语法树进行解析的处理方式可能不同。比如本文上面提到了通过Clang编译器来生成抽象语法树。以该编译器支持的ReactNative代码方式为例,其可以通过例如Babel组件来进行抽象语法树解析。通过这里的解释和实例,本领域技术人员能明白抽象语法树解析的方法和技术,因此本文对此不再赘述。
然后,在步骤S140,基于得到的一个语义模块的相应抽象语法树的语法表达,依据预先规定的抽象语法树的语法表达与目标代码之间的转换规则,从源代码的语义模块相应的抽象语法树生成目标代码的相应语义模块。
在本实施例中,采用的是“基于抽象语法树的语法表达与目标代码之间预定的转换规则”来进行代码转换。这里的转换规则用于规定抽象语法树的各种语法表达与目标代码之间的对应关系,以便针对每个特定的抽象语法树,生成相对应的目标代码。更具体地说,是针对每个特定的与源代码的语义模块对应的抽象语法树,生成相对应的目标代码语义模块。
更具体地,可以基于抽象语法树的节点类型与目标代码之间的预先规定的对应关系,来实现自动代码转换。这里,如上所述,抽象语法树的节点类型包括例如Decl、Stmt、Type等。
综上可知,在本发明中,使用编译器来逐个构建源代码的语义模块的抽象语法树,得到的语义的准确度比现有技术使用文本识别来确定的语义的准确度高。
进一步地,本发明在每个语义模块的抽象语法树的基础上,基于抽象语法树的语法表达与目标代码之间预定的转换规则,生成目标代码。由于抽象语法树的语法表达与目标代码之间的转换规则通常要比源代码与目标代码之间的转换规则简单有效得多,而且,单个语义模块的抽象语法树构建以及从单个语义模块的抽象语法树到目标代码的语义模块之间的转换也比构建整个源代码程序的抽象语法树与从整个源代码程序的抽象语法树到整个目标代码程序的转换要简化和方便、快捷很多,因此,基于抽象语法树的语义来生成目标代码的方式得到的目标代码的速度也大大提高。
此外,对于一个实际应用而言,可能不需要将全部的源代码转化为目标代码,而是只需要转换其中需要的部分,此时更体现出对单个语义模块进行代码转换的必要性。因此,根据本发明的再一个示例性实施例的代码自动转换方法还可以包括如下的步骤S110。
在步骤S110,用于在步骤S120之前,在源代码中查找特征代码,并对查找到的特征代码添加属性标记。
这里,所述的特征代码可以是特定符号或语句等,例如,如果想要转换“if-else”函数构成的语义模块,则可以在源程序代码中查找特征词“if”和“else”,以确定待处理(待转换)语义模块。并且,对查找得到的待处理语义模块添加属性标记,例如为该段语义模块添加__attribute__((deprecated("PHOPatchToFix")))标记,以将其标记为待转换语义模块。
在这种情况下,在步骤S130中,从添加了属性标记的特征代码相应的抽象语法树生成相应的语法表达,并且,在步骤S140中,基于该语法表达,生成相应的目标代码语义模块。
这样,可以仅转换所需的源代码部分,无需对所有的源代码进行转换,简化了转换过程,节约了转换时间,提高了转换效率。
此外,还可以根据实际需要,对得到的目标代码的各语义模块进行拼接或组合,并输出所需的目标代码。因此,根据本发明的再一个示例性实施例的代码自动转换方法还可以包括如下的步骤S150。
在步骤S150,拼接或组合目标代码的相应语义模块并输出。
这里,由于是针对语义模块进行代码的自动转换,因此,需要拼接或组合目标代码的语义模块,以生成所需的目标程序代码。
由此,可以运用输出的目标代码,完成所需的功能。
为了更容易理解,下面将给出更具体的实例来解释或描述上述的内容。
对于步骤S110中的特征代码标记的处理,以需要转换的OC函数为特征代码为例,来举例描述。
首先,可以通过例如遍历源代码的方式,查找需要转换的特征代码,并且,在查找到的特征代码(例如上述的“需要转换的OC函数”)后添加属性标记,例如__attribute__((deprecated("PHOPatchToFix")))。
其中,“deprecated”是该属性标记的类型,“PHOPatchToFix”是该属性标记的名称。这里,给出的属性标记的名称仅是一个示例,不应对本发明构成任何限制。即,可以根据需要,为特征代码的属性标记取任何合适的名称。
另外,添加属性标记的位置不限于在特征代码之后,而是只要能够在后续步骤中准确识别出所添加的属性标记即可。
另外,在步骤S130时,可以通过例如遍历源代码的抽象语法树的方式,针对添加了属性标记的特征代码的抽象语法树,进行所需的语法表达解析处理。
因此,可以通过例如遍历抽象语法树上各节点和子节点的方式,获取信息,识别该语义模块的功能,例如是一元运算、二元运算、语句、表达式、常量、if-else、while、{}、switch等语义模块中的哪一种。识别出语义模块的功能之后,再从抽象语法树得到该语义模块的具体语法表达。
这里,上述的对于抽象语法树的节点和子节点的遍历最好是递归遍历,因为抽象语法树的子节点可能会包含其他节点或子节点(例如用于实现函数之间的调用等)。因此,通过对于抽象语法树上的各节点和子节点的遍历,能够更准确地获知该抽象语法树的语法,便于后续的代码转换。
为了更容易理解上面描述的“针对添加了属性标记的特征代码的抽象语法树,进行所需的语法表达解析处理”的内容,下面将给出更具体的实例来说明。
1)首先,可以遍历源代码对应的所有抽象语法树,以确定这些抽象语法树之中哪些或哪个是添加了属性标记的特征代码的抽象语法树。
例如,可以在用于遍历抽象语法树的VisitDecl(Decl*decl)回调函数中判断作为抽象语法树上的节点的每个Decl类是否是ObjCMethodDecl类型(用于确认是否为函数)。如果是,则继续下一步。
2)判断该节点是否具有属性标记。如果具有,则继续下一步。
3)遍历该节点的属性集合,判断是否存在如上所述的“deprecated”类型的属性。如果是,则继续下一步。
4)获取该节点的“deprecated”类型的属性的消息(getMessage),如果消息名称为上述的“PHOPatchToFix”,则进行下一步。
5)获取该节点的函数名(通过使用例如methodDecl->getSelector().getAsString()方法)及参数列表(通过使用例如for(ObjCMethodDecl::param_iteratorpi=methodDecl->param_begin();pi!=methodDecl->param_end();pi++)方法),并可以将其输出为(例如打印成)“函数名”:function(self,参数,参数)的形式。
由此,确定添加了属性标记的特征代码所对应的抽象语法树,并且还进一步获取了该抽象语法树的语法表达(例如该例子中的该特征代码的函数名和参数列表)。
而对于一个未添加属性标记或者不关心是否添加了属性标记的语义模块而言,下文将基于具体实例来描述步骤S130的“从一个语义模块的抽象语法树得到该语义模块的语法表达”处理。
1)基于步骤1,判断一个抽象语法树的节点ObjCMethodDecl是否有函数体(hasBody)。如果有,则执行下一步。
2)执行处理函数体handelStmt(Stmt*Node)的操作,以判断抽象语法树的各节点和子节点的类型。
不同类型的节点或者子节点,所代表的语法不同。以for循环为例,如果节点或子节点的类型为ForStmt,则执行handelForStmt处理。
3)获取该ForStmt节点的初始值(Node->getInit()),并执行处理函数体handelStmt的操作。
4)获取ForStmt节点的判断条件(Node->getCond()),并执行处理函数体handelStmt的操作。
5)获取ForStmt节点的自增值(Node->getInc()),并执行处理函数体handelStmt。
6)最后,将上面得到的初始值、判断条件、自增值拼接成for(初始值;判断条件;自增值)的形式(可以认为,该形式即该抽象语法树的具体语法表达)。此外,还可以将其输出打印。
由此,可以得到该抽象语法树的具体语法表达,这个语法表达是源代码与目标代码共有的语法表达。
请注意,上面给出的两个实例仅是针对不同类型的语义模块给出的不同的处理方式的例子,这些具体的实现方式可以根据实际需求等进行变化,不应局限于本文给出的例示的处理方式。
然后,如前所述,在步骤S140,基于预先规定的抽象语法树的语法表达与目标代码之间的转换规则,从源代码的语义模块相应的抽象语法树生成目标代码的相应语义模块。
这里,对于转换规则,例如可以针对与OC语言的一元运算、二元运算、语句、表达式、常量、if-else、while、{}、switch等语义模块相对应的、抽象语法树的类型表述,指定在目标语言中的表述。也就是说,编译器能够将源代码的语义模块直接转换成抽象语法树,但是从抽象语法树(每个抽象语法树的具体结构所表达的语法信息)到目标代码的对应,由此实现源代码到目标代码的对应,需要通过转换规则来规定。转换规则的制定原则上由经验丰富的开发人员制定。不过,本发明并不受到这一点的限制,因为将来随着人工智能技术的发展,机器可能也能够完成这个任务。因此,本发明并不关心由谁规定上述的转换规则,而是只要有这样的合适的转换规则即可。
然后,在步骤S150,可以基于该抽象语法树的该语法表达,依照预先规定的转换规则(比如,可以理解为例如抽象语法树的语法或词法表达与目标语言代码的对应关系),将其转换为相应的目标代码语义模块。
此外,还可以通过打印函数或文件输出函数输出转换得到目标代码。
这里,作为本发明的一个具体的实现方式,可以将上述的过程实现为插件的形式。例如,可以将步骤S110-S150或者其中一部分(例如S120-S140)的代码通过LLVM生成Xcode插件,并配置到Xcode中,使插件生效。这部分内容仅涉及本发明的具体实现方式,并不涉及本发明的主旨,因此不再赘述。
图2给出了根据本发明的示例性实施例的代码转换装置的示意性框图。
如图2所示,根据本发明的示例性实施例的代码转换装置1000可以包括抽象语法树构建部件120、语法表达解析部件130、转换部件140。
其中,抽象语法树构建部件120可以被配置用于通过使用编译器件,从源代码构建源代码的语义模块相应的抽象语法树。
语法表达解析部件130可以被配置用于针对一个语义模块的相应抽象语法树,得到该抽象语法树的语法表达。
转换部件140可以被配置用于基于得到的一个语义模块的相应抽象语法树的语法表达,依据预先规定的抽象语法树的语法表达与目标代码之间的转换规则,从该抽象语法树生成相应的目标代码语义模块。
另外,根据本发明的另一个示例性实施例的代码自动转换装置1000还可以包括特征代码标记部件110。
其中,特征代码标记部件110可以被配置用于在源代码中查找特征代码,并对查找到的特征代码添加属性标记。
由此,语法表达解析部件130可以从添加了属性标记的特征代码相应的抽象语法树生成相应的语法表达,并且,转换部件140可以基于该语法表达,生成相应的目标代码语义模块。
另外,根据本发明的再一个示例性实施例的代码自动转换装置1000还可以包括输出部件150。
其中,输出部件150可以被配置用于对于由转换装置从抽象语法树生成的各目标代码语义模块进行拼接或组合并输出。
此外,可选地,语法表达解析部件130可以通过遍历一个抽象语法树上的各节点和各子节点,得到该抽象语法树的语法表达。由此,提供代码自动转换的基础。
此外,可选地,如上所述,上述的编译器件可以为Clang编译器,上述的源代码可以为Objective-C代码等。
这里,上述的部件110-150的操作与前面描述的步骤S110-S150的操作类似,因此,不再对其细节进行过多的描述。
本发明通过使用编译器为源代码构建抽象语法树,并基于构建的抽象语法树,生成目标代码,由此实现程序代码的自动转换。
在本发明中,使用编译器来构建源代码的抽象语法树,得到的语义的准确度比现有技术使用文本识别来确定的语义的准确度高。
进一步地,本发明在抽象语法树的基础上,基于抽象语法树的语义与目标代码之间预定的转换规则,生成目标代码。由于抽象语法树的语义与目标代码之间的转换规则通常要比源代码与目标代码之间的转换规则简单有效得多,因此,基于抽象语法树的语义来生成目标代码的方式得到的目标代码的准确率大大提高。
图3给出了根据本发明的一个示例性实施例的代码转换器的示意性框图。
参见图3,该代码转换器1包括存储器10和处理器20。
处理器20可以是一个多核的处理器,也可以包含多个处理器。在一些实施例中,处理器20可以包含一个通用的主处理器以及一个或多个特殊的协处理器,例如图形处理器(GPU)、数字信号处理器(DSP)等等。在一些实施例中,处理器20可以使用定制的电路实现,例如特定用途集成电路(ASIC,Application Specific Integrated Circuit)或者现场可编程逻辑门阵列(FPGA,Field Programmable Gate Arrays)。
存储器10上存储有可执行代码,当所述可执行代码被所述处理器20执行时,使所述处理器20执行上面描述的方法之一。其中,存储器10可以包括各种类型的存储单元,例如***内存、只读存储器(ROM),和永久存储装置。其中,ROM可以存储处理器20或者计算机的其他模块需要的静态数据或者指令。永久存储装置可以是可读写的存储装置。永久存储装置可以是即使计算机断电后也不会失去存储的指令和数据的非易失性存储设备。在一些实施方式中,永久性存储装置采用大容量存储装置(例如磁或光盘、闪存)作为永久存储装置。另外一些实施方式中,永久性存储装置可以是可移除的存储设备(例如软盘、光驱)。***内存可以是可读写存储设备或者易失性可读写存储设备,例如动态随机访问内存。***内存可以存储一些或者所有处理器在运行时需要的指令和数据。此外,存储器10可以包括任意计算机可读存储媒介的组合,包括各种类型的半导体存储芯片(DRAM,SRAM,SDRAM,闪存,可编程只读存储器),磁盘和/或光盘也可以采用。在一些实施方式中,存储器10可以包括可读和/或写的可移除的存储设备,例如激光唱片(CD)、只读数字多功能光盘(例如DVD-ROM,双层DVD-ROM)、只读蓝光光盘、超密度光盘、闪存卡(例如SD卡、min SD卡、Micro-SD卡等等)、磁性软盘等等。计算机可读存储媒介不包含载波和通过无线或有线传输的瞬间电子信号。
此外,根据本发明的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。
或者,本发明还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或计算设备、服务器等)的处理器执行时,使所述处理器执行根据本发明的上述方法的各个步骤。
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
附图中的流程图和框图等等显示了根据本发明的多个实施例的***和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

Claims (12)

1.一种代码自动转换方法,其特征在于,包括:
抽象语法树构建步骤,其中,通过使用编译器,从源代码构建源代码的语义模块相应的抽象语法树;
语法表达解析步骤,其中,针对一个语义模块的相应抽象语法树,得到该抽象语法树的语法表达;
转换步骤,其中,基于得到的一个语义模块的相应抽象语法树的语法表达,依据预先规定的抽象语法树的语法表达与目标代码之间的转换规则,从该抽象语法树生成相应的目标代码语义模块。
2.如权利要求1所述的代码自动转换方法,其特征在于,还包括:
特征代码标记步骤,其中,在抽象语法树构建步骤之前,在源代码中查找特征代码,并对查找到的特征代码添加属性标记,
在所述语法表达解析步骤中,从添加了属性标记的特征代码相应的抽象语法树生成相应的语法表达,并且,在所述转换步骤中,基于该语法表达,生成相应的目标代码语义模块。
3.如权利要求1所述的代码自动转换方法,其特征在于,还包括:
输出步骤,其中,在转换步骤之后,对于从抽象语法树生成的各目标代码语义模块进行拼接或组合并输出。
4.如权利要求1~3中的任何一项所述的代码自动转换方法,其特征在于,通过遍历一个抽象语法树上的各节点和各子节点,得到该抽象语法树的语法表达。
5.如权利要求1~3中的任何一项所述的代码自动转换方法,其特征在于,所述编译器为Clang,所述源代码为Objective-C代码。
6.一种代码自动转换装置,其特征在于,包括:
抽象语法树构建部件,被配置用于通过使用编译器件,从源代码构建源代码的语义模块相应的抽象语法树;
语法表达解析部件,被配置用于针对一个语义模块的相应抽象语法树,得到该抽象语法树的语法表达;
转换部件,被配置用于基于得到的一个语义模块的相应抽象语法树的语法表达,依据预先规定的抽象语法树的语法表达与目标代码之间的转换规则,从该抽象语法树生成相应的目标代码语义模块。
7.如权利要求6所述的代码自动转换装置,其特征在于,还包括:
特征代码标记部件,被配置用于在源代码中查找特征代码,并对查找到的特征代码添加属性标记,
所述语法表达解析部件从添加了属性标记的特征代码相应的抽象语法树生成相应的语法表达,并且,所述转换部件基于该语法表达,生成相应的目标代码语义模块。
8.如权利要求6所述的代码自动转换装置,其特征在于,还包括:
输出部件,被配置用于对于由转换装置从抽象语法树生成的各目标代码语义模块进行拼接或组合并输出。
9.如权利要求6~8中的任何一项所述的代码自动转换装置,其特征在于,所述语法表达解析部件通过遍历一个抽象语法树上的各节点和各子节点,得到该抽象语法树的语法表达。
10.如权利要求6~8中的任何一项所述的代码自动转换装置,其特征在于,所述编译器件为Clang编译器,所述源代码为Objective-C代码。
11.一种代码转换器,包括:
处理器;以及
存储器,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如权利要求1~5中任何一项所述的方法。
12.一种非暂时性机器可读存储介质,其上存储有可执行代码,当所述可执行代码被处理器执行时,使所述处理器执行如权利要求1~5中任何一项所述的方法。
CN201910651844.5A 2019-07-18 2019-07-18 代码自动转换方法和装置、代码转换器及介质 Pending CN110471666A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910651844.5A CN110471666A (zh) 2019-07-18 2019-07-18 代码自动转换方法和装置、代码转换器及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910651844.5A CN110471666A (zh) 2019-07-18 2019-07-18 代码自动转换方法和装置、代码转换器及介质

Publications (1)

Publication Number Publication Date
CN110471666A true CN110471666A (zh) 2019-11-19

Family

ID=68509701

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910651844.5A Pending CN110471666A (zh) 2019-07-18 2019-07-18 代码自动转换方法和装置、代码转换器及介质

Country Status (1)

Country Link
CN (1) CN110471666A (zh)

Cited By (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110941432A (zh) * 2019-12-16 2020-03-31 深圳市思天极创教育科技有限公司 代码转换的方法及装置
CN111249736A (zh) * 2020-01-16 2020-06-09 网易(杭州)网络有限公司 代码处理方法及装置
CN111367527A (zh) * 2020-02-18 2020-07-03 北京字节跳动网络技术有限公司 一种语言处理的方法、装置、介质和电子设备
CN111506314A (zh) * 2020-04-08 2020-08-07 网易(杭州)网络有限公司 项目开发的方法、装置、服务器及介质
CN111539200A (zh) * 2020-04-22 2020-08-14 北京字节跳动网络技术有限公司 一种生成富文本的方法、装置、介质和电子设备
CN111708539A (zh) * 2020-06-17 2020-09-25 腾讯科技(深圳)有限公司 一种应用程序代码转换方法、装置、电子设备和存储介质
CN111767076A (zh) * 2020-06-23 2020-10-13 中国工商银行股份有限公司 代码重构方法及装置
CN111831384A (zh) * 2020-07-20 2020-10-27 北京百度网讯科技有限公司 语言切换方法和装置、设备及存储介质
CN111966358A (zh) * 2020-07-30 2020-11-20 上海泛微网络科技股份有限公司 代码打包方法、装置、电子设备和计算机可读存储介质
CN112083921A (zh) * 2020-09-10 2020-12-15 之江实验室 一种基于声明式语法的两层可视化联动编排方法及***
CN112328257A (zh) * 2020-11-24 2021-02-05 中国工商银行股份有限公司 代码转换方法及装置
CN112379917A (zh) * 2020-11-19 2021-02-19 康键信息技术(深圳)有限公司 浏览器兼容性提升方法、装置、设备及存储介质
CN112596737A (zh) * 2020-12-28 2021-04-02 上海品顺信息科技有限公司 一种函数调用关系的扫描方法、***、设备及存储介质
CN113031967A (zh) * 2021-04-19 2021-06-25 北京字节跳动网络技术有限公司 一种代码转换方法及装置
CN113626067A (zh) * 2020-05-08 2021-11-09 腾讯科技(深圳)有限公司 一种组件发布方法及装置
CN113641361A (zh) * 2021-06-28 2021-11-12 武汉极意网络科技有限公司 一种基于Clang的代码隐藏方法及装置
CN113760246A (zh) * 2021-09-06 2021-12-07 网易(杭州)网络有限公司 应用程序文本语言处理方法、装置、电子设备及存储介质
CN114547236A (zh) * 2022-01-20 2022-05-27 阿里巴巴(中国)有限公司 数据搜索方法、装置、电子设备、介质及程序产品
CN114780100A (zh) * 2022-04-08 2022-07-22 芯华章科技股份有限公司 编译方法、电子设备及存储介质
TWI801836B (zh) * 2021-04-01 2023-05-11 台達電子工業股份有限公司 將程式碼於不同程式語言間進行轉換及優化的方法
CN116738900A (zh) * 2023-08-14 2023-09-12 摩尔线程智能科技(北京)有限责任公司 知识产权块的代码转换装置和方法

Citations (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6516461B1 (en) * 2000-01-24 2003-02-04 Secretary Of Agency Of Industrial Science & Technology Source code translating method, recording medium containing source code translator program, and source code translator device
US20030106049A1 (en) * 2001-11-30 2003-06-05 Sun Microsystems, Inc. Modular parser architecture
CN103294666A (zh) * 2013-05-28 2013-09-11 百度在线网络技术(北京)有限公司 语法编译方法、语义解析方法以及对应装置
JP2013186647A (ja) * 2012-03-07 2013-09-19 Yokohama National Univ 難読化装置、難読化方法、及び難読化プログラム、並びに難読化されたソースコード
CN103870308A (zh) * 2012-12-13 2014-06-18 杭州勒卡斯广告策划有限公司 一种数据处理方法及装置
CN104657267A (zh) * 2015-02-10 2015-05-27 上海创景计算机***有限公司 弹性的源代码语法树解析***及方法
WO2017018644A1 (ko) * 2015-07-30 2017-02-02 삼성전자 주식회사 전자 장치, 컴파일링 방법 및 컴퓨터 판독가능 기록매체
CN108052453A (zh) * 2017-12-29 2018-05-18 北京天诚同创电气有限公司 可编程逻辑控制器程序的测试方法、装置、设备和介质
CN108170661A (zh) * 2016-12-07 2018-06-15 北京京东尚科信息技术有限公司 一种规则文本的管理方法及***
CN108170435A (zh) * 2018-01-16 2018-06-15 优视科技新加坡有限公司 一种源代码转换方法、装置及设备
CN108595921A (zh) * 2018-03-22 2018-09-28 北京奇艺世纪科技有限公司 一种源代码中字符串的混淆方法和装置
CN108874396A (zh) * 2018-05-31 2018-11-23 苏州蜗牛数字科技股份有限公司 基于hlsl的多平台多目标语言的交叉编译器及编译方法
CN109375922A (zh) * 2018-09-26 2019-02-22 深圳壹账通智能科技有限公司 一种接口文档的自动生成方法及终端设备
CN109857641A (zh) * 2018-12-29 2019-06-07 北京奇安信科技有限公司 对程序源文件进行缺陷检测的方法及装置
CN110018829A (zh) * 2019-04-01 2019-07-16 北京东方国信科技股份有限公司 提高pl/sql语言解释器执行效率的方法及装置

Patent Citations (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6516461B1 (en) * 2000-01-24 2003-02-04 Secretary Of Agency Of Industrial Science & Technology Source code translating method, recording medium containing source code translator program, and source code translator device
US20030106049A1 (en) * 2001-11-30 2003-06-05 Sun Microsystems, Inc. Modular parser architecture
JP2013186647A (ja) * 2012-03-07 2013-09-19 Yokohama National Univ 難読化装置、難読化方法、及び難読化プログラム、並びに難読化されたソースコード
CN103870308A (zh) * 2012-12-13 2014-06-18 杭州勒卡斯广告策划有限公司 一种数据处理方法及装置
CN103294666A (zh) * 2013-05-28 2013-09-11 百度在线网络技术(北京)有限公司 语法编译方法、语义解析方法以及对应装置
CN104657267A (zh) * 2015-02-10 2015-05-27 上海创景计算机***有限公司 弹性的源代码语法树解析***及方法
WO2017018644A1 (ko) * 2015-07-30 2017-02-02 삼성전자 주식회사 전자 장치, 컴파일링 방법 및 컴퓨터 판독가능 기록매체
CN108170661A (zh) * 2016-12-07 2018-06-15 北京京东尚科信息技术有限公司 一种规则文本的管理方法及***
CN108052453A (zh) * 2017-12-29 2018-05-18 北京天诚同创电气有限公司 可编程逻辑控制器程序的测试方法、装置、设备和介质
CN108170435A (zh) * 2018-01-16 2018-06-15 优视科技新加坡有限公司 一种源代码转换方法、装置及设备
CN108595921A (zh) * 2018-03-22 2018-09-28 北京奇艺世纪科技有限公司 一种源代码中字符串的混淆方法和装置
CN108874396A (zh) * 2018-05-31 2018-11-23 苏州蜗牛数字科技股份有限公司 基于hlsl的多平台多目标语言的交叉编译器及编译方法
CN109375922A (zh) * 2018-09-26 2019-02-22 深圳壹账通智能科技有限公司 一种接口文档的自动生成方法及终端设备
CN109857641A (zh) * 2018-12-29 2019-06-07 北京奇安信科技有限公司 对程序源文件进行缺陷检测的方法及装置
CN110018829A (zh) * 2019-04-01 2019-07-16 北京东方国信科技股份有限公司 提高pl/sql语言解释器执行效率的方法及装置

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
WEIXIN_30376083: "clang frontend", Retrieved from the Internet <URL:https://blog.csdn.net/weixin_30376083/article/details/98953429> *
朱波等: "基于AST的程序代码相似性度量研究", 《吉林大学学报(信息科学版)》 *
朱波等: "基于AST的程序代码相似性度量研究", 《吉林大学学报(信息科学版)》, no. 01, 15 January 2015 (2015-01-15) *

Cited By (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110941432A (zh) * 2019-12-16 2020-03-31 深圳市思天极创教育科技有限公司 代码转换的方法及装置
CN111249736A (zh) * 2020-01-16 2020-06-09 网易(杭州)网络有限公司 代码处理方法及装置
CN111367527A (zh) * 2020-02-18 2020-07-03 北京字节跳动网络技术有限公司 一种语言处理的方法、装置、介质和电子设备
CN111367527B (zh) * 2020-02-18 2023-03-28 北京字节跳动网络技术有限公司 一种语言处理的方法、装置、介质和电子设备
CN111506314B (zh) * 2020-04-08 2024-05-14 网易(杭州)网络有限公司 项目开发的方法、装置、服务器及介质
CN111506314A (zh) * 2020-04-08 2020-08-07 网易(杭州)网络有限公司 项目开发的方法、装置、服务器及介质
CN111539200A (zh) * 2020-04-22 2020-08-14 北京字节跳动网络技术有限公司 一种生成富文本的方法、装置、介质和电子设备
CN111539200B (zh) * 2020-04-22 2023-08-18 北京字节跳动网络技术有限公司 一种生成富文本的方法、装置、介质和电子设备
CN113626067A (zh) * 2020-05-08 2021-11-09 腾讯科技(深圳)有限公司 一种组件发布方法及装置
CN111708539A (zh) * 2020-06-17 2020-09-25 腾讯科技(深圳)有限公司 一种应用程序代码转换方法、装置、电子设备和存储介质
CN111708539B (zh) * 2020-06-17 2021-07-06 腾讯科技(深圳)有限公司 一种应用程序代码转换方法、装置、电子设备和存储介质
CN111767076A (zh) * 2020-06-23 2020-10-13 中国工商银行股份有限公司 代码重构方法及装置
CN111831384B (zh) * 2020-07-20 2024-01-09 北京百度网讯科技有限公司 语言切换方法和装置、设备及存储介质
CN111831384A (zh) * 2020-07-20 2020-10-27 北京百度网讯科技有限公司 语言切换方法和装置、设备及存储介质
CN111966358A (zh) * 2020-07-30 2020-11-20 上海泛微网络科技股份有限公司 代码打包方法、装置、电子设备和计算机可读存储介质
CN111966358B (zh) * 2020-07-30 2022-06-07 上海泛微网络科技股份有限公司 代码打包方法、装置、电子设备和计算机可读存储介质
CN112083921A (zh) * 2020-09-10 2020-12-15 之江实验室 一种基于声明式语法的两层可视化联动编排方法及***
CN112083921B (zh) * 2020-09-10 2023-12-19 之江实验室 一种基于声明式语法的两层可视化联动编排方法及***
CN112379917A (zh) * 2020-11-19 2021-02-19 康键信息技术(深圳)有限公司 浏览器兼容性提升方法、装置、设备及存储介质
CN112379917B (zh) * 2020-11-19 2023-10-20 康键信息技术(深圳)有限公司 浏览器兼容性提升方法、装置、设备及存储介质
CN112328257A (zh) * 2020-11-24 2021-02-05 中国工商银行股份有限公司 代码转换方法及装置
CN112596737A (zh) * 2020-12-28 2021-04-02 上海品顺信息科技有限公司 一种函数调用关系的扫描方法、***、设备及存储介质
TWI801836B (zh) * 2021-04-01 2023-05-11 台達電子工業股份有限公司 將程式碼於不同程式語言間進行轉換及優化的方法
WO2022222586A1 (zh) * 2021-04-19 2022-10-27 北京字节跳动网络技术有限公司 一种代码转换方法及装置
CN113031967B (zh) * 2021-04-19 2024-05-10 抖音视界有限公司 一种代码转换方法及装置
CN113031967A (zh) * 2021-04-19 2021-06-25 北京字节跳动网络技术有限公司 一种代码转换方法及装置
CN113641361A (zh) * 2021-06-28 2021-11-12 武汉极意网络科技有限公司 一种基于Clang的代码隐藏方法及装置
CN113641361B (zh) * 2021-06-28 2024-01-26 武汉极意网络科技有限公司 一种基于Clang的代码隐藏方法及装置
CN113760246B (zh) * 2021-09-06 2023-08-11 网易(杭州)网络有限公司 应用程序文本语言处理方法、装置、电子设备及存储介质
CN113760246A (zh) * 2021-09-06 2021-12-07 网易(杭州)网络有限公司 应用程序文本语言处理方法、装置、电子设备及存储介质
CN114547236A (zh) * 2022-01-20 2022-05-27 阿里巴巴(中国)有限公司 数据搜索方法、装置、电子设备、介质及程序产品
CN114780100B (zh) * 2022-04-08 2023-04-07 芯华章科技股份有限公司 编译方法、电子设备及存储介质
CN114780100A (zh) * 2022-04-08 2022-07-22 芯华章科技股份有限公司 编译方法、电子设备及存储介质
CN116738900A (zh) * 2023-08-14 2023-09-12 摩尔线程智能科技(北京)有限责任公司 知识产权块的代码转换装置和方法
CN116738900B (zh) * 2023-08-14 2023-11-28 摩尔线程智能科技(北京)有限责任公司 知识产权块的代码转换装置和方法

Similar Documents

Publication Publication Date Title
CN110471666A (zh) 代码自动转换方法和装置、代码转换器及介质
CN110196719B (zh) 一种基于自然语言处理的业务规则生成方法与***
CN106293664A (zh) 代码生成方法及装置
US20070067471A1 (en) Message translation systems and methods
CN109558479A (zh) 一种规则匹配方法、装置、设备及存储介质
CN106547520B (zh) 一种代码路径分析方法及装置
CN102999325A (zh) 用于验证模型等价性的***和方法
CN105243018A (zh) 一种面向对象的类测试数据生成方法
CN101980546B (zh) 智能网平台、业务执行方法和分析业务异常的方法
CN107515739A (zh) 提高代码执行性能的方法及装置
CN115509514B (zh) 一种前端数据模拟方法、装置、设备及介质
CN110109658A (zh) 一种基于形式化模型的ros代码生成器及代码生成方法
CN111240772A (zh) 一种基于区块链的数据处理方法、装置及存储介质
CN102929853A (zh) 基于Excel表单关联的DCS项目数据生成***和方法
CN102707934B (zh) 一种以脚本形式表示增值业务流程的实现方法和***
Zhao et al. Pattern-based design evolution using graph transformation
US20090064092A1 (en) Visual programming language optimization
Dams et al. Specification and Implementation of Components of a MCRL Toolbox
CN115658140A (zh) 一种sdk的打包方法、装置、终端以及存储介质
Engelen From napkin sketches to reliable software
Aminof et al. Synthesis of hierarchical systems
Lai et al. Defining and verifying behaviour of domain specific language with fUML
Mussbacher et al. Transformation of aspect-oriented requirements specifications for reactive systems into aspect-oriented design specifications
Höver et al. A domain specific language for describing s-bpm processes
Sun et al. A test generation method based on model reduction for parallel software

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
RJ01 Rejection of invention patent application after publication

Application publication date: 20191119