用于两遍源代码转换的方法技术

技术编号:39490217 阅读:8 留言:0更新日期:2023-11-24 11:12
描述了用于从第一高级编程语言到第二高级编程语言的两遍源代码转换的方法

【技术实现步骤摘要】
【国外来华专利技术】用于两遍源代码转换的方法、设备和介质
[0001]相关申请的交叉引用
[0002]本申请要求于
2022
年3月
18
日提交的专利技术名称为“用于两遍源代码转换的方法

设备和介质
(Methods,devices,and media for two

pass source code transformation)”的第
17/698,661
号美国非临时申请的利益,该在先申请要求于
2021
年5月5日提交的第
63/184,602
号美国临时专利申请的优先权,上述在先申请的全部内容通过引用并入本文



[0003]本专利技术涉及用于源代码转换的方法

设备和介质,具体涉及用于两遍源代码转换的方法

设备和介质


技术介绍

[0004]数字计算机包括硬件
(
例如,处理器设备,如中央处理单元
(central processing unit

CPU)
和图形处理单元
(graphics processing unit

GPU)、
存储器和输入
/
输出
(input/output

IO)
设备
)
和软件的不同组件,它们相互作用以实现程序员指定的高级功能
。<br/>程序员编写指定此功能的人类可读软件源代码

由于底层硬件的不同组织和结构
(
例如处理器架构

指令集架构
(instruction set architecture

ISA)、
功能等
)
与目标软件应用程序之间的这种交互的复杂性,编译器被引入作为软件和硬件之间的中间代理

[0005]源代码是用编程语言编写的

随着时间的推移,已专利技术许多编程语言

有时需要将用一种编程语言编写为源代码的程序转换为另一编程语言的源代码

编译器可以提供支持这种转换的工具:例如,
C
编译器可以用于将用
C
编程语言编写的源代码转换为汇编代码,然后可以使用汇编器将汇编代码转换为可以由处理器直接执行的机器代码

[0006]本文所使用的术语“编译器”通常是指执行编译过程的所有阶段以将源代码转换为机器代码的软件,所述编译过程包括源代码的预处理

预处理后的源代码的编译本身

汇编和链接

尽管术语“编译器”有时被理解为指仅执行这些阶段中的第二阶段
(
编译本身
)
的软件,但如本文所使用的,该术语可以指执行所有四个阶段的软件

[0007]图
1(
现有技术
)
示出了编译器执行的从高级编程语言
(
例如,
C)
到低级编程语言
(
例如,汇编
)
的源代码转换
100
的示例

高级编程语言是对计算机的硬件细节具有高抽象层次的编程语言;相比之下,低级编程语言对计算机硬件的抽象很少或没有抽象

低级编程语言包括汇编语言和机器代码;高级编程语言包括大多数现代人类可读编程语言,例如
C、C++、C#、Java、Perl、Lisp、Python、Ruby、Rust、PHP、Delphi、BASIC、Visual Basic

Javascript
,以及
Fortran

COBOL
等自动代码

在现代计算机编程中,高级编程语言通常被人类程序员用来编写源代码,而低级编程语言通常由编译器基于用高级编程语言编写的源代码生成

[0008]在所示的示例中,第一源代码库
102
是用高级第一编程语言
(
例如
C
编程语言
)
编写的

第一源代码库的高级编程语言在本文可以称为第一编程语言

本文使用的“代码库”或“源代码库”是指用单一编程语言编写的源代码集合

在一些示例中,源代码库可以包括针
对计算机程序的所有源代码

[0009]编译器
(
即,第一编程语言的编译器,例如
C
编译器
)
的词法解析器
104、
语法解析器
108、
语义解析器
112
和优化器
116
用于生成第一源代码库
102
的抽象语法树
(abstract syntax tree

AST)
或其它中间表示
(intermediate representation

IR)
,例如对应于第一源代码库
102
的汇编代码

词法解析器
104
用于解析第一源代码库
102
以生成词法标记
106
集合

语法解析器
108
用于解析词法标记
106
以生成
AST

IR 110。AST

IR 110
由语义解析器
112
解析以生成更新的
AST

IR 114。
更新的
AST

IR 114

AST

IR
优化器
116
优化,以生成第二更新的
AST

IR 118。
[0010]然后,第二更新的
AST

IR 118
由用于第二编程语言
(
即,汇编语言或机器代码等低级编程语言
)
的代码生成器
120
处理,以生成对应于第一代码库
102
的逻辑的第二
(
低级
)
编程语言的第二源代码库
122。
[0011]AST
或其它
IR 110
及其更新的
AST
或其它
IR 114、118
根据由第一编程语言的编译器编码的第一编程语言的定义而被生成


2(
现有技术
)本文档来自技高网
...

【技术保护点】

【技术特征摘要】
【国外来华专利技术】1.
一种用于处理呈第一编程语言的第一源代码库以生成呈第二编程语言的第二源代码库的方法,所述第一编程语言和所述第二编程语言是高级编程语言,所述方法包括:执行第一遍,所述第一遍包括:使用第一编程语言编译器来处理所述第一源代码库以生成抽象语法树
(AST)
;以及处理所述
AST
,以生成呈所述第二编程语言的第一遍源代码库;以及执行第二遍,所述第二遍包括:处理所述第一遍源代码库和所述第二编程语言的语法,以生成第一解析树;通过应用转换规则集合来处理所述解析树,以生成具有所述第二编程语言的一个或多个期望属性的第二解析树;以及使用第二遍反解析器处理所述第二解析树,以生成所述第二源代码库
。2.
根据权利要求1所述的方法,其中处理所述
AST
以生成所述第一遍源代码库包括:使用转换器来处理所述
AST
,以生成根据所述第二编程语言的所述第一源代码库的第二
AST
;以及使用
AST
反解析器来处理所述第二
AST
以生成所述第一遍源代码库
。3.
根据权利要求2所述的方法,其中所述转换器基于所述第一编程语言编译器和第二编程语言编译器而被生成
。4.
根据权利要求1至3中任一项所述的方法,其中处理所述第一源代码库以生成所述
AST
包括:使用编译器词法解析器来处理所述第一源代码库,以生成第一遍词法标记集合;使用编译器语法解析器来处理所述第一遍词法标记集合,以生成初步
AST
;以及使用编译器语义解析器来处理所述初步
AST
,以生成所述
AST。5.
根据权利要求1至4中任一项所述的方法,其中处理所述第一遍源代码库和所述第二编程语言的语法,以生成所述第一解析树包括:使用第二遍词法解析器来处理所述第一遍源代码库和所述第二编程语言的所述语法,以生成第二遍词法标记集合;以及使用第二遍语法解析器来处理所述第二遍词法标记集合和所述第二编程语言的所述语法,以生成所述第一解析树
。6.
根据权利要求1至5中任一项所述的方法,其中:所述第二解析树基于所述第一解析树和所述第二编程语言的所述语法而被生成;以及所述第二源代码库基于所述第二解析树和所述第二编程语言的所述语法而被生成
。7.
根据权利要求1至6中任一项所述的方法,还包括,在执行所述第二遍之后:执行所述第二遍的一个或多个附加迭代,每个迭代使用由先前迭代生成的所述第二源代码库来代替所述第一遍源代码库
。8.
根据权利要求5所述的方法,其中所述第二遍词法解析器

所述第二遍语法解析器

所述转换规则集合和所述第二遍反解析器使用所述
TXL
编程语言而被生成
。9.
根据权利要求1至8中任一项所述的方法,其中:所述第二编程语言是存储器安全编程语言;所述第二编程语言的所述一个或多个期望属性包括存储器安全;以及所述第二解析树被生成,使得所述第一解析树的一个或多个函数对应于所述第二解析
树的一个或多个存储器安全函数
。10.
根据权利要求9所述的方法,其中:所述第一编程语言是存储器不安全编程语言;以及通过应用转换规则集合来处理所述第一解析树,以生成具有所述第二编程语言的一个或多个期望属性的所述第二解析树,包括:标识所述第一解析树的一个或多个不安全参数或变量;确定所述第一解析树的所述一个或多个函数不依赖于所述一个或多个不安全参数或变量中的任何一个;以及针对所述第一解析树的所述一个或多个函数中的每个函数,生成所述第二解析树的对应的存储器安全函数
。11.
根据权利要求
10
所述的方法,其中:所述第一编程语言是
C
;所述第二编程语言是
Rust
;以及生成对应于所述第一解析树的不安全函数的所述第二解析树的存储器安全函数包括:生成所述存储器安全函数以省略所述存储器不安全函数的不安全关键字
。12.
一种设备,其中包括:处理器;以及存储器,存储指令,所述指令在由...

【专利技术属性】
技术研发人员:M
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1