CN112416313B - 支持大整数数据类型和运算符的编译方法 - Google Patents

支持大整数数据类型和运算符的编译方法 Download PDF

Info

Publication number
CN112416313B
CN112416313B CN201910782836.4A CN201910782836A CN112416313B CN 112416313 B CN112416313 B CN 112416313B CN 201910782836 A CN201910782836 A CN 201910782836A CN 112416313 B CN112416313 B CN 112416313B
Authority
CN
China
Prior art keywords
large integer
compiler
data type
integer data
type
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
Application number
CN201910782836.4A
Other languages
English (en)
Other versions
CN112416313A (zh
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.)
Wuxi Jiangnan Computing Technology Institute
Original Assignee
Wuxi Jiangnan Computing Technology Institute
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 Wuxi Jiangnan Computing Technology Institute filed Critical Wuxi Jiangnan Computing Technology Institute
Priority to CN201910782836.4A priority Critical patent/CN112416313B/zh
Publication of CN112416313A publication Critical patent/CN112416313A/zh
Application granted granted Critical
Publication of CN112416313B publication Critical patent/CN112416313B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/37Compiler construction; Parser generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/425Lexical analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy 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)
  • Computational Linguistics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种支持大整数数据类型和运算符的编译方法,基于GCC编译器,包括以下步骤:对GCC编译器做如下配置:扩展GCC编译器内部预定义宏,增加大整数数据类型的预定义宏;扩展GCC编译器的关键字,增加大整数数据类型关键字ccc_bint,并利用编译器的attribute机制来设置大整数类型属性;扩展GCC编译器前端,增加对大整数数据类型关键字ccc_bint的识别,使得编译器在词法分析阶段可以通过大整数数据类型相关程序的词法分析;扩展GCC编译器前端,增加对大整数数据类型关键字表达式的语法分析操作,使得编译器为大整数数据类型关键字相关的赋值表达式、运算表达式、初始化表达式等进行正确的语法分析。本发明既大大提高了运算的进度,又提高了对计算机系统资源利用的效率,改善了计算机运行的性能。

Description

支持大整数数据类型和运算符的编译方法
技术领域
本发明属于高性能计算编译技术领域,尤其涉及一种支持大整数数据类型和运算符的编译方法。
背景技术
随着计算机信息安全要求的不断提高,密码学被大量应用到生活中,RSA、ECC等公钥密码算法和数字签名算法都建立在大整数的运算的基础上。大整数还广泛应用于科学计算中,比如计算更精确的π的值,构建高精度的浮点数据类型。IEEE 754标准浮点类型在逻辑上是由整数型的尾数、指数和符号位组成,尾数的精度决定了浮点数的精度,用大整数表示浮点数的尾数则可以实现更高精度的浮点数。
大整数的运算速度对这些算法的高效实现起着重要作用,而计算机的字长限制对信息安全中大整数的操作,带来了巨大困难。
当前的主流编译器,如Intel的商用icc编译器以及开源的gcc编译器,所能编译处理的基础数据类型的最大宽度为机器所能支持的字长。此处基础数据类型是指char、int、long等类型关键字所能表示的数据类型,基础数据类型变量在编译器上只需要用一条指令就能完成存储访问或者运算操作。
目前,针对长度超过机器字长的大整数,一般的编程实现方式是在程序中对大整数先分割(如以32bit或64bit为单位)后再保存到数组或者结构体中,或者直接调用GMP库等大整数库的初始化函数来为大整数申请存储空间,相关大整数运算都是通过GMP库等大整数运算函数调用的形式完成的,程序员需要实现理解这些接口函数具体功能才能完成大整数的编程,而不能使用统一的算术运算和逻辑运算符(如+、-、>、<<、|等),而且在GMP库函数的执行过程中需要动态申请和释放空间,影响程序的运行时性能。因此,已有的大整数处理方式存在变量声明和运算不够直观,程序执行性能受限等问题。
发明内容
本发明目的在于提供一种支持大整数数据类型和运算符高效编译方法,该高效编译方法既大大提高了运算的进度,又提高了对计算机系统资源利用的效率,改善了计算机运行的性能。
为达到上述目的,本发明采用的技术方案是:一种支持大整数数据类型和运算符的编译方法,其特征在于:基于GCC编译器,包括以下步骤:
对GCC编译器做如下配置:
扩展GCC编译器内部预定义宏,增加大整数数据类型的预定义宏,新增编译器内部头文件完成大整数类型的声明,以及在大整数声明语句中使用关键字__attribute__为大整数类型新增了ccc_bint类型的属性,该ccc_bint类型属于大整数数据类型特有的标志,在后续编译器分析过程中,将通过识别该属性进行相应的语法分析与语义转换;
增加大整数输出语句的转换功能:通过逐一分析语句中要打印的变量是否为大整数数据类型,如果是,则将该变量修改为该变量的地址,并在其后追加大整数长度作为打印参数,并在分析结束后将普通打印函数调用替换为大整数打印函数;如果所有要打印的变量均不为大整数类型,则编译器使用常规编译方法编译处理其他非大整数相关的代码;建立大整数数据类型预定义宏描述规则;
扩展GCC编译器的关键字,增加大整数数据类型关键字ccc_bint,并利用编译器的attribute机制来设置大整数类型属性;
扩展GCC编译器前端,增加对大整数数据类型关键字ccc_bint的识别,使得编译器在词法分析阶段可以通过大整数数据类型相关程序的词法分析;
扩展GCC编译器前端,增加对大整数数据类型关键字表达式的语法分析操作,使得编译器为大整数数据类型关键字相关的赋值表达式、运算表达式、初始化表达式进行正确的语法分析,此语法分析操作进一步包括以下步骤:
S1、根据是否存在大整数数据类型关键字ccc_bint声明,判断是否为大整数变量的初始化语句,如果是,采用编译器原有的数组初始化方法编译处理大整数初始化语句,否则,执行下一步;
S2、根据赋值语句中左值是否为大整数数据类型,判断是否包含大整数类赋值表达式,如果是,则编译生成大整数赋值处理库函数调用语句,否则,执行下一步;
S3、根据运算表达式的运算符左右两个操作数的数据类型,判断是否为大整数类运算表达式,如果是,编译生成大整数运算的库函数调用语句,否则,执行下一步;
S4、通过逐一分析语句中要打印的变量,判断是否为大整数数据类型,如果是则将该变量修改为该变量的地址,并在其后追加大整数长度作为打印参数,并在分析结束后将普通打印函数调用替换为大整数打印函数;如果所有要打印的变量均不为大整数类型,则编译器使用常规编译方法编译处理其他非大整数相关的代码;
GCC编译器对源程序预处理阶段:处理扩展的编译器内部头文件,生成大整数相关的类型定义;
GCC编译器识别大整数数据类型关键字ccc_bint,并作为大整数数据类型属性通过词法分析;
GCC编译器根据所述语法分析操作对遇到的赋值语句、类型转换语句、运算语句,打印语句进行语法规则判断;
中间代码生成,增加对大整数运算的优化编译处理;
目标代码生成;
可执行代码。
上述技术方案中进一步改进的技术方案如下:
上述方案中,所述大整数数据类型为1024bit、2048bit、或者4096bit宽度的大整数。
由于上述技术方案的运用,本发明与现有技术相比具有下列优点:
本发明支持大整数数据类型和运算符的编译方法,其既大大提高了运算的,又提高了对计算机系统资源利用的效率,改善了计算机运行的性能;实现了大整数运算接口,这些接口在程序编译过程中被调用,以替换大整数的初始化和运算等操作。而且,本方法中,大整数类型数据的存储空间都是在编译过程中静态分配的,与大整数相关的操作在执行时无需额外申请或释放内存空间,因此相比当前GMP库函数需要在函数实现中动态申请和释放空间的做法,更为高效,本发明还支持使用算术运算符和逻辑运算符而非复杂函数调用完成大整数运。
附图说明
附图1为本发明编译方法的流程图;
附图2为本发明编译器在进行编译处理时遇到的大整数相关的操作时的处理方法。
具体实施方式
在本专利的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制;术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性;此外,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本专利的具体含义。
下面结合实施例对本发明作进一步描述:
实施例:一种支持大整数数据类型和运算符的编译方法,基于GCC编译器,包括以下步骤:
对GCC编译器做如下配置:
扩展GCC编译器内部预定义宏,增加大整数数据类型的预定义宏,新增编译器内部头文件完成大整数类型的声明,在该头文件中,使用C语言关键字typedef struct声明的、唯一成员变量为unsigned long型数组的结构体类型bint[len],其中len表示大整数的长度,且len的大小与数组的长度一一对应,如,大整数类型bint1024的成员变量即为包含16个元素的unsigned long型数组。用户在编写程序时通过包含该头文件,即可直接使用bint1024声明长度为1024的大整数。为了区分大整数类型和一般的由unsigned long类型数组组成的结构体类型,本专利还在大整数声明语句中使用关键字__attribute__为大整数类型新增了ccc_bint类型的属性(一般的结构体类型的属性为空)),该ccc_bint类型属于大整数数据类型特有的标志,在后续编译器分析过程中,将通过识别该属性进行相应的语法分析与语义转换;
增加大整数输出语句的转换功能:通过逐一分析语句中要打印的变量是否为大整数数据类型,如果是,则将该变量修改为该变量的地址,并在其后追加大整数长度作为打印参数,并在分析结束后将普通打印函数调用替换为大整数打印函数;如果所有要打印的变量均不为大整数类型,则编译器使用常规编译方法编译处理其他非大整数相关的代码;
同时,建立大整数数据类型预定义宏描述规则:通过C语言关键字typedef struct声明的、以不同长度的unsigned long型数组作为唯一成员变量的结构体作为大整数类型。编译器在头文件中预定义了bint2048,bint4096等大整数类型,如果用户实际需要更大长度的大整数,比如16384,则可以使用如下方式自定义一个大整数数据类型:
typedef struct __ccc_bint_uint16384{
__attribute__ ((aligned (64))) u64 a[256];
} __attribute__((ccc_bint(256))) buint16384;
用户通过以上代码,就可以在程序中定义buint16384数据类型,通过这个数据类型,就可以定义16384bit的大整数变量,比如用户如果在程序里面编写:buint16384 a,b,c;那么变量a、b、c就是一个16384bit的变量。程序中变量a、b、c参与的任何操作,在编译器编译用户程序时,都会被按照大整数类型的运算进行相应的语法语义分析与程序变换;
扩展GCC编译器的关键字,增加大整数数据类型关键字ccc_bint,并利用编译器的attribute机制来设置大整数类型属性;主要指在声明大整数类型时,用于在编译器中区分通过bint[len]声明的大整数类型变量和一般的由unsigned long类型数组组成的结构体类型声明的变量,以便在编译器前端分析时,完成大整数类型变量的识别和处理,该属性仅在编译器中使用,用于编译器编译大整数相关的程序代码时进行语法语义识别与分析;
扩展GCC编译器前端,增加对大整数数据类型关键字ccc_bint的识别,使得编译器在词法分析阶段可以通过大整数数据类型相关程序的词法分析;
扩展GCC编译器前端,增加对大整数数据类型关键字表达式的语法分析操作,使得编译器为大整数数据类型关键字相关的赋值表达式、运算表达式、初始化表达式等进行正确的语法分析,此语法分析操作进一步包括以下步骤:
S1、根据是否存在大整数数据类型关键字ccc_bint声明,判断是否为大整数变量的初始化语句,如果是,采用编译器原有的数组初始化方法编译处理大整数初始化语句,否则,执行下一步;
S2、根据赋值语句中左值是否为大整数数据类型,即左值的数据类型是否包括具有ccc_bint属性,判断是否包含大整数类赋值表达式,如果是,则编译生成大整数赋值处理库函数调用语句,否则,执行下一步;
S3、根据运算表达式的运算符左右两个操作数的数据类型,判断是否为大整数类运算表达式,如果是,编译生成大整数运算的库函数调用语句,否则,执行下一步;
S4、通过逐一分析语句中要打印的变量,判断是否为大整数数据类型,如果是则将该变量修改为该变量的地址,并在其后追加大整数长度作为打印参数,并在分析结束后将普通打印函数调用替换为大整数打印函数;如果所有要打印的变量均不为大整数类型,则编译器使用常规编译方法编译处理其他非大整数相关的代码;
GCC编译器对源程序预处理阶段:处理扩展的编译器内部头文件,生成大整数相关的类型定义;
GCC编译器识别大整数数据类型关键字ccc_bint,并作为大整数数据类型属性通过词法分析;
GCC编译器根据所述语法分析操作对遇到的赋值语句、类型转换语句、运算语句,进行语法规则判断;
中间代码生成,增加对大整数运算的优化编译处理;
目标代码生成;
可执行代码。
上述大整数数据类型为1024bit、2048bit、或者4096bit宽度的大整数。
实施例进一步解释如下:
(1)扩展编译器内部预定义宏,增加大整数类型的预定义宏。如本发明的实例中就使用一系列的预定义宏定义了一系列大整数数据类型如bint1024,bint2048,bint4096等。同时,本专利还提供了大整数预定义宏描述规则,可以按照规则根据实际应用需要在程序中扩展定义任何长度的大整数类型。
(2)扩展GCC编译器的关键字,增加ccc_bint关键字,并利用编译器的attribute机制来设置大整数类型属性。例如在本发明的实例中,就是通过在预定义大整数数据类型的时候通过attribute方式给大整数数据类型设置上ccc_bint关键字属性和数据长度的属性。比如如下实例:
typedef struct __ccc_bint_int2048 {
__attribute__ ((aligned (64)))unsinged long a[32];
} __attribute__((ccc_bint(32))) bint2048;
该实例是在编译器内部头文件中预定义了bint2048的大整数数据类型,这个类型在定义时通过__attribute__((ccc_bint(32))),设置上了ccc_bint和32两个属性。事实上,通过预定义,大整数数据类型bint2048是一个特殊的结构体类型,这个特殊性就在于这个结构体类型声明时通过attribute
附加了ccc_bint属性,这将为后续的编译器语法分析和词法分析扩展对这类具有大整数数据类型属性的结构体处理做好准备。
经过编译预处理,大整数数据类型在编译器中都将以带有ccc_bint属性的结构体类型存在。
(3)扩展编译器前端,增加对关键字ccc_bint的识别,使得编译器在词法分析阶段可以通过大整数相关程序的词法分析。
(4)扩展编译器前端,增加对大整数相关表达式的语法分析规则,使得编译器可以为大整数相关的赋值表达式、运算表达式、初始化表达式等进行正确的语法分析。具体分析规则见图2所示。
(5)扩展编译器中端中间代码生成,增加对大整数运算的优化编译处理,包括常数传播、函数内联等优化。
大整数类型的程序主要编译处理流程和方法如图1和图2所示:
如图1中所示: 1)编译器预处理阶段:会处理扩展的编译器内部头文件,生成大整数相关的类型定义。
2)词法分析阶段:会识别ccc_bint关键字,并作为大整数数据类型属性通过词法分析。
3)语法分析阶段:遇到赋值语句、类型转换语句、运算语句等,编译器都会进行语法规则判断,比如遇到一个运算表达式,编译器会分析这个表达式的运算符左右两个操作数的数据类型,是否为这个运算符所支持的类型。例如遇到a+b运算表达式,如果编译器分析出a,b是结构体类型,对于改造前的编译器,必定会报出”+”运算符不支持结构体类型的语法错误。但是对于图1中改造后的编译器,在语法分析阶段,遇到“+“运算符左右的变量类型是结构体类型的情况时,编译器会进一步分析结构体类型是否带有大整数ccc_bint的属性,如果具有该属性,则不报错,而是进入大整数运算的特殊编译处理。具体方法见图2中相应的大整数运算表达式的处理方法。
图2所示是编译器在进行编译处理时遇到的大整数相关的操作时的处理方法:
1)初始化大整数
用户使用扩展的关键字int[len]声明大整数类型,改造后的编译器能够识别出用户程序中声明的大整数类型变量,并将采用gcc编译器现有的数组初始化方式编译处理大整数初始化语句。
2)为大整数赋值
编译器识别出程序中大整数赋值语句中的运算符“=”,并根据赋值语句中右值的不同,将该语句自动替换为对大整数赋值的函数调用语句。
3)处理大整数类型运算
编译器识别出程序中与大整数相关的运算符,并解析参与运算变量的数据类型,根据变量类型确定是否需要类型转换以及转换类型。如,对运算符“+”,当大整数加上普通类型的变量,则将普通类型扩展为大整数后再进行大整数的加法,得到执行结果;当大整数类型相加时,则直接将大整数相加,得到执行结果;最后,将运算符“+”的执行结果返回给左值,若左值的长度小于执行结果的长度,则取执行结果的低位;若左值的长度大于执行结果的长度,高位置0。
4)大整数输出语句的扩展
编译器识别出参数中包含大整数类型变量的打印语句,并将其替换为针对大整数的打印接口实现。
5)大整数操作的实现库函数
根据编译后可执行目标码所运行平台的结构,设计并实现了大整数运算接口,这些接口在程序编译过程中被调用,以替换大整数的初始化和运算等操作,与GMP库动态申请和释放空间的做法相比,本方法更高效。
采用上述支持大整数数据类型和运算符的编译方法时,其既大大提高了运算的进度,又提高了对计算机系统资源利用的效率,改善了计算机运行的性能;实现了大整数运算接口,这些接口在程序编译过程中被调用,以替换大整数的初始化和运算等操作,与GMP库动态申请和释放空间的做法相比,本方法更高效,大整数类型数据的存储空间都是静态开辟的,相比GMP库为大整数数据动态申请和释放空间的做法,这种方式的程序运行将更高效;支持使用算术运算符和逻辑运算符而非复杂函数调用完成大整数运算。
上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。

Claims (2)

1.一种支持大整数数据类型和运算符的编译方法,其特征在于:基于GCC编译器,包括以下步骤:
对GCC编译器做如下配置:
扩展GCC编译器内部预定义宏,增加大整数数据类型的预定义宏,新增编译器内部头文件完成大整数类型的声明,以及在大整数声明语句中使用关键字__attribute__为大整数类型新增了ccc_bint类型的属性,该ccc_bint类型属于大整数数据类型特有的标志,在后续编译器分析过程中,将通过识别该属性进行相应的语法分析与语义转换;
增加大整数输出语句的转换功能:通过逐一分析语句中要打印的变量是否为大整数数据类型,如果是,则将该变量修改为该变量的地址,并在其后追加大整数长度作为打印参数,并在分析结束后将普通打印函数调用替换为大整数打印函数;如果所有要打印的变量均不为大整数类型,则编译器使用常规编译方法编译处理其他非大整数相关的代码;建立大整数数据类型预定义宏描述规则;
扩展GCC编译器的关键字,增加大整数数据类型关键字ccc_bint,并利用编译器的attribute机制来设置大整数类型属性;
扩展GCC编译器前端,增加对大整数数据类型关键字ccc_bint的识别,使得编译器在词法分析阶段可以通过大整数数据类型相关程序的词法分析;
扩展GCC编译器前端,增加对大整数数据类型关键字表达式的语法分析操作,使得编译器为大整数数据类型关键字相关的赋值表达式、运算表达式、初始化表达式进行正确的语法分析,此语法分析操作进一步包括以下步骤:
S1、根据是否存在大整数数据类型关键字ccc_bint声明,判断是否为大整数变量的初始化语句,如果是,采用编译器原有的数组初始化方法编译处理大整数初始化语句,否则,执行下一步;
S2、根据赋值语句中左值是否为大整数数据类型,判断是否包含大整数类赋值表达式,如果是,则编译生成大整数赋值处理库函数调用语句,否则,执行下一步;
S3、根据运算表达式的运算符左右两个操作数的数据类型,判断是否为大整数类运算表达式,如果是,编译生成大整数运算的库函数调用语句,否则,执行下一步;
S4、通过逐一分析语句中要打印的变量,判断是否为大整数数据类型,如果是则将该变量修改为该变量的地址,并在其后追加大整数长度作为打印参数,并在分析结束后将普通打印函数调用替换为大整数打印函数;如果所有要打印的变量均不为大整数类型,则编译器使用常规编译方法编译处理其他非大整数相关的代码;
GCC编译器对源程序预处理阶段:处理扩展的编译器内部头文件,生成大整数相关的类型定义;
GCC编译器识别大整数数据类型关键字ccc_bint,并作为大整数数据类型属性通过词法分析;
GCC编译器根据所述语法分析操作对遇到的赋值语句、类型转换语句、运算语句,打印语句进行语法规则判断;
中间代码生成,增加对大整数运算的优化编译处理;
目标代码生成;
可执行代码。
2.根据权利要求1所述的支持大整数数据类型和运算符的编译方法,其特征在于:所述大整数数据类型为1024bit、2048bit或者4096bit的大整数。
CN201910782836.4A 2019-08-23 2019-08-23 支持大整数数据类型和运算符的编译方法 Active CN112416313B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910782836.4A CN112416313B (zh) 2019-08-23 2019-08-23 支持大整数数据类型和运算符的编译方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910782836.4A CN112416313B (zh) 2019-08-23 2019-08-23 支持大整数数据类型和运算符的编译方法

Publications (2)

Publication Number Publication Date
CN112416313A CN112416313A (zh) 2021-02-26
CN112416313B true CN112416313B (zh) 2022-07-12

Family

ID=74780284

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910782836.4A Active CN112416313B (zh) 2019-08-23 2019-08-23 支持大整数数据类型和运算符的编译方法

Country Status (1)

Country Link
CN (1) CN112416313B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114217808B (zh) * 2021-04-14 2024-04-30 无锡江南计算技术研究所 一种编程语言指针类型Cache属性扩展方法
CN115686521A (zh) * 2022-11-15 2023-02-03 芯华章科技(北京)有限公司 处理大数的方法、电子设备和存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105824600A (zh) * 2016-04-30 2016-08-03 安徽硕尼信息科技有限公司 一种基于计算机处理大整数的算法
CN106294371A (zh) * 2015-05-15 2017-01-04 阿里巴巴集团控股有限公司 字符串值域切分方法及装置
CN109254776A (zh) * 2018-09-29 2019-01-22 深圳市雷赛控制技术有限公司 多语言代码编译方法及编译器

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106294371A (zh) * 2015-05-15 2017-01-04 阿里巴巴集团控股有限公司 字符串值域切分方法及装置
CN105824600A (zh) * 2016-04-30 2016-08-03 安徽硕尼信息科技有限公司 一种基于计算机处理大整数的算法
CN109254776A (zh) * 2018-09-29 2019-01-22 深圳市雷赛控制技术有限公司 多语言代码编译方法及编译器

Also Published As

Publication number Publication date
CN112416313A (zh) 2021-02-26

Similar Documents

Publication Publication Date Title
CN110187885B (zh) 一种量子程序编译的中间代码生成方法及装置
EP1178404B1 (en) Method and system for compiling multiple languages
US20170228223A1 (en) Unified data type system and method
US7725883B1 (en) Program interpreter
US7103881B2 (en) Virtual machine to provide compiled code to processing elements embodied on a processor device
JP5021805B2 (ja) データ型を処理するシステムおよび方法
US7389499B2 (en) Method and apparatus for automatically converting numeric data to a processor efficient format for performing arithmetic operations
US20060195828A1 (en) Instruction generator, method for generating instructions and computer program product that executes an application for an instruction generator
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
JP4157016B2 (ja) コンパイラ装置及びコンパイル方法
CN112416313B (zh) 支持大整数数据类型和运算符的编译方法
Ugawa et al. eJSTK: Building JavaScript virtual machines with customized datatypes for embedded systems
Metcalf The seven ages of fortran
US20050015754A1 (en) Method and system for multimode simulator generation from an instruction set architecture specification
CN116088864A (zh) 汇编方法、反汇编方法、设备及存储介质
CN113835688B (zh) 一种科学计算语言解释器的对象封装方法
CN112579059B (zh) 支持有限域数据类型和运算符的编译方法
Wang et al. Analysis of the Design of Several Modern Programming Languages
Dahdouh et al. Design an Optimized Compiler to Enhance Performance of Android Applications
El-Zawawy Frequent statement and de-reference elimination for distributed programs
Pahade et al. Introduction to Compiler and its Phases
JP2004013190A (ja) ソフトウエア開発環境、シミュレータ及び記録媒体
Plumbridge et al. Translating Java for resource constrained embedded systems
Campobadal Forés The Design of an experimental programming language and its translator
Johnstone et al. Suppression of redundant operations in reverse compiled code using global dataflow analysis

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