CN110187885B - 一种量子程序编译的中间代码生成方法及装置 - Google Patents
一种量子程序编译的中间代码生成方法及装置 Download PDFInfo
- Publication number
- CN110187885B CN110187885B CN201910495379.0A CN201910495379A CN110187885B CN 110187885 B CN110187885 B CN 110187885B CN 201910495379 A CN201910495379 A CN 201910495379A CN 110187885 B CN110187885 B CN 110187885B
- Authority
- CN
- China
- Prior art keywords
- quantum
- source code
- information
- code
- nodes
- 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
- 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/425—Lexical 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/44—Encoding
- G06F8/447—Target code generation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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
本发明公开了一种量子程序编译的中间代码生成方法及装置,方法包括:获得量子程序的源代码;其中,所述源代码的逻辑结构至少包括:量子分支结构、量子循环结构和量子逻辑门;对所述源代码进行词法分析,将所述源代码分割成多个语法单元token;对所有的token进行语法分析,构建抽象语法树AST;其中,所述AST包括:一个根节点、多个子树节点和多个叶子节点,所述根节点和子树节点包括语法规则信息,所述叶子节点包括token信息;根据所述AST的各节点信息和预设构造规则,构造所述源代码对应的中间代码。利用本发明实施例,能够避免重复劳动,减少资源占用。
Description
技术领域
本发明属于量子计算技术领域,特别是一种量子程序编译的中间代码生成方法及装置。
背景技术
编译是指把高级计算机语言编写的程序代码翻译成为计算机可以运行的二进制机器语言代码的过程,利用编译程序,可以将某一种程序设计语言编写的程序翻译成等价的另一种语言的程序。编译程序又称编译器,例如,一种经典语言编译器LLVM(Low LevelVirtual Machine,底层虚拟机),其前端描述的是针对语言的表现形式,比如C语言、JAVA语言。在描述是针对不同的硬件机器、软件开发包或者指令集,比如X86指令集、ARM指令集或单片机等等。
但是,现有的LLVM等编译器架构绝无可能直接应用到量子计算机和量子语言编写的量子程序上。并且,现有的各研究平台往往开发有独立的量子语言、量子指令集及量子软件开发包,对某一种量子语言编写的量子程序编译时,只能编译到对应研究平台的量子指令集上,或者,对某一研究平台开发的量子程序编译时,后端只能连接到对应研究平台开发的量子软件开发包上,使得基于不同公司的量子指令集或量子软件开发包进行项目开发,需要使用对方开发的量子语言编写对应不同的量子程序,造成重复劳动和资源占用较多的问题。
发明内容
本发明的目的是提供一种量子程序编译的中间代码生成方法及装置,以解决现有技术中的不足,它能够避免重复劳动,减少资源占用。
本发明采用的技术方案如下:
一种量子程序编译的中间代码生成方法,所述方法包括:
获得量子程序的源代码;其中,所述源代码的逻辑结构至少包括:量子分支结构、量子循环结构和量子逻辑门;
对所述源代码进行词法分析,将所述源代码分割成多个语法单元token;
对所有的token进行语法分析,构建抽象语法树AST;其中,所述AST包括:一个根节点、多个子树节点和多个叶子节点,所述根节点和子树节点包括语法规则信息,所述叶子节点包括token信息;
根据所述AST的各节点信息和预设构造规则,构造所述源代码对应的中间代码。
可选的,在对所有的token进行语法分析后,所述方法还包括:
根据token及其之间的语法关系,检查是否存在语法错误;
如果存在,输出语法错误信息。
可选的,在对所有的token进行语法分析后,所述方法还包括:
构建所述源代码对应的符号表;其中,所述符号表至少包括:token类型信息及作用域信息。
可选的,所述方法还包括:
对所述中间代码进行优化;其中,所述优化包括以下任意一种或多种:局部优化、循环结构优化和全局优化。
可选的,所述方法还包括:
基于优化后的中间代码生成目标机器的机器代码。
可选的,所述根据所述AST的各节点信息和预设构造规则,构造所述源代码对应的中间代码,包括:
遍历所述AST,从第一级的根节点开始,递归访问所述AST的节点,获得各节点及其上下一级节点的节点信息;
根据所述节点信息所对应的逻辑结构信息,结合预设构造规则,构造各节点对应的中间子代码;其中,所述预设构造规则包括:针对token自身及逻辑结构的语义映射规则;
从最后一级的叶子节点开始,规约各级节点的中间子代码,生成所述源代码等价对应的中间代码;其中,所述中间代码的表现形式由预设构造规则确定。
一种量子程序编译的中间代码生成装置,所述装置包括:
获得模块,用于获得量子程序的源代码;其中,所述源代码的逻辑结构至少包括:量子分支结构、量子循环结构和量子逻辑门;
词法分析模块,用于对所述源代码进行词法分析,将所述源代码分割成多个语法单元token;
语法分析模块,用于对所有的token进行语法分析,构建抽象语法树AST;其中,所述AST包括:一个根节点、多个子树节点和多个叶子节点,所述根节点和子树节点包括语法规则信息,所述叶子节点包括token信息;
构造模块,用于根据所述AST的各节点信息和预设构造规则,构造所述源代码对应的中间代码。
可选的,在对所有的token进行语法分析后,所述装置还包括:
检查模块,用于根据token及其之间的语法关系,检查是否存在语法错误;如果存在,输出语法错误信息。
可选的,在对所有的token进行语法分析后,所述装置还包括:
构建模块,用于构建所述源代码对应的符号表;其中,所述符号表至少包括:token的类型信息及作用域信息。
可选的,所述装置还包括:
优化模块,用于对所述中间代码进行优化;其中,所述优化包括以下任意一种或多种:局部优化、循环结构优化和全局优化。
可选的,所述装置还包括:
生成模块,用于基于优化后的中间代码生成目标机器的机器代码。
可选的,所述构造模块,具体用于:
遍历所述AST,从第一级的根节点开始,递归访问所述AST的节点,获得各节点及其上下一级节点的节点信息;
根据所述节点信息所对应的逻辑结构信息,结合预设构造规则,构造各节点对应的中间子代码;其中,所述预设构造规则包括:针对token自身及逻辑结构的语义映射规则;
从最后一级的叶子节点开始,规约各级节点的中间子代码,生成所述源代码等价对应的中间代码;其中,所述中间代码的表现形式由预设构造规则确定。
与现有技术相比,本发明首先获得量子程序的源代码,对所述源代码进行词法分析,将所述源代码分割成多个语法单元token,对所有的token进行语法分析,构建抽象语法树AST,根据所述AST的各节点信息和预设构造规则,构造所述源代码对应的中间代码,该中间代码是源代码等价的抽象表示,脱离源代码使用的量子语言形式,仅仅表示源代码对应的实际操作,使之与前端的量子程序源代码及后端的硬件机器、量子指令集或量子软件开发包均无关,从而后续能够将其转换成不同量子语言所开发的量子指令集中的量子指令,或对接到不同量子语言所开发的量子软件开发包上,减少重复劳动和人力物力资源的占用。
附图说明
图1是本发明实施例提供的一种量子程序编译的中间代码生成方法的流程示意图;
图2是本发明实施例提供的一种抽象语法树的结构示意图;
图3是本发明实施例提供的一种量子程序编译的中间代码生成装置的结构示意图。
具体实施方式
下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
参见图1,图1为本发明实施例提供的一种量子程序编译的中间代码生成方法的流程示意图,可以包括如下步骤:
S101,获得量子程序的源代码;其中,所述源代码的逻辑结构至少包括:量子分支结构、量子循环结构和量子逻辑门;
本领域技术人员可以理解的是,现有的量子编程语言Qrunes由三部分构成:设置模块(Setting)、量子程序构建模块(QCode)和经典编程模块(Script),设置模块主要是对量子程序源代码的信息配置进行描述,对经典编程模块的语言类型和量子软件开发所需的依赖文件的配置;量子程序构建模块用于用户自定义编写量子程序,可以满足量子算法和量子应用的设计开发;经典编程模块类似于宿主(Host)语言,用户可使用自己熟悉的其他经典编程语言来调用量子软件开发包(Toolkit)和量子程序构建模块的功能来实现自己的量子程序。以下以基于Qrunes量子语言开发的量子程序为例进行说明。
量子程序的源代码从组成上分为变量、表达式、函数和语句,结构上分为顺序结构、分支结构、循环结构、量子分支结构、量子循环结构,具体如下:
变量:程序变量是在量子计算机中用来存储数据的字母或者值,主要包括量子变量、经典变量和经典辅助变量三种类型,量子变量用来表示一个量子比特或者一组量子比特,经典变量是用来处理量子程序中跟经典计算机相关的常规变量类型,经典辅助变量属于经典变量,该变量的值是在量子程序被量子物理设备处理之前自行确定;
表达式:表达式是一串可以被确定值的代码,有功能(赋值、逻辑运算等)表达式和算术表达式两种类型,作为一组代码(数值、变量、操作运算符等)的集合,表达式均会返回一个值;一段示例性代码表示为:
number=0.175;//赋值表达式,该表达式使用运算符“=”将数值0.175赋值给变量number
X||Y//逻辑表达式
12+13//算术表达式
函数:函数是用户自定义的一组语句的集合,能够完成用户指定的某种特定功能或者算法,主要包括函数定义和函数声明,函数声明主要体现函数的功能,以便在执行程序照此检查函数,函数定义由三部分组成:函数名、参数列表、函数体,一段关于2量子比特的D-J算法的函数定义的示例性代码表示为:
D_J_Alg(qvec q,cvec c)
{
RX(q[1],Pi);
H(q[0]);
H(q[1]);
CNOT(q[0],q[1]);
H(q[0]);
Measure(q[0],c[0]);
}
语句:语句是量子程序运行时执行某个动作的语法结构,它改变变量的值、产生输出、或处理输入,语句类型有经典辅助语句、经典语句、量子逻辑门和函数调用四种;量子逻辑门是量子线路的基础,是量子计算模型中的一个基本操作单元,类似于传统逻辑门中的数位线路,通过操作逻辑门来实现量子程序。在量子程序中,已经预先定义了常规的量子逻辑门的操作,比如Hadamard(H门,即阿达马门)、Pauli-X(泡利-X门)等;一段量子逻辑门操作的示例性代码表示为:
RX(q[1],3.1415926);//RX门操作
CZ(q[1],q[2]);//CZ门操作
程序逻辑,包括如下结构:
顺序结构:只需按照量子程序的代码顺序自上而下,依次执行即可;
分支结构:需要根据先验的条件结果来选择执行顺序,而不是按照代码排序的物理逻辑执行,在量子程序主要是体现在if分支中;一段示例性代码表示为:
循环结构:在经典程序语言中是非常常见的一种程序逻辑,通过描述重复执行的代码,可以大大减少源代码的重复书写工作量;在量子程序主要是体现在for循环中,一段示例性代码表示为:
量子分支结构:量子程序中一种特有的程序逻辑结构,其中的判定条件为量子程序执行中寄存在经典比特位中对应的量子比特位信息;一段示例性代码表示为:
qif(c[1]||c[2])
{
H(q[1]);
}
qelse
{
H(q[2]);
}
量子循环结构:量子程序中一种特有的程序逻辑结构,一段示例性代码表示为:
qwhile(c[2]>10)
{
c[2]++;
}
需要说明的是,以上现有的代码仅仅作为示例,并不构成对本发明技术方案的限定。
S102,对所述源代码进行词法分析,将所述源代码分割成多个语法单元token;
其中,token是源代码的逐个组成单元,如命名、关键字、数值和符号等等。以一行代码为例:
int a=5;
词法分析主要是识别源代码,将源代码分解为一个个的单词,如“int”、“a”、“=”、“5”、“;”,作为一个个语法单元token,其中,“int”是关键字,“a”是命名,“=”是赋值符号,“5”是数值,“;”为结束符号。词法分析面向的对象是单个的字符,目的是把它们组成有效的单词(字符串)。
S103,对所有的token进行语法分析,构建抽象语法树AST;其中,所述AST包括:一个根节点、多个子树节点和多个叶子节点,所述根节点和子树节点包括语法规则信息,所述叶子节点包括token信息;
具体的,构建抽象语法树的目的就是将量子程序源码在定义的语法规则下进行树状的表示,清晰展示量子程序源代码的代码结构。语法分析即是识别并判断其中的语法规则,以token作为叶子节点,构建语法树,叶子节点的上级各节点(上至根节点)体现的即为该叶子节点相关的语法规则。
示例性的,一段代码表示如下:
qwhile(c[2]>10)
{
c[2]++;
}
对应的抽象语法树如图2所示,根节点为qwhile操作节点,叶子节点为各个token。一颗抽象语法树的叶子节点从左到右构成了树的结果,即上述示例性的代码构成的语法树的叶子节点为“qwhile”、“(”、“c”、“[”、“2”、“]”、“>”、“10”、“)”、“{”、“c”、“[”、“2”、“]”、“++”、“;”、“}”,除根节点与叶子节点,其余为子树节点,子树节点的语法规则可以理解为节点名称。为了便于本领域的技术人员理解,根及子树节点对应的通用技术术语英文注释为:
qwhile操作:q_while_operation,q表示量子quantum;量子判定条件:q_condition;qwhile语句:q_while_stmt;qwhile语句单项:q_while_stmt_item;语句:statement;表达式语句:exp_stmt;或表达式:inclu_exp;异或表达式:exclu_exp;与表达式:and_exp;等于表达式:equal_exp;关系表达式:relation_exp;移位表达式:shift_exp;加法表达式:additive_exp;乘法表达式:multi_exp;转换表达式:cast_exp;一元表达式:unary_exp;后缀表达式:postfix_exp;基本表达式:primary_exp;赋值表达式:assignment_exp;条件表达式:condition_exp;逻辑或表达式:logicOr_exp;逻辑与表达式:logicAnd_exp;表达式:expression。
S104,根据所述AST的各节点信息和预设构造规则,构造所述源代码对应的中间代码。
具体的,可以遍历所述AST,从第一级的根节点开始,递归访问所述AST的节点,获得各节点及其上下一级节点的节点信息;
根据所述节点信息所对应的逻辑结构信息,结合预设构造规则,构造各节点对应的中间子代码;其中,所述预设构造规则包括:针对token自身及逻辑结构的语义映射规则;
从最后一级的叶子节点开始,规约各级节点的中间子代码,生成所述源代码等价对应的中间代码;其中,所述中间代码的表现形式由预设构造规则确定。
在实际应用中,可以通过编写构造器(构造程序)实现中间代码构建,一个节点对应一个生成该节点对应中间子代码的构造器,每个中间子代码构造器的功能与节点信息一一对应。其中,本发明技术方案可以控制决定是否进入AST的一个子树进行遍历,可以控制遍历深度(如遍历到哪一级节点),并且可以显式递归调用构造器。
总体上,源代码由函数、变量、表达式和语句组成,以此角度,构造器还可分类为:
函数构造器,处理的数据结构为:
{
函数名,
函数参数,
函数体
};
变量构造器,处理的数据结构为:
{
变量类型/限定修饰符,
变量名,
表达式,
变量类型
};
表达式构造器,处理的数据结构为:
{
操作数,
操作符,
表达式类型
};
语句构造器,处理的数据结构为:
{
表达式,
语句类型
}。
遍历抽象语法树,递归访问语法树节点,针对各级节点对应的逻辑结构中的信息,调用其子节点对应的中间子代码构造器,通过匹配(语法树从上到下)的方式传递该节点信息至子节点对应的构造器中,这样每个构造器能够获得自身对应节点及其上一级父节点的信息(每个构造器相当于基于对应节点信息编写的一段构造程序,故自身携带有对应节点的信息)。
然后,通过规约(语法树从下到上)的方式执行各个节点对应的构造器功能,输出节点对应的中间子代码,每个节点会将对应生成的中间子代码返回至其上一级的父节点,最终在根节点处生成与源代码等价的中间代码,该中间代码仅仅通用表示量子程序的实际操作,即干了什么事。逐级的递归调用,能够使得针对父节点的逻辑处理具备较高的抽象层级。
简言之,递归是一种程序的执行方式,从根节点开始,传递根节点信息至下一级节点对应的构造器,下一级节点传递该节点信息至下下级节点对应的构造器,逐级向下直至叶子节点,可以理解为递的过程。然后,从最后一级的叶子节点开始,该叶子节点是token节点,如该token为“a”,对应的构造器根据预设构造规则将“a”的语义转译成“aaa”作为中间子代码,然后将“aaa”返回给上一级的父节点,该父节点是子树节点,包含有语法规则,其对应的构造器根据该语法规则所对应的逻辑结构,利用预设构造规则,转译该逻辑结构,生成等价体现该逻辑结构功能的中间子代码“bbb”,同时合并上述叶子节点返回的中间子代码“aaa”,返回给该父节点的上一级父节点,依次类推,最终规约至根节点,由所有中间子代码生成最终的中间代码,可以理解为归的过程。利用递归方式转译源代码为中间代码,能够保证源代码的变量类型和其作用域、语句的控制流等等的转译准确性。
一种虚拟机相关的示例代码为:
其对应的中间代码为
max
0 rem beginIf
1 ldv t0
2 ldv t1
3 gt
4 jz 9
5 ldv t0
6 ret
7 jmp 9
8 rem endIf
9 ldv t1
10 ret
main
0 ldv t0
1 ldv t1
2 call max 2
3 halt
其中,ldv为取变量load variable,ldc为取变量load constant,halt为停机指令,call为函数调用指令,ret为函数调用返回return,add为加法,sub为减法,mul为乘法,div为除法,gt为大于,rem为注释remark,jz为jump if zero。
以上仅仅作为示例,实际生成的中间代码形式(长什么样子)由预设构造规则决定,具体以根据需求实现为准。
其中,在编译器领域,中间代码是对应于后端硬件的机器语言的抽象,可以抽象地表示后端机器的操作,不依赖于前端源代码形式,以及后端机器型号。中间代码还可用于后续转换成量子指令集中的量子指令,或用于对接到量子软件开发包。中间代码既能够抽象量子程序源代码的程序逻辑、具体执行等编程语言的共有特性,并且是面向语法,易于被翻译成后端机器识别的、和源代码等价的目标代码。
具体的,在对所有的token进行语法分析后,所述方法还可以包括:
根据token及其之间的语法关系,检查是否存在语法错误;
如果存在,输出语法错误信息。
需要说明的是,语法分析的目的在于检查语法错误,然后构建抽象语法树。检查语法错误,即是指检查token组成的变量、表达式、语句和函数的语法是否存在错误,如果存在,可以打印出错误信息(如错误类型、错误内容等,不限于此)显示给用户。源代码虽然被分割为一个个token,token之间仍存在语法关系,可以理解为:token之间的语法关系正是指源代码的语法,检查的即为源代码的语法错误,但当前步骤下源代码的概念已不存在(已被分割)。
具体的,在对所有的token进行语法分析后,所述方法还可以包括:
构建所述源代码对应的符号表;其中,所述符号表包括token的属性信息,所述属性信息至少包括:类型信息及作用域信息。
其中,该步骤的执行时序优选在检查语法错误及构建抽象语法树后,可以通过提取源代码的语素信息和语法逻辑信息构建符号表,用于后续构建量子语言的类型系统。符号表包括token类型及对应作用域等信息,具体可以包含一张变量符号表,或,包含一张变量符号表和一张类型符号表。符号表的构建为现有技术,本发明在此不对其赘述。
具体的,所述方法还可以包括:对所述中间代码进行优化;其中,所述优化可以包括以下任意一种或多种:局部优化、循环结构优化和全局优化。
本领域技术人员能够理解的是,优化的目的是保证最后生成的目标代码运行时间、运行的时空效率得到提高,局部优化主要包括无用运算的删除、代码合并等等,循环优化是指循环结构对应代码的优化,全局优化是对程序全局的优化。
具体的,所述方法可以还包括:基于优化后的中间代码生成目标机器的机器代码,即目标代码。
在实际应用中,主要根据目标机器的特性、目标机器的寄存器信息和目标机器的指令集等信息,将生成的中间代码转换成特定目标机器的机器码。具体转换与现有编译器如LLVM原理基本相同,可通过现有技术实现。
可见,与现有技术相比,本发明首先获得量子程序的源代码,对所述源代码进行词法分析,将所述源代码分割成多个语法单元token,对所有的token进行语法分析,构建抽象语法树AST,根据所述AST的各节点信息和预设构造规则,构造所述源代码对应的中间代码,该中间代码是源代码等价的抽象表示,脱离源代码使用的量子语言形式,仅仅表示源代码对应的实际操作,使之与前端的量子程序源代码及后端的硬件机器、量子指令集或量子软件开发包均无关,从而后续能够将其转换成不同量子语言所开发的量子指令集中的量子指令,或对接到不同量子语言所开发的的量子软件开发包上,减少重复劳动和人力物力资源的占用。
参见图3,图3为本发明实施例提供的一种量子程序编译的中间代码生成装置的结构示意图,与图1所示的流程相对应,所述装置包括:
获得模块301,用于获得量子程序的源代码;其中,所述源代码的逻辑结构至少包括:量子分支结构、量子循环结构和量子逻辑门;
词法分析模块302,用于对所述源代码进行词法分析,将所述源代码分割成多个语法单元token;
语法分析模块303,用于对所有的token进行语法分析,构建抽象语法树AST;其中,所述AST包括:一个根节点、多个子树节点和多个叶子节点,所述根节点和子树节点包括语法规则信息,所述叶子节点包括token信息;
构造模块304,用于根据所述AST的各节点信息和预设构造规则,构造所述源代码对应的中间代码。
具体的,在对所有的token进行语法分析后,所述装置还包括:
检查模块,用于根据token及其之间的语法关系,检查是否存在语法错误;如果存在,输出语法错误信息。
具体的,在对所有的token进行语法分析后,所述装置还包括:
构建模块,用于构建所述源代码对应的符号表;其中,所述符号表至少包括:token类型信息及作用域信息。
具体的,所述装置还包括:
优化模块,用于对所述中间代码进行优化;其中,所述优化包括以下任意一种或多种:局部优化、循环结构优化和全局优化。
具体的,所述装置还包括:
生成模块,用于基于优化后的中间代码生成目标机器的机器代码。
具体的,所述构造模块304,具体用于:
遍历所述AST,从第一级的根节点开始,递归访问所述AST的节点,获得各节点及其上下一级节点的节点信息;
根据所述节点信息所对应的逻辑结构信息,结合预设构造规则,构造各节点对应的中间子代码;其中,所述预设构造规则包括:针对token自身及逻辑结构的语义映射规则;
从最后一级的叶子节点开始,规约各级节点的中间子代码,生成所述源代码等价对应的中间代码;其中,所述中间代码的表现形式由预设构造规则确定。
可见,与现有技术相比,本发明首先获得量子程序的源代码,对所述源代码进行词法分析,将所述源代码分割成多个语法单元token,对所有的token进行语法分析,构建抽象语法树AST,根据所述AST的各节点信息和预设构造规则,构造所述源代码对应的中间代码,该中间代码是源代码等价的抽象表示,脱离源代码使用的量子语言形式,仅仅表示源代码对应的实际操作,使之与前端的量子程序源代码及后端的硬件机器、量子指令集或量子软件开发包均无关,从而后续能够将其转换成不同量子语言所开发的量子指令集中的量子指令,或对接到不同量子语言所开发的量子软件开发包上,减少重复劳动和人力物力资源的占用。
以上依据图式所示的实施例详细说明了本发明的构造、特征及作用效果,以上所述仅为本发明的较佳实施例,但本发明不以图面所示限定实施范围,凡是依照本发明的构想所作的改变,或修改为等同变化的等效实施例,仍未超出说明书与图示所涵盖的精神时,均应在本发明的保护范围内。
Claims (9)
1.一种量子程序编译的中间代码生成方法,其特征在于,所述方法包括:
获得量子程序的源代码;其中,所述源代码的逻辑结构至少包括:量子分支结构、量子循环结构和量子逻辑门;
对所述源代码进行词法分析,将所述源代码分割成多个语法单元token;
对所有的token进行语法分析,构建抽象语法树AST;其中,所述AST包括:一个根节点、多个子树节点和多个叶子节点,所述根节点和子树节点包括语法规则信息,所述叶子节点包括token信息;
遍历所述AST,从第一级的根节点开始,递归访问所述AST的节点,获得各节点及其上下一级节点的节点信息;
根据所述节点信息所对应的逻辑结构信息,结合预设构造规则,构造各节点对应的中间子代码;其中,所述预设构造规则包括:针对token自身及逻辑结构的语义映射规则;
从最后一级的叶子节点开始,规约各级节点的中间子代码,生成所述源代码等价对应的中间代码;其中,所述中间代码的表现形式由预设构造规则确定。
2.根据权利要求1所述的量子程序编译的中间代码生成方法,其特征在于,在对所有的token进行语法分析后,所述方法还包括:
根据token及其之间的语法关系,检查是否存在语法错误;
如果存在,输出语法错误信息。
3.根据权利要求2所述的量子程序编译的中间代码生成方法,其特征在于,在对所有的token进行语法分析后,所述方法还包括:
构建所述源代码对应的符号表;其中,所述符号表至少包括:token的类型信息及作用域信息。
4.根据权利要求3所述的量子程序编译的中间代码生成方法,其特征在于,所述方法还包括:
对所述中间代码进行优化;其中,所述优化包括以下任意一种或多种:
局部优化、循环结构优化和全局优化。
5.根据权利要求4所述的量子程序编译的中间代码生成方法,其特征在于,所述方法还包括:
基于优化后的中间代码生成目标机器的机器代码。
6.一种量子程序编译的中间代码生成装置,其特征在于,所述装置包括:
获得模块,用于获得量子程序的源代码;其中,所述源代码的逻辑结构至少包括:量子分支结构、量子循环结构和量子逻辑门;
词法分析模块,用于对所述源代码进行词法分析,将所述源代码分割成多个语法单元token;
语法分析模块,用于对所有的token进行语法分析,构建抽象语法树AST;其中,所述AST包括:一个根节点、多个子树节点和多个叶子节点,所述根节点和子树节点包括语法规则信息,所述叶子节点包括token信息;
构造模块,用于遍历所述AST,从第一级的根节点开始,递归访问所述AST的节点,获得各节点及其上下一级节点的节点信息;根据所述节点信息所对应的逻辑结构信息,结合预设构造规则,构造各节点对应的中间子代码;其中,所述预设构造规则包括:针对token自身及逻辑结构的语义映射规则;从最后一级的叶子节点开始,规约各级节点的中间子代码,生成所述源代码等价对应的中间代码;其中,所述中间代码的表现形式由预设构造规则确定。
7.根据权利要求6所述的量子程序编译的中间代码生成装置,其特征在于,在对所有的token进行语法分析后,所述装置还包括:
检查模块,用于根据token及其之间的语法关系,检查是否存在语法错误;如果存在,输出语法错误信息。
8.根据权利要求7所述的量子程序编译的中间代码生成装置,其特征在于,在对所有的token进行语法分析后,所述装置还包括:
构建模块,用于构建所述源代码对应的符号表;其中,所述符号表至少包括token的类型信息及作用域信息。
9.根据权利要求8所述的量子程序编译的中间代码生成装置,其特征在于,所述装置还包括:
优化模块,用于对所述中间代码进行优化;其中,所述优化包括以下任意一种或多种:
局部优化、循环结构优化和全局优化。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910495379.0A CN110187885B (zh) | 2019-06-10 | 2019-06-10 | 一种量子程序编译的中间代码生成方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910495379.0A CN110187885B (zh) | 2019-06-10 | 2019-06-10 | 一种量子程序编译的中间代码生成方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110187885A CN110187885A (zh) | 2019-08-30 |
CN110187885B true CN110187885B (zh) | 2023-03-31 |
Family
ID=67720786
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910495379.0A Active CN110187885B (zh) | 2019-06-10 | 2019-06-10 | 一种量子程序编译的中间代码生成方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110187885B (zh) |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP4026069A4 (en) * | 2019-09-03 | 2023-09-20 | Zapata Computing, Inc. | COMPUTER ARCHITECTURE FOR EXECUTING QUANTUM PROGRAMS |
CN110716953B (zh) * | 2019-10-10 | 2023-08-22 | 深圳前海微众银行股份有限公司 | Sql语句自动生成方法、装置、设备及可读存储介质 |
CN110928550B (zh) * | 2019-11-19 | 2023-11-24 | 上海工程技术大学 | 基于关键词Trie树消除GCC抽象语法树冗余的方法 |
CN114175057A (zh) | 2019-12-09 | 2022-03-11 | 视界量子计算有限责任公司 | 用于数字和量子计算机上的统一计算的系统和方法 |
CN111178532B (zh) * | 2019-12-11 | 2023-12-12 | 本源量子计算科技(合肥)股份有限公司 | 一种量子线路匹配的方法、装置、存储介质和电子装置 |
CN111190594B (zh) * | 2019-12-23 | 2023-09-22 | 北京水滴科技集团有限公司 | Vue组件的文档生成方法及装置 |
CN111209004B (zh) * | 2019-12-30 | 2023-09-01 | 北京水滴科技集团有限公司 | 代码转换方法及装置 |
US11829737B2 (en) * | 2020-01-16 | 2023-11-28 | Microsoft Technology Licensing, Llc | Using compiler optimization to enable automatic generation of combinational circuits from high-level programs |
CN113138796A (zh) * | 2020-01-19 | 2021-07-20 | 上海商汤智能科技有限公司 | 代码生成方法及装置、电子设备和存储介质 |
CN111367527B (zh) * | 2020-02-18 | 2023-03-28 | 北京字节跳动网络技术有限公司 | 一种语言处理的方法、装置、介质和电子设备 |
CN111580825A (zh) * | 2020-04-28 | 2020-08-25 | 中国科学院软件研究所 | 一种面向机械臂程序开发编程语言的编译方法及系统 |
CN113296755A (zh) * | 2020-06-08 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 代码结构树库构建方法和信息推送方法 |
CN111767055A (zh) * | 2020-06-16 | 2020-10-13 | 合肥本源量子计算科技有限责任公司 | 一种量子程序的编译方法及装置 |
CN112114793B (zh) * | 2020-09-14 | 2023-09-22 | 中国船舶重工集团公司第七0九研究所 | 通用json对象转换为c/c++结构化对象的代码生成方法及系统 |
US11829842B2 (en) | 2020-10-07 | 2023-11-28 | International Business Machines Corporation | Enhanced quantum circuit execution in a quantum service |
CN112346730B (zh) * | 2020-11-04 | 2021-08-27 | 星环信息科技(上海)股份有限公司 | 一种中间表示的生成方法、计算机设备及存储介质 |
CN113434938B (zh) * | 2021-06-29 | 2024-02-13 | 广联达科技股份有限公司 | Bim模型的检查方法、装置、计算机设备及存储介质 |
CN113703779B (zh) * | 2021-09-06 | 2024-04-16 | 王喆 | 一种跨平台的多语言编译方法和超轻量物联网虚拟机 |
CN113704706B (zh) * | 2021-09-23 | 2023-10-27 | 深圳市腾讯信息技术有限公司 | 代码加固方法、装置 |
CN114911711A (zh) * | 2022-06-14 | 2022-08-16 | 南方电网科学研究院有限责任公司 | 一种代码缺陷分析方法、装置、电子设备及存储介质 |
CN115809063B (zh) * | 2022-12-05 | 2023-08-22 | 星环信息科技(上海)股份有限公司 | 一种存储过程编译方法、系统、电子设备和存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109800883A (zh) * | 2019-01-25 | 2019-05-24 | 合肥本源量子计算科技有限责任公司 | 量子机器学习框架构建方法、装置及量子计算机 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103123590A (zh) * | 2011-11-18 | 2013-05-29 | 中国科学院沈阳计算技术研究所有限公司 | 指令表il程序到c语言程序的编译方法 |
US9760346B2 (en) * | 2013-05-31 | 2017-09-12 | Microsoft Technology Licensing, Llc | Deeply parallel source code compilation |
CN105159715B (zh) * | 2015-09-01 | 2018-07-20 | 南京大学 | 一种基于抽象语法树节点变更抽取的Python代码变更提示方法 |
IL260711B2 (en) * | 2016-01-24 | 2024-02-01 | Syed Kamran Hasan | Computer security is based on artificial intelligence |
US20190042965A1 (en) * | 2018-03-30 | 2019-02-07 | James Clarke | Apparatus and method for a field programmable quantum array |
CN108874396A (zh) * | 2018-05-31 | 2018-11-23 | 苏州蜗牛数字科技股份有限公司 | 基于hlsl的多平台多目标语言的交叉编译器及编译方法 |
-
2019
- 2019-06-10 CN CN201910495379.0A patent/CN110187885B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109800883A (zh) * | 2019-01-25 | 2019-05-24 | 合肥本源量子计算科技有限责任公司 | 量子机器学习框架构建方法、装置及量子计算机 |
Non-Patent Citations (1)
Title |
---|
浅谈程序设计语言编译原理;付叶蔷;《数码世界》(第04期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110187885A (zh) | 2019-08-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110187885B (zh) | 一种量子程序编译的中间代码生成方法及装置 | |
Aho et al. | Code generation using tree matching and dynamic programming | |
US8516458B2 (en) | System representation and handling techniques | |
Chambers et al. | An efficient implementation of SELF a dynamically-typed object-oriented language based on prototypes | |
CN111767055A (zh) | 一种量子程序的编译方法及装置 | |
US8850414B2 (en) | Direct access of language metadata | |
Spies et al. | Transfinite Iris: resolving an existential dilemma of step-indexed separation logic | |
JPH06501579A (ja) | プログラミング演算の効果と従属性とを表現する方法及び装置 | |
Afroozeh et al. | One parser to rule them all | |
CN115809063A (zh) | 一种存储过程编译方法、系统、电子设备和存储介质 | |
EP2096534A1 (en) | System representation and handling techniques | |
Reis et al. | An on-the-fly grammar modification mechanism for composing and defining extensible languages | |
JP5600301B2 (ja) | システム表現およびハンドリング技術 | |
Koskimies et al. | The design of a language processor generator | |
Wu et al. | Component-based LR parsing | |
Saraiva et al. | Data structure free compilation | |
Piñeiro et al. | Perldoop2: A big data-oriented source-to-source Perl-Java compiler | |
Husák et al. | Optimizing transformations of dynamic languages compiled to intermediate representations | |
Hochrainer et al. | A pred-LL (*) Parsable Typed Higher-Order Macro System for Architecture Description Languages | |
Pahade et al. | Introduction to Compiler and its Phases | |
Anureev | Introduction to the Atoment language | |
Edelmann et al. | LL (1) parsing with derivatives and zippers | |
Fegaras | CSE 5317/4305: Design and Construction of Compilers | |
Singh | Compiler Design | |
Quesada et al. | A tool for model-based language specification |
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 |