函数编译方法、编译系统及存储介质与流程

文档序号:16811059发布日期:2019-02-10 13:39阅读:187来源:国知局
函数编译方法、编译系统及存储介质与流程

本发明涉及编译领域,特别是涉及一种函数编译方法、编译系统及存储介质。



背景技术:

传统上,对于c#、vb等高级语言而言,编译器完成的功能是把源码(sourcecode)编译成通用中间语言(msil/cil)的字节码(bytecode),然后在运行的时候通过通用语言运行库的转换,编程最终可以被cpu直接计算的机器码(nativecode)。然而,传统的处理器不能应用于led的显示控制,对于led显示屏来说,要求较高的程序执行效率,以利于缩短数据运算和数据传输的时间,因此,传统的编译系统需要经过中间转换的编译方法不能适用于led显示屏。



技术实现要素:

基于此,有必要针对传统的编译系统需要经过中间转换的编译方法不能适用于led显示屏的问题,提供一种函数编译方法、编译系统及存储介质。

一种函数编译方法,应用于led显示屏,包括:

接收函数,并判断函数的编译属性,其中,所述函数包括多个子函数;

在函数库内依次查找函数的子函数;

根据查找结果,将对应的子函数编译进函数库或者将对应子函数的指令代码首地址编译进函数库;

判断子函数是否为结束函数,若是,结束函数的编译。

在其中一个实施例中,所述接收函数,并判断函数的编译属性的步骤具体包括:

接收函数;

识别函数的第一个字符,并根据第一个字符确定函数的编译属性为待编译或者可执行,若第一个字符为预设字符,则函数的编译属性为待编译。

在其中一个实施例中,所述根据查找结果,将对应的子函数编译进函数库或者将对应子函数的指令代码首地址编译进函数库的步骤具体包括:

若在函数库内未查找到对应的子函数,将对应的子函数编译进函数库;或者

若在函数库内查找到对应的子函数,将对应的子函数的指令代码首地址编译进函数库。

在其中一个实施例中,所述若在函数库内未查找到对应的子函数,将对应的子函数编译进函数库的步骤具体包括:

若查找的子函数为函数的第一个子函数,将第一个子函数当做一个新的函数编译进函数库;

继续处理下一个函数;或者

若查找的子函数不是函数的第一个子函数,且为数字时,将数字编译进函数库;

继续处理下一个函数;或者

若查找的子函数不是待编译函数的第一个子函数,且不是数字时,提示错误并结束编译。

在其中一个实施例中,所述若查找的子函数为函数的第一个子函数时,将第一个子函数当做一个新的函数编译进函数库的步骤具体包括:

为第一个子函数分配一存储区;

建立一编译栈,并将第一个子函数的存储首地址压入所述编译栈内。

在其中一个实施例中,所述若查找的子函数不是函数的第一个子函数,且为数字时,将数字编译进函数库的步骤具体包括:

将数字拼装成立即数装载指令,再将立即数装载指令编译进函数库中。

一种编译系统,用于函数的编译,包括:

存储器,存储有函数库;

函数接收识别部件,用于接收函数,并判断函数的编译属性,其中,所述函数包括多个子函数;

子函数查找部件,用于在函数库内依次查找函数的子函数;

编译部件,用于根据查找结果,将对应的子函数编译进函数库或者将对应子函数的指令代码首地址编译进函数库;

结束编译判断部件,用于判断子函数是否为结束函数,若是,结束函数的编译。

在其中一个实施例中,所述函数接收识别部件包括:

接收组件,用于接收函数;

识别确定组件,用于识别函数的第一个字符,并根据第一个字符确定函数的编译属性为待编译或者可执行,若第一个字符为预设字符,则将函数的编译属性确定为为待编译。

在其中一个实施例中,所述编译部件还用于:

在查找的子函数为函数的第一个子函数时,将第一个子函数当做一个新的函数编译进函数库;

在查找的子函数不是函数的第一个子函数,且为数字时,将数字编译进函数库;及

在查找的子函数不是待编译函数的第一个子函数,且不是数字时,提示错误并结束编译;

所述编译部件包括:

存储区分配组件,用于为第一个子函数分配一存储区;

数字存储组件,用于将数字存储至寄存器;

编译栈建立组件,用于建立一编译栈,并将第一个子函数的存储首地址或寄存器的指针压入所述编译栈内。

一种机器可读存储介质,其上存储有计算机程序,其中所述计算机程序在由处理器执行时实现上述任一项所述的函数编译方法。

上述函数编译方法、编译系统及存储介质,通过对函数的函数名及数字进行编译,使得在输入函数的函数名后,即可以直接进行指令的执行,而不用经过中间语言运行库的转换,从而缩短了数据的运算时间以及数据的传输时间,具有较高的执行效率。

附图说明

图1为本发明一实施例的函数编译方法的流程图;

图2为本发明又一实施例的函数编译方法的流程图;

图3为本发明又一实施例的函数编译方法的流程图;

图4为本发明又一实施例的函数编译方法的流程图;

图5为本发明一实施例的编译系统的结构框图;

图6为本发明一实施例的编译系统的函数接收识别部件的结构框图;

图7为本发明一实施例的编译系统的编译部件的结构框图。

具体实施方式

为了便于理解本发明,下面将参照相关附图对本发明进行更全面的描述。附图中给出了本发明的较佳实施方式。但是,本发明可以以许多不同的形式来实现,并不限于本文所描述的实施方式。相反地,提供这些实施方式的目的是使对本发明的公开内容理解的更加透彻全面。

需要说明的是,当元件被称为“固定于”另一个元件,它可以直接在另一个元件上或者也可以存在居中的元件。当一个元件被认为是“连接”另一个元件,它可以是直接连接到另一个元件或者可能同时存在居中元件。本文所使用的术语“垂直的”、“水平的”、“左”、“右”以及类似的表述只是为了说明的目的,并不表示是唯一的实施方式。

除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施方式的目的,不是旨在于限制本发明。本文所使用的术语“及/或”包括一个或多个相关的所列项目的任意的和所有的组合。

请参阅图1,示例性的示出了本发明一实施例的函数编译方法的流程图,所述函数编译方法可以应用于led显示屏的芯片编译系统,直接把源码编译成可以直接被执行的指令,由此,led显示屏的芯片可以识别指令,并直接执行指令,大大缩短了数据运算和数据传输的时间,程序可以较为高效的执行。

具体的,所述函数编译方法可以包括如下步骤:

s101:接收函数,并判断函数的编译属性,其中,所述函数包括多个子函数;

为了使函数可以被高效的执行,在函数被执行前,需要经过编译系统的编译,才可以被led显示屏的芯片识别并执行。因此,在函数首次执行前,均需要经过编译系统的编译。

函数可以包括特定的标识符,以标识函数的编译属性,由此,编译系统可以根据函数是否包括标识符来识别确定函数的编译属性,如果包括了预设的标识符,则函数被标识位待编译状态,反之,函数则被直接执行。可以理解,函数在未编译的情况下直接执行将报错。

请参阅图2,所述步骤s101可以包括如下子步骤:

s11:接收函数;

s13:识别函数的第一个字符,并根据第一个字符确定函数的编译属性为待编译或者可执行,若第一个字符为预设字符,则函数的编译属性为待编译。

函数通常为一字符串,可以将函数的第一个字符作为标识符,例如,将一预设标识符作为函数待编译的标识符,编译系统在接收到函数后,只需要读取函数的第一个字符,即可判断函数的编译属性,如果第一个字符为与预设的待编译标识符相同,则表示函数需要进行编译,否则,函数将直接被执行。

例如,可以将标识符设置为“:”,若函数的第一个字符为“:”,则表示该函数需要经过编译系统的编译后,才可以被芯片识别并执行。

s103:在函数库内依次查找函数的子函数;

编译系统可以包括一存储器,存储器内可以存储有函数库,函数库内存储有若干编译完成的函数,函数库内的函数可以被直接调用而执行。

在确定函数的编译属性后,若需要对函数进行编译,则将函数的多个子函数分别识别,并在函数库内查找是否有相同的函数,从而根据不同的查找结果进行不同的编译处理。

例如,将函数“:pluss2526+;”送入编译系统,编译系统首先读取函数的第一个字符串,“:”表示需要函数的编译属性为待编译,需要进行编译后方可执行。在确定需要被编译后,读取函数的多个子函数“pluss”、“25”、“26”、“+”以及“;”,并按照函数的排列顺序,在函数库内查找是否存在相同的子函数。

函数在编译完成后,可以填充入函数库内,从而,随着使用时间的增长,函数库所包括的函数也将越来越多,从而常用的指令将可以被直接执行。

在特定的实施例中,为了防止函数库的规模过大,可以对函数库执行清理操作,清理可以是自动进行,也可以由用户手动进行,对函数库的清理,可以按照预设的规则进行,也可以呈现一清理界面以供用户选择清理规则,最终按照用户选择的清理规则进行。例如,可以为每个函数配置一计时器,如果函数在被编译后预设时间内未被调用,则自动将该函数从函数库内删除,函数在被调用后,计时器清零,从新开始计时。

s105:根据查找结果,将对应的子函数编译进函数库或者将对应子函数的指令代码首地址编译进函数库;

在函数库内分别查找函数的多个子函数,根据不同的查找结果采用不同的编译策略。

请参阅图3,在具体的实施例中,步骤s105可以包括如下子步骤:

s51:若在函数库内未查找到对应的子函数,将对应的子函数编译进函数库;或者

s53:若在函数库内查找到对应的子函数,将对应的子函数的指令代码首地址编译进函数库。

如果函数库内未查找到对应的子函数,为了便于函数的执行,需要将子函数编译进函数库,以在函数执行时进行条用。如果在函数库内查找到了与对应的子函数相同的子函数,即说明在此之前已有函数对该子函数进行了编译,子函数可以直接调用,此时,只需要将与该子函数相同的函数库内的子函数的指令代码首地址编译进函数库即可,函数在执行时可以直接调用函数库内的子函数。

请参阅图4,步骤s51可以包括如下子步骤:

s511:若查找的子函数为函数的第一个子函数时,将第一个子函数当做一个新的函数编译进函数库;

s513:继续处理下一个函数。

函数的第一个子函数可以被定义为函数名,函数在编译后,输入第一个子函数,即可调用编译后的函数。也就是说,被编译的函数是函数库没有的函数,第一个子函数作为函数的函数主体被当做一个新的函数编译进函数库内,编译完成后,在调用被编译的函数时,只需要输入函数名即可。

具体的,所述将第一个子函数当做一个新的函数编译进函数库的步骤具体可以包括:

为第一个子函数分配一存储区;

建立一编译栈,并将第一个子函数的存储首地址压入所述编译栈内。

当在函数库未查找到第一个子函数时,为第一个子函数分配一存储区,并将第一个子函数存储到分配的存储区内,同时返回存储首地址,为了实现编译后函数的调用,可以为编译函数建立一编译栈,并将第一个子函数的存储首地址压入编译栈内,由此,即完成了第一个子函数的编译。

当完成第一个子函数子函数的编译后,继续下一个子函数的编译。

步骤s53可以包括如下子步骤:

s531:若查找的子函数不是函数的第一个子函数,且为数字时,将数字编译进函数库;

s532:继续处理下一个函数;或者

s533:若查找的子函数不是待编译函数的第一个子函数,且不是数字时,提示错误并结束编译。

第一个子函数编译完成后,继续编译第二个子函数,此时,子函数将不再是第一个子函数,为了使运算逻辑正确,第二个函数将不能是与函数名类似的字符串,而必须是数字类字符。若第二个子函数不是数字,将提示报错并结束函数的编译。若第二个子函数是数字,则将数字编译进函数库。

具体的,所述将数字编译进函数库具体包括:

将数字拼装成立即数装载指令,再将立即数装载指令编译进函数库中。

完成第二个子函数的编译后,再进行第三个子函数的编译,依次类推。

以函数“:pluss2526+;”为例,在编译时,首先编译第一个子函数pluss,并为子函数pluss分配一存储区,同时建立一编译栈,将存储区的首地址压入编译栈内,随后,继续编译子函数25及子函数26,由于子函数25及子函数26均为数字,将25、26各自存入一寄存器a、b,并将寄存器a、b的指针压入编译栈内,再继续编译子函数“+”,函数库内存储有函数“+”的运算逻辑,将函数“+”的指令代码首地址压入编译栈内。

s107:判断子函数是否为结束函数,若是,结束函数的编译。

每个函数配置一结束函数,放置于子函数的末尾,标识函数的结尾,在对结束函数编译时,即标识函数的编译结束。

例如,当编译完子函数“+”后,继续编译下一个子函数“;”,其中“;”为结束函数,即结束函数的编译。

在本发明实施例中,通过对函数的函数名及数字进行编译,使得在输入函数的函数名后,即可以直接进行指令的执行,而不用经过中间语言运行库的转换,从而缩短了数据的运算时间以及数据的传输时间,具有较高的执行效率。

需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。

请参阅图5,示例性的示出了本发明一实施例的编译系统10的框架结构图,具体可以包括如下部件:

存储器110,存储有函数库;

函数接收识别部件120,用于接收函数,并判断函数的编译属性,其中,所述函数包括多个子函数;

子函数查找部件130,用于在函数库内依次查找函数的子函数;

编译部件140,用于根据查找结果,将对应的子函数编译进函数库或者将对应子函数的指令代码首地址编译进函数库;

结束编译判断部件150,用于判断子函数是否为结束函数,若是,结束函数的编译。

请参阅图6,在一个或多个实施例中,所述函数接收识别部件110可以包括如下组件:

接收组件111,用于接收函数;

识别确定组件113,用于识别函数的第一个字符,并根据第一个字符确定函数的编译属性为待编译或者可执行,若第一个字符为预设字符,则将函数的编译属性确定为为待编译。

在一个或多个实施例中,所述编译部件120还用于:

在函数库内未查找到对应的子函数时,将对应的子函数编译进函数库;及

在函数库内查找到对应的子函数时,将对应的子函数的指令代码首地址编译进函数库。

在一个或多个实施例中,所述编译部件120还用于:

在查找的子函数为函数的第一个子函数时,将第一个子函数当做一个新的函数编译进函数库;

在查找的子函数不是函数的第一个子函数,且为数字时,将数字编译进函数库;及

在查找的子函数不是待编译函数的第一个子函数,且不是数字时,提示错误并结束编译。

请参阅图7,在一个或多个实施例中,所述编译部件120可以包括:

存储区分配组件121,用于为第一个子函数分配一存储区;

数字存储组件123,用于将数字存储至寄存器;

编译栈建立组件125,用于建立一编译栈,并将第一个子函数的存储首地址或寄存器的指针压入所述编译栈内。

在本发明实施例中,通过对函数的函数名及数字进行编译,使得在输入函数的函数名后,即可以直接进行指令的执行,而不用经过中间语言运行库的转换,从而缩短了数据的运算时间以及数据的传输时间,具有较高的执行效率。

本发明一实施例还提供一种机器可读存储介质,其上存储有计算机程序,其中所述计算机程序在由处理器执行时实现上述任一实施例所述的函数编译方法。

所述系统/计算机装置集成的部件/模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施方式方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,所述计算机程序在被处理器执行时,可实现上述各个方法实施方式的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读存储介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

在本发明所提供的几个具体实施方式中,应该理解到,所揭露的系统和方法,可以通过其它的方式实现。例如,以上所描述的系统实施方式仅仅是示意性的,例如,所述部件的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。

另外,在本发明各个实施例中的各功能模块/部件可以集成在相同处理模块/部件中,也可以是各个模块/部件单独物理存在,也可以两个或两个以上模块/部件集成在相同模块/部件中。上述集成的模块/部件既可以采用硬件的形式实现,也可以采用硬件加软件功能模块/部件的形式实现。

对于本领域技术人员而言,显然本发明实施例不限于上述示范性实施例的细节,而且在不背离本发明实施例的精神或基本特征的情况下,能够以其他的具体形式实现本发明实施例。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明实施例的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明实施例内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统、装置或终端权利要求中陈述的多个单元、模块或装置也可以由同一个单元、模块或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1