CN113504900A - 一种编程语言转换方法和装置 - Google Patents
一种编程语言转换方法和装置 Download PDFInfo
- Publication number
- CN113504900A CN113504900A CN202110847299.4A CN202110847299A CN113504900A CN 113504900 A CN113504900 A CN 113504900A CN 202110847299 A CN202110847299 A CN 202110847299A CN 113504900 A CN113504900 A CN 113504900A
- Authority
- CN
- China
- Prior art keywords
- language
- converted
- node
- data type
- converting
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- 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
技术领域
本公开涉及金融科技领域,具体涉及到一种计算机编程领域,更具体地涉及一种编程语言转换的方法、装置、电子设备和介质。
背景技术
随着计算机语言的发展,许多软件系统都面临这更新换代的问题。为了提升软件的灵活性更好,需要对软件系统的编程语言进行转换。
对于软件系统需要转换编程语言的情况,目前常规做法主要有两种:手工重构和基于语法树的简单转换工具。其中,手工重构成本较高,对于大型业务系统需要投入大量人力才能够完成;而基于语法树的简单转换工具还有很多不成熟地方,例如无法将弱类型语言向强类型语言进行转换。由于弱类型语言对相关变量的处理存在较多的容错或适配处理,导致转换后的强类型语言程序虽然程序逻辑语法正确,但由于强类型语言在表达式中存在强一致性要求,导致表达式前后的变量无法匹配,出现大量语法错误,需要人工手动处理,成本非常高。
故现需要一种编程语言转换方法和装置,可以将弱类型语言转换为强类型语言,在转换过程中,不仅对语法语义进行转换,还针对变量进行相应的转换处理。
公开内容
有鉴于此,本公开提出了一种编程语言转换方法,包括:获取待转换语言文件;将所述待转换语言文件转换为生成待转换语言语法树;遍历所述待转换语言语法树,将所述待转换语言语法树转换为目标语言语法树,其中,包括将各个所述节点的数据类型转换为目标数据类型;将目标语言语法树转换成目标语言输出。
可选地,将各个所述节点的数据类型转换为目标数据类型,包括:确定所述待转换语言语法树各个节点的类型,其中,所述节点的类型包括表达式根结点以及表达式根节点两侧的左子节点和右子节点;基于所述目标语言的数据类型,将各个节点的数据类型预转换;将所述表达式根节点两侧的左子节点的数据类型和右子节点的数据类型转为一致。
可选地,将各个表达式根节点两侧的左子节点的数据类型和右子节点的数据类型转为一致,包括:判断各个所述表达式根节点两侧的所述左子节点的数据类型和所述右子节点的数据类型是否一致;若不一致,则判断所述表达式根节点的是否为赋值节点;若是赋值节点,则基于所述左子节点的数据类型,转换所述右子节点的数据类型;若不是赋值节点,则基于数据类型优先级,将所述左子节点的数据类型和所述右子节点的数据类型转为一致。
可选地,基于数据类型优先级,将所述左子节点的数据类型和所述右子节点的数据类型转为一致,包括:比较所述左子节点数据类型的优先级和所述右子节点的数据类型的优先级;若所述左子节点的数据类型优先级更高,则强制转换所述右子节点的数据类型,使得所述右子节点数据类型与所述左子节点的数据类型一致;若所述右子节点的数据类型优先级更高,则强制转换所述左子节点的数据类型,使得所述左子节点数据类型与所述右子节点的数据类型一致。
可选地,将所述待转换语言语法树转换为目标语言语法树,还包括:
获取待所述转换语言运行环境,并以HashMap形式存储;获取所述待转换语言与所述目标语言之间的语法转换规则,并以HashMap形式存储。
可选地,获取所述待转换语言与所述目标语言之间的语法转换规则,并以HashMap形式存储后,还包括:遍历所述待转换语言语法树的各个节点,根据所述语法转换规则,将所述各个节点进行语法语义转换。
可选地,将所述待转换语言文件转换为生成待转换语言语法树,包括:获取所述待转换语言运行环境,以及所述待转换语言的语法解析规则;将所述待转换语言文件转换为待转换语言文本;采用编译器将所述待转换语言文本,结合所述待转换语言运行环境以及所述待转换语言的语法解析规则,生成所述待转换语言语法树。
可选地,将目标语言语法树转换成目标语言输出,包括:遍历所述目标语言语法树的各个节点,生成目标语言文本;将所述目标语言文本转换为目标语言文件,并输出。
本公开另一方面还提供了一种编程语言转换装置,包括:获取模块,用于获取待转换语言文件;语法树生成模块,用于将所述待转换语言文件转换为生成待转换语言语法树;转换模块,用于遍历所述待转换语言语法树,将所述待转换语言语法树转换为目标语言语法树,其中,包括将各个所述节点的数据类型转换为目标数据类型;输出模块,将目标语言语法树转换成目标语言输出。
可选地,转换模块包括:预处理单元,用于确定所述待转换语言语法树各个节点的类型,其中,所述节点的类型包括表达式根结点以及表达式根节点两侧的左子节点和右子节点;数据类型预处理单元,用于基于所述目标语言的数据类型,将各个节点的数据类型预转换;数据类型转换单元,用于将所述表达式根节点两侧的左子节点和右子节点的数据类型转为一致。
可选地,转换模块还包括:语法转换单元,用于获取待转换语言运行环境,并以HashMap形式存储,获取所述待转换语言与所述目标语言之间的语法转换规则,并以HashMap形式存储,遍历所述待转换语言语法树的各个节点,根据所述语法转换规则,将所述各个节点进行语法语义转换。
本公开还提供了一种电子设备,包括:一个或多个处理器;存储器,用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现权利要求1至8中任一项所述的方法。
本公开提供了一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器实现权利要求1至8中任一项所述的方法。
从上述技术方案可以看出,本公开编程语言转换方法和装置至少具有以下有益效果:本公开在遍历待转换语言语法树的时候,不仅对语法做出来转换,还针对数据类型做出了转换,提高了编程语言转换的准确性,还解决了弱类型语言转换为强类型语言时,因强类型语言对数据类型的高要求,而出现的报错问题。
附图说明
图1示意性示出了根据本公开实施例的一种编程语言转换装置示例性系统架构;
图2示意性示出了示意性示出了根据本公开实施例的一种编程语言转换的方法;
图3示意性示出了根据本公开实施例的一种待转换语言语法树转换为目标语法树的步骤流程图;
图4示意性示出了根据本公开实施例的一种已经转换完语法和预转换完成数据类型的语法树示例;
图5示意性示出了根据本公开实施例的一种将表达式根节点两侧的数据类型转换为一致的方法;
图6示意性示出了根据本公开实施例的一种编程语言转换装置;
图7示意性示出了根据本公开实施例的一种适于实现编程语言转换方法的电子设备的方框图。
具体实施方式
为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。
本公开某些实施例于后方将参照所附附图做更全面性地描述,其中一些但并非全部的实施例将被示出。实际上,本公开的各种实施例可以许多不同形式实现,而不应被解释为限于此数所阐述的实施例;相对地,提供这些实施例使得本公开满足适用的法律要求。
本公开的实施例提供了一种编程语言转换的方法。该方法包括获取待转换语言文件;将待转换语言文件转换为生成待转换语言语法树;确定待转换语言语法树各个节点的类型,其中节点的类型包括表达式根节点、变量节点和语法节点;遍历待转换语言语法树,将待转换语言语法树转换为目标语言语法树,其中,包括将各个变量节点的变量类型转换为目标变量类型;将目标语言语法树转换成目标语言输出。
图1示意性示出了根据本公开实施例的编程语言转换装置示例性系统架构100。需要注意的是,图1所示仅为可以应用本公开实施例的系统架构的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。
如图1所示,根据该实施例的系统架构100可以包括待转换语言101、目标语言103和用于编程语言转换的装置102。其中,待转换语言文件101和目标语言文件103分别是同一应用的运行于不同编程语言软件平台的代码程序。通过根据本公开实施例的用于编程语言转换的装置102,可以将待转换语言文件101转换为目标语言文件102。
待转换语言文件101运行于第一平台,目标语言文件102运行于第二平台,其中,第一平台和第二平台分别为基于源编程语言的软件平台和目标编程语言的软件平台。
根据本公开的一些实施例,第一平台和第二平台为应用的不同宿主应用。例如,该待转换语言文件101和目标语言文件103对应的应用产品可以是一个小程序应用(例如,话费充值)。第一平台和/或第二平台例如可以是支付宝、微信、微博、或者淘宝等宿主应用。该话费充值的小程序是接入宿主应用第三方应用。
根据本公开的实施例,用于编程语言智能适配的装置102可以解析待转换语言文件101的代码,得到待转换语言文件101对应的待转换语言抽象语法树,然后根据第二平台的框架逻辑或源代码语言结构,将待转换语言抽象语法树中对应节点(例如,模板、接口、组件库或运行时)的内容进行替换,从而得到目标语言抽象语法树,然后再基于目标抽象语法树生成目标语言文件103。
本发明实施例中,通过将待转换语言文件经过一系列处理后,转换为不同目标语言的程序文件,解决了不同编程语言之间转换成本高、无法智能适配不同目标环境等问题,降低了不同平台的代码开发和维护成本。
下面,以待转换语言为PLSQL语言,目标语言为Java语言为例,来具体描述本发明的编程语言转换方法的一个具体实施例。
图2示意性示出了根据本发明实施例的编程语言转换方法的流程图。
如图2所示,该编程语言的转换方法可以包括操作S210~操作S240。
操作S210,获取待转换语言文件。
获取待转换语言文件,并将文件转换为待转换语言文本,方便后续进行语法树的转换。
在待转换语言转换为目标语言的过程中,一般还需要获取待转换语言和目标语言的运行环境数据。其中,运行环境数据包括:数据库对象、服务器类型、数据库和服务器之间的连接协议。
数据库对象例如可以包括包、表、序列号等。例如待转换语言为PLSQL程序师,要先从该程序运行的数据库环境将对应的数据库对象(包、表、序列号等)读取出供后续使用。
连接协议例如可以包括Java数据库连接和FTP(File Transfer Protocol,即文件传输协议)文件服务器连接。例如,Java数据库连接(Java Database Connectivity,简称JDBC),是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了例如查询和更新数据库中数据的方法。FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。
目标语言所处的运行环境数据对编程语言转换也具有重要影响。例如,使用MySQL数据还是Oracle数据库,使用64位JVM(Java Virtual Machine,Java虚拟机)还是32位JVM,这些因素都会影响编程语言转换的效果。
操作S220,将待转换语言文件转换为生成待转换语言语法树。
在计算机科学中,抽象语法树(abstract syntax tree缩写为AST),或者语法树(syntax tree),是编程语言的抽象语法结构的树状表现形式。树上的每个节点都表示编程语言中的一种结构。
各种编程语言均有对应的语法解析规则,对应的语法解析规则文件一般表现为.g4文件。
将待转换语言文件转换为待转换语言文本后,采用编译器将待转换语言文本,结合待转换语言运行环境以及待转换语言的语法解析规则,生成待转换语言语法树。上述编译器可以为antlr开源工具。
例如,以待转换语言为PLSQL语言为例,其语法解析规则表现为.g4文件。具体地,if-else语法解析规则文本(PLSQLParser.g4)的代码如下:
将待转换语言文本结合对应的语法解析规则和运行环境数据后,采用antlr开源工具生成为待转换语言语法树。
继续以待转换语言为PLSQL语言为例,待转换语言语法树的生成方式的代码如下:
CharStream inputStream=CharStreams.fromString(待转换语言文本);
CaseChangingCharStream upperStream=new CaseChangingCharStream(inputStream,true);
PLSQLLexer lexer=new PLSQLLexer(upperStream);
CommonTokenStream tokens=new CommonTokenStream(lexer);
PLSQLParser parser=new PLSQLParser(tokens);
ParseTree tree=parser.sql_script();
由此,本公开通过解析待转换语言文件的代码,得到了待转换语言的抽象语法树。
操作S230,遍历待转换语言语法树,将待转换语言语法树转换为目标语言语法树,其中,包括将各个节点的数据类型转换为目标数据类型。
强类型语言就是强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了,且不同类型的数据不能出现在同一个表达式中。而弱类型语言是数据类型可以被忽略的语言。它与强类型语言相反,一个变量可以赋不同数据类型。所以在弱类型语言转换为强类型语言的过程中需要做到操作S310~操作S330:
操作S310,对各个节点进行语法语义的转换;
操作S320,对各个节点进行数据类型预转换;
操作S330,将表达式根节点两侧的左子变量节点和右子变量节点的数据类型转为一致。
在操作S310中,需要预先获取待转换语言的运行环境数据,并将运行环境数据以HashMap形式存储。HashMap是一种基于哈希表的Map接口的实现,此实现提供所有可选的映射操作,并允许使用null值和null键。
例如,继续以源语言为PLSQL语言为例,存储方式如以下代码示例所示:
<PCKG_TRANSFER,PACKAGE>
<TYPE_POST_PND_INTERFACE,PROCEDURE>
<UTL_FILE.PUT_LINE,FUNCTION>
根据本公开实施例,还包括获取待转换语言与目标语言之间的语法转换规则,并以HashMap形式存储。
遍历待转换语言语法树的各个节点,根据语法转换规则,将各个节点进行语法语义转换。
在操作S320中,遍历各个节点,将各个节点的数据类型进行预转换。
依旧以待转换语言为PLSQL语言,目标语言为Java为例,在面对如图5所示的语句。根据图4所示的实施例,在数据类型转换的过程中,根据Java数据类型的定义,需要预转换a和b的数据类型,即将a预设置为Interger类型,b预设置为是String类型。还例如在PLSQL语言中数据类型为number和varchar2类型的节点,在转换数据类型后,分别表示为BigDecimal类型和string类型。
在操作S330中,需要确定所述待转换语言语法树各个节点的类型,其中,节点的类型包括表达式根结点以及表达式根节点两侧的左子节点和右子节点。如图4所示,图4示意性示出了一个完成语法转换和数据类型预转换语法树图。图中的语法树根节点包括节点400~节点460,其中,节点410、节点430、节点4节点40、节点450、节点460为表达式根节点。因为在强类型语言里,表达式两侧的数据类型需要一致,才能进行操作,即需要满足强类型语言需要强一致性的需求。故还需要将表达式根节点两侧的左子变量节点和右子变量节点的数据类型转为一致。
如图5所示,将表达式根节点两侧的左子变量节点和右子变量节点的数据类型转为一致包括操作S510~操作S520
在操作S510中,遍历待转换语言语法树的表达式节点,判断各个表达式根节点两侧的左子节点和右子节点的数据类型是否一致。
强类型语言中只有相同数据类型的变量才能操作。但是,强类型语言的变量一旦被指定了相应的数据类型,如果不经过强制转换,是无法自行转换的。所以此处需要判断表达式根节点两侧的左子节点和右子节点的数据类型是否一致,如果一致,则此操作可以运行,如果不一致,则需要进行数据类型的强制转换,才能进行此操作。例如,如图4所示的表达式根节点中,如节点430、节点460、节点450两侧左子节点和右的数据类型都不一致,需要转换,而节点440右侧还有孩子节点,则需要先判断孩子节点的数据类型再进行比较。
操作S520,若不一致,则判断根节点的是否为赋值节点。
当表达式根节点两侧的左子节点和右子节点的数据类型不一致时,还需要判断此表达式根节点是否为赋值节点。
操作S520若是赋值节点,则基于左子节点的数据类型,转换右子节点的数据类型。
若判断出表达式根节点为赋值节点,则根据左子节点的数据类型强制转换右子节点类型。例如,如图4所示的图中,节点450为赋值节点,则基于左子节点的数据类型String,将右子节点的数据类型从Integer转换为String。用表达式来表达这个过程就是:b=(String)a。节点440也是赋值节点,故无论a+b的数据类型是什么,最后都必须转换为Integer类型。
操作S540若不是赋值节点,则基于数据类型优先级,将左子节点的数据类型和右子节点的数据类型转为一致。
若表达式根节点不是赋值节点时,基于数据类型优先级统一左子节点的数据类型和右子节点的数据类型。
数据类型优先级如表1所示,其中,Timestamp类型的优先级最高,然后依次是Data类型、BigDecimal类型、Integer类型和String类型。
数据类型 | 优先级 |
Timestamp | 5 |
Date | 4 |
BigDecimal | 3 |
Integer | 2 |
String | 1 |
表1数据类型优先级
比较左子节点和右子节点的数据类型,若左子节点的数据类型更高,则强制转换右子节点的数据类型,使得右子节点与左子节点的数据类型一致。若右子节点的数据类型更高,则强制转换左子节点的数据类型,使得左子节点与右子节点的数据类型一致。例如,如图4所示,表达式根节点430的左子节点是a,数据类型是Integer,此数据类型优先级为2,表达式根节点430右子节点是b,此数据类型优先级为1,左子节点的优先级更高则选择转换右子节点的优先级,将右子节点转换为Integer类型。用表达式表示这个过程就是:a>(Interger)b。
同时,还如图4所示,遍历到节点440时,因节点440是赋值节点,故需要将右子节点的类型转换的与左节点一致。而节点460两侧的子节点中,右子节点的数据类型优先级更高,则选择转换右子节点数据类型。此处用表达式表示这个过程就是:a=(Integer)(b+(String)a)
根据本公开实施例,上述遍历语法树的各个节点皆采用前序遍历的方法。前序遍历的方法是首先访问根结点然后遍历左子树和右子树。在遍历抽象语法树的节点,将抽象语法树中的各个节点进行转换的过程中,如果当前节点还存在子节点,则先遍历子节点,得到子节点的转换结果后再结合子节点的转换结果来转换当前节点,因此,结合子节点的内容来转换当前节点,可降低对节点内容转换不完善导致转换结果出错的概率。可以理解的是,对于没有子节点的当前节点,则将当前节点转换之后再进行下一节点的转换,直至抽象语法树上的所有节点内容都被转换,避免遗漏抽象语法树上节点的内容,实现准确地转换出目标语言文件。
根据本公开实施例,上述操作S310~S330可以分为三次遍历完成。也可以将操作S310~S320合并在第一次遍历里完成,操作S330在第二次遍历中完成。
在操作S240中,将目标语言语法树转换成目标语言输出。
遍历目标语言语法树的各个节点,生成目标语言文本。并将目标语言文本转换为目标语言文件输出。
根据本公开实施例,以目标语言语法树的树根作为起点,采用前序遍历方式递归遍历目标语言语法树的各个节点,生成目标文件。
由此,由于抽象语法树的节点可能会包含孩子节点,例如用于实现函数之间的调用等。本发明通过采用自顶向下递归遍历方式,对目标语言语法树上的各个节点进行遍历,以此避免遗漏目标语言语法树中的任一节点,能够更准确地获知该目标语言语法树的语法,便于获取后续的目标语言文本。
图6示意性示出了根据本公开实施例的编程语言转换装置的结构框图。
如图6所示,该实施例的编程语言转换装置600包括获取模块610、语法树生成模块620、转换模块630和输出模块640。
获取模块610,用于获取待转换语言文件。在一实施例中,获取模块610可以用于执行前文描述的操作S210,不仅可以获取待转换语言文件,还获取待转换语言和目标语言的运行环境。
语法树生成模块620,用于将所述待转换语言文件转换为生成待转换语言语法树。在一实施例中,语法树生成模块620可以用于执行前文描述的操作S220。将待转换语言文件转换为文本后,根据待转换语言对应的解析规则,利用编译器将待转换语言文本转换为待转换语言语法树。
转换模块630,用于遍历所述待转换语言语法树,将所述待转换语言语法树转换为目标语言语法树,其中,包括将各个所述节点的数据类型转换为目标数据类型。在一实施例中,转换模块630可以用于执行前文描述的操作S230。遍历待转换语言语法树,将待转换语言语法树转换为目标语言语法树,其中,包括:将对各个节点进行语法语义的转换;对各个节点进行数据类型预转换;将表达式根节点两侧的左子变量节点和右子变量节点的数据类型转为一致。
输出模块640,将目标语言语法树转换成目标语言输出。在一实施例中,输出模块640可以用于执行前文描述的操作S240。遍历目标语言语法树的各个节点,生成目标语言文本。并将目标语言文本转换为目标语言文件输出。
根据本公开的实施例,获取模块610、语法树生成模块620、转换模块630和输出模块640中的任意多个模块可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,获取模块610、语法树生成模块620、转换模块630和输出模块640中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,获取模块610、语法树生成模块620、转换模块630和输出模块640中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
图7示意性示出了根据本公开实施例的适于实现编程语言转换方法的电子设备的方框图。
如图7所示,根据本公开实施例的电子设备700包括处理器701,其可以根据存储在只读存储器(ROM)702中的程序或者从存储部分708加载到随机访问存储器(RAM)703中的程序而执行各种适当的动作和处理。处理器701例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC))等等。处理器701还可以包括用于缓存用途的板载存储器。处理器701可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 703中,存储有电子设备700操作所需的各种程序和数据。处理器701、ROM702以及RAM 703通过总线704彼此相连。处理器701通过执行ROM 702和/或RAM 703中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除ROM 702和RAM703以外的一个或多个存储器中。处理器701也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
根据本公开的实施例,电子设备700还可以包括输入/输出(I/O)接口705,输入/输出(I/O)接口705也连接至总线704。电子设备700还可以包括连接至I/O接口705的以下部件中的一项或多项:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分707。通信部分707经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至I/O接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便于从其上读出的计算机程序根据需要被安装入存储部分708。
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM702和/或RAM703和/或ROM702和RAM 703以外的一个或多个存储器。
本公开的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。当计算机程序产品在计算机系统中运行时,该程序代码用于使计算机系统实现本公开实施例所提供的物品推荐方法。
在该计算机程序被处理器701执行时执行本公开实施例的系统/装置中限定的上述功能。根据本公开的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。
在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分707被下载和安装,和/或从可拆卸介质711被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
在这样的实施例中,该计算机程序可以通过通信部分707从网络上被下载和安装,和/或从可拆卸介质711被安装。在该计算机程序被处理器701执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
根据本公开的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如Java,C++,python,“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。
Claims (13)
1.一种编程语言转换方法,其特征在于,包括:
获取待转换语言文件;
将所述待转换语言文件转换为生成待转换语言语法树;
遍历所述待转换语言语法树,将所述待转换语言语法树转换为目标语言语法树,其中,包括将各个所述节点的数据类型转换为目标数据类型;
将目标语言语法树转换成目标语言输出。
2.根据权利要求1所述的编程语言转换方法,其特征在于,所述将各个所述节点的数据类型转换为目标数据类型,包括:
确定所述待转换语言语法树各个节点的类型,其中,所述节点的类型包括表达式根结点以及表达式根节点两侧的左子节点和右子节点;
基于所述目标语言的数据类型,将各个节点的数据类型预转换;
将所述表达式根节点两侧的左子节点的数据类型和右子节点的数据类型转为一致。
3.根据权利要求2所述的编程语言转换方法,其特征在于,所述将各个表达式根节点两侧的左子节点的数据类型和右子节点的数据类型转为一致,包括:
判断各个所述表达式根节点两侧的所述左子节点的数据类型和所述右子节点的数据类型是否一致;
若不一致,则判断所述表达式根节点的是否为赋值节点;
若是赋值节点,则基于所述左子节点的数据类型,转换所述右子节点的数据类型;
若不是赋值节点,则基于数据类型优先级,将所述左子节点的数据类型和所述右子节点的数据类型转为一致。
4.根据权利要求3所述的编程语言转换方法,其特征在于,所述基于数据类型优先级,将所述左子节点的数据类型和所述右子节点的数据类型转为一致,包括:
比较所述左子节点数据类型的优先级和所述右子节点的数据类型的优先级;
若所述左子节点的数据类型优先级更高,则强制转换所述右子节点的数据类型,使得所述右子节点数据类型与所述左子节点的数据类型一致;
若所述右子节点的数据类型优先级更高,则强制转换所述左子节点的数据类型,使得所述左子节点数据类型与所述右子节点的数据类型一致。
5.根据权利要求1所述的编程语言转换方法,其特征在于,所述将所述待转换语言语法树转换为目标语言语法树,还包括:
获取待所述转换语言运行环境,并以HashMap形式存储;
获取所述待转换语言与所述目标语言之间的语法转换规则,并以HashMap形式存储。
6.根据权利要求5所述的编程语言转换方法,其特征在于,所述获取所述待转换语言与所述目标语言之间的语法转换规则,并以HashMap形式存储后,还包括:
遍历所述待转换语言语法树的各个节点,根据所述语法转换规则,将所述各个节点进行语法语义转换。
7.根据权利要求1所述的编程语言转换方法,其特征在于,所述将所述待转换语言文件转换为生成待转换语言语法树,包括:
获取所述待转换语言运行环境,以及所述待转换语言的语法解析规则;
将所述待转换语言文件转换为待转换语言文本;
采用编译器将所述待转换语言文本,结合所述待转换语言运行环境以及所述待转换语言的语法解析规则,生成所述待转换语言语法树。
8.根据权利要求1所述的编程语言转换方法,其特征在于,所述将目标语言语法树转换成目标语言输出,包括:
遍历所述目标语言语法树的各个节点,生成目标语言文本;
将所述目标语言文本转换为目标语言文件,并输出。
9.一种编程语言转换装置,其特征在于,包括:
获取模块,用于获取待转换语言文件;
语法树生成模块,用于将所述待转换语言文件转换为生成待转换语言语法树;
转换模块,用于遍历所述待转换语言语法树,将所述待转换语言语法树转换为目标语言语法树,其中,包括将各个所述节点的数据类型转换为目标数据类型;
输出模块,将目标语言语法树转换成目标语言输出。
10.根据权利要求9所述的编程语言转换装置,其特征在于,所述转换模块,包括:
预处理单元,用于确定所述待转换语言语法树各个节点的类型,其中,所述节点的类型包括表达式根结点以及表达式根节点两侧的左子节点和右子节点;
数据类型预处理单元,用于基于所述目标语言的数据类型,将各个节点的数据类型预转换;
数据类型转换单元,用于将所述表达式根节点两侧的左子节点和右子节点的数据类型转为一致。
11.根据权利要求10所述的编程语言转换装置,其特征在于,所述转换模块,还包括:
语法转换单元,用于获取待转换语言运行环境,并以HashMap形式存储,获取所述待转换语言与所述目标语言之间的语法转换规则,并以HashMap形式存储,遍历所述待转换语言语法树的各个节点,根据所述语法转换规则,将所述各个节点进行语法语义转换。
12.一种电子设备,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,
其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现权利要求1至8中任一项所述的方法。
13.一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器实现权利要求1至8中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110847299.4A CN113504900A (zh) | 2021-07-26 | 2021-07-26 | 一种编程语言转换方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110847299.4A CN113504900A (zh) | 2021-07-26 | 2021-07-26 | 一种编程语言转换方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113504900A true CN113504900A (zh) | 2021-10-15 |
Family
ID=78014555
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110847299.4A Pending CN113504900A (zh) | 2021-07-26 | 2021-07-26 | 一种编程语言转换方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113504900A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114816425A (zh) * | 2022-04-27 | 2022-07-29 | 珠海市奥德维科技有限公司 | 将自动化语言程序转换为lua语言程序的方法、系统、电子设备及存储介质 |
CN115390852A (zh) * | 2022-08-26 | 2022-11-25 | 支付宝(杭州)信息技术有限公司 | 一种生成统一抽象语法树与程序分析的方法和装置 |
CN115392160A (zh) * | 2022-06-10 | 2022-11-25 | 无锡芯光互连技术研究院有限公司 | 一种电路图描述文件的格式转换方法 |
-
2021
- 2021-07-26 CN CN202110847299.4A patent/CN113504900A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114816425A (zh) * | 2022-04-27 | 2022-07-29 | 珠海市奥德维科技有限公司 | 将自动化语言程序转换为lua语言程序的方法、系统、电子设备及存储介质 |
CN114816425B (zh) * | 2022-04-27 | 2023-03-24 | 珠海市奥德维科技有限公司 | 将自动化语言程序转换为lua语言程序的方法和系统 |
CN115392160A (zh) * | 2022-06-10 | 2022-11-25 | 无锡芯光互连技术研究院有限公司 | 一种电路图描述文件的格式转换方法 |
CN115392160B (zh) * | 2022-06-10 | 2024-04-09 | 无锡芯光互连技术研究院有限公司 | 一种电路图描述文件的格式转换方法 |
CN115390852A (zh) * | 2022-08-26 | 2022-11-25 | 支付宝(杭州)信息技术有限公司 | 一种生成统一抽象语法树与程序分析的方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113504900A (zh) | 一种编程语言转换方法和装置 | |
US9122540B2 (en) | Transformation of computer programs and eliminating errors | |
CN110059006B (zh) | 代码审计方法及装置 | |
CN111221842A (zh) | 大数据处理系统及方法 | |
CN113238740B (zh) | 代码生成方法、代码生成装置、存储介质及电子设备 | |
JP2018505506A (ja) | 機械ベースの命令編集 | |
CN111309751A (zh) | 大数据处理方法及装置 | |
CN114116510A (zh) | 一种接口参数校验方法及装置 | |
US9696968B2 (en) | Lightweight optionally typed data representation of computation | |
CN114035805A (zh) | 用于预编译器的代码转换方法、装置、介质及设备 | |
CN111435352A (zh) | 一种分布式实时计算方法、装置、系统及其存储介质 | |
CN112988163B (zh) | 编程语言智能适配方法、装置、电子设备和介质 | |
CN113238739A (zh) | 一种插件开发和数据获取方法、装置、电子设备及介质 | |
CN109359055B (zh) | 一种数据测试的方法和设备 | |
US10983966B2 (en) | Database algebra and compiler with environments | |
US20140359258A1 (en) | Declarative Configuration Elements | |
US11604774B2 (en) | Method and apparatus of converting schema in deep learning framework, and computer storage medium | |
WO2021259290A1 (zh) | 存储过程转换方法、装置、设备和存储介质 | |
US11442712B2 (en) | Leveraging unspecified order of evaluation for compiler-based program optimization | |
CN113138767B (zh) | 代码语言转换方法、装置、电子设备及存储介质 | |
CN113419740A (zh) | 程序数据流的分析方法、装置、电子设备及可读存储介质 | |
CN111078230A (zh) | 一种代码生成方法和装置 | |
Ukić et al. | The influence of cyclomatic complexity distribution on the understandability of xtUML models | |
CN117472352A (zh) | 一种自动驾驶应用的开发方法及装置 | |
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 |