本发明涉及计算机技术领域,具体涉及一种编译方法及编译器。
背景技术:
编译过程是指将高级语言编写的源程序翻译成目标程序的过程,该目标程序是有计算机可识别的低级语言(汇编语言或机器语言)编写的,并且翻译得到目标程序的功能与原有的源程序功能相同。最后计算机通过执行目标程序得到处理结果。
目前的plc编译器大多数都被国外的企业垄断,然而这些国外的软件在使用过程中,会存在使用习惯差异的问题、价格问题,使用过程中遇到问题不能及时解决,不支持定制等缺点。
技术实现要素:
针对现有技术中的缺陷,本发明实施例提供一种使用灵活的编译方法及编译器。
第一方面,本发明实施例提供的一种编译方法,包括:
获取用户输入的待编译的源程序;
判断所述待编译的源程序中的语言类型以得到源程序类型,所述源程序类型包括il语言程序和非il语言程序,所述语言类型包括il语言和非il语言;
非il语言程序时,将所述源程序中语言类型为非il语言的进行转换以得到il语言程序,再采用词法分析方法检查所述il语言程序中的错误;
il语言程序时,则直接采用所述词法分析方法检查所述il语言程序中的错误;
将各错误信息进行汇总并通过错误信息列表进行显示;
判断所述错误信息列表中是否存在所述错误信息,存在,则停止编译,不存在,则对所述il语言程序进行语义分析;
判断是否存在语义错误,存在,则停止编译,不存在,则执行编译,将所述il语言程序转换成机器语言文件,并将所述机器语言文件进行分段存储。
可选地,所述方法还包括:
查找整个局域网中的控制器列表,通过选中某个控制器来查看其运行状态,读取其用户程序,并进行在线调试、修改和编译。
可选地,所述方法还包括:
将所述源程序中的变量表数据转换为预设文件格式的文件。
可选地,所述机器语言文件进行分段存储具体包括:
将所述机器语言文件分成10段,其中,段0存放的是硬件的规格信息、用户权限信息;段1存放的是变量与硬件资源的对应表格;段2存放与应硬件资源无关的变量信息表;段3预留;段4存放的是优先级为0任务的代码段信息;段5存放的是有优先级为1任务的代码段信息,段6存放的是优先级为2任务的代码段信息;段7存放的是优先级为3任务的代码段信息;段8存放优先级为4任务的代码段信息;段9存放事件处理任务的代码段信息。
第二方面,本发明实施例提供的一种编译器,包括文本编辑器、处理模块、转换组件、词法分析模块、错误信息列表和语义分析模块;
所述文本编辑器用于获取用户输入的待编译的源程序;
所述处理模块用于判断所述待编译的源程序中的语言类型以得到源程序类型,所述源程序类型包括il语言程序和非il语言程序,所述语言类型包括il语言和非il语言;
所述转换组件用于将所述源程序中语言类型为非il语言的进行转换以得到il语言程序;
所述词法分析模块用于采用所述词法分析方法检查所述il语言程序中的错误;
所述错误信息列表用于将各错误信息进行汇总并进行显示;
所述处理模块还用于判断所述错误信息列表中是否存在所述错误信息,存在,则停止编译,不存在,则对所述il语言程序进行语义分析;
所述语义分析模块用于对所述il语言程序进行语义分析;
所述处理模块还用于判断是否存在语义错误,存在,则停止编译,不存在,则执行编译,将所述il语言程序转换成机器语言文件,并将所述机器语言文件进行分段存储。
可选地,所述的一种编译器,还包括通信组件,所述通信组件用于查找整个局域网中的控制器列表,通过选中某个控制器来查看其运行状态,读取其用户程序,并进行在线调试、修改和编译。
可选地,所述的一种编译器,还包括画面组态开发工具,所述画面组态开发工具用于将所述源程序中的变量表数据转换为预设文件格式的文件。
可选地,所述机器语言文件进行分段存储具体包括:
将所述机器语言文件分成10段,其中,段0存放的是硬件的规格信息、用户权限信息;段1存放的是变量与硬件资源的对应表格;段2存放与应硬件资源无关的变量信息表;段3预留;段4存放的是优先级为0任务的代码段信息;段5存放的是优先级为1任务的代码段信息,段6存放的是优先级为2任务的代码段信息;段7存放的是优先级为3任务的代码段信息;段8存放优先级为4任务的代码段信息;段9存放事件处理任务的代码段信息。
本发明的有益效果:本发明实施例提出的一种编译方法及编译器,可将源程序中的所有语言都转成il语言,用户使用起来也更加灵活,可对多种语言进行编译,当扩展其它语言时,修改范围被压缩到很小的范围内,这样充分提高了编译器的健壮性,此外生成文件采用段式存储方式,也可以很方便的扩展其他功能。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍。在所有附图中,类似的元件或部分一般由类似的附图标记标识。附图中,各元件或部分并不一定按照实际的比例绘制。
图1示出了本发明实施例所提供的一种编译方法的流程图;
图2示出了本发明实施例中转换组件中支持可转换的语言种类;
图3示出了本发明实施例所提供的一种编译器的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
需要注意的是,除非另有说明,本申请使用的技术术语或者科学术语应当为本发明所属领域技术人员所理解的通常意义。
图1示出了本发明实施例所提供的一种编译方法,包括:
s101,获取用户输入的待编译的源程序。
具体地,待编译的源程序即为用户程序,也就是通常所说的plc(programmablelogiccontroller,可编程逻辑控制器)程序,其程序的获取通过编译器中所设有的功能模块来实现,例如,可采用编译器中的文本编辑器来获取用户输入的待编译的源程序。
s102,判断所述待编译的源程序中的语言类型以得到源程序类型,所述源程序类型包括il语言程序和非il语言程序,所述语言类型包括il语言和非il语言。
具体地,编译器中的处理模块执行该步骤,由于在编程时,采用的是符合iec61131-3国际标准规范的编程语言,这样就形成了不同的编程语言所编写的源程序,iec61131-3规范下的语言包括5种,顺序功能图(sequentialfunctionchart);梯形图(ladderdiagram);功能块图(functionblockdiagram);指令表(instructionlist)和结构文本(structuredtext)。其中,顺序功能图(sfc)、梯形图(ld)和功能块图(fbd)是图形编程语言,指令表(il)和结构文本(st)是文字语言。
s103,非il语言程序时,将所述源程序中语言类型为非il语言的进行转换以得到il语言程序,再采用词法分析方法检查所述il语言程序中的错误。
具体地,编译器中的转换组件执行该步骤,其具体过程以梯形图(ld)为例进行说明:
梯形图的编译过程,编译器不会将梯形图直接编译成二进制文件,梯形图的编译几乎全部集中在编译器的内部,梯形图的各个程序组件在编译器中已经预先做成了一个组件(即转换组件),当用梯形图的组件进行编程时,除了梯形图文件之外还有一个影子文件,这个影子文件是将梯形图文件对应为il指令文件,在编译时是直接针对所述il指令文件进行编译的,参照图2所示。
另外其他几种编程语言采用同样的方式,都是编译器内部将其定义成等价的il语言,当编译时直接针对il语言来进行编译。这样不仅能减少编程的工作量,并且也能增强代码的健壮性。
s104,il语言程序时,则直接采用所述词法分析方法检查所述il语言程序中的错误。
具体地,il语言为编译器处理的基本语言,编译器判定待编译的源程序中是il语言时,就直接调用词法分析源程序。
s105,将各错误信息进行汇总并通过错误信息列表进行显示。
具体地,所述错误信息包括错误的类型,根据错误类型确定错误提示信息,以及错误出现的代码行号,并将错误信息放入错误信息列表中,从而便于让用户进行修改。
s106,判断所述错误信息列表中是否存在所述错误信息,存在,则停止编译,不存在,则对所述il语言程序进行语义分析。
具体地,直到用户将所有错误修改完后,可再次编译直到判断无错误信息后将对源程序进行语义分析。
s107,判断是否存在语义错误,存在,则停止编译,不存在,则执行编译,将所述il语言程序转换成机器语言文件,并将所述机器语言文件进行分段存储。
具体地,语义分析,即用来确定程序中的语义是否正确,这个过程和词法分析过程基本相同,不同的是对错误的判断规则,在此不再赘述,通过语义分析后,将完成转码工作,也就是将待编译的源程序转换成编译器和plc约定好的指令编码,形成一个二进制文件(即机器语言文件),同时将其进行分段存储,将所述机器语言文件分成10段,其中,段0存放的是硬件的规格信息、用户权限信息;段1存放的是变量与硬件资源的对应表格;段2存放与硬件资源无关的变量信息表;段3预留;段4存放的是优先级为0任务的代码段信息;段5存放的是有优先级为1任务的代码段信息,段6存放的是优先级为2任务的代码段信息;段7存放的是优先级为3任务的代码段信息;段8存放优先级为4任务的代码段信息;段9存放事件处理任务的代码段信息。
通过上述实施例所提供的方法,可将源程序中的所有语言都转成il语言,用户使用起来也更加灵活,可对多种语言进行编译,当扩展其他语言时,修改范围被压缩到很小的范围内,这样充分提高了编译器的健壮性,此外生成文件采用段式存储方式,也可以很方便的扩展其他功能。
进一步地,为了能最大限度的方便工程调试人员,并节省大量的宝贵时间,所述方法还包括:
查找整个局域网中的控制器列表,通过选中某个控制器来查看其运行状态,读取其用户程序,并进行在线调试、修改和编译。
具体地,将运行编译器的pc接入到局域中,编译器充分考虑了分布式系统的开发应用,它可以同时连接多个控制器,并且同时编辑、编译他们的程序,编译器通过ip地址来区分不同的控制器。
进一步地,为了提高用户使用的便利性,所述方法还包括:
将所述源程序中的变量表数据转换为预设文件格式的文件。
具体地,编译器集成的画面组态开发工具执行该操作,由于画面组态和plc程序共用相同的变量表,通过该方法可减少画面开发时定义变量的时间,操作时,可以将该文件烧写到gui设备上,就可以在gui设备上显示画面,并能实时的显示plc的控制状态。
基于与上述的一种编译方法相同的发明构思,图3示出了本发明实施例所提供的一种编译器,包括文本编辑器、处理模块、转换组件、词法分析模块、错误信息列表和语义分析模块。
所述文本编辑器用于获取用户输入的待编译的源程序;
具体地,待编译的源程序即为用户程序,也就是通常所说的plc程序。
所述处理模块用于判断所述待编译的源程序中的语言类型以得到源程序类型,所述源程序类型包括il语言程序和非il语言程序,所述语言类型包括il语言和非il语言。
具体地,由于在编程时,采用的是符合iec61131-3国际标准规范的编程语言,这样就形成了不同的编程语言所编写的源程序,iec61131-3规范下的语言包括5种,顺序功能图(sequentialfunctionchart);梯形图(ladderdiagram);功能块图(functionblockdiagram);指令表(instructionlist)和结构文本(structuredtext)。其中,顺序功能图(sfc)、梯形图(ld)和功能块图(fbd)是图形编程语言,指令表(il)和结构文本(st)是文字语言。
所述转换组件用于将所述源程序中语言类型为非il语言的进行转换以得到il语言程序。
具体地,非il语言程序时,都会进行该转换操作,具体过程以梯形图(ld)为例进行说明:
梯形图的编译过程,编译器不会将梯形图直接编译成二进制文件,梯形图的编译几乎全部集中在编译器的内部,梯形图的各个程序组件在编译器中已经预先做成了一个组件(即转换组件),当用梯形图的组件进行编程时,除了梯形图文件之外还有一个影子文件,这个影子文件是将梯形图文件对应为il指令文件,在编译时是直接针对所述il指令文件进行编译的,参照图2所示。
另外其他几种编程语言采用同样的方式,都是编译器内部将其定义成等价的il语言,当编译时直接针对il语言来进行编译。这样不仅能减少编程的工作量,并且也能增强代码的健壮性。
所述词法分析模块用于采用所述词法分析方法检查所述il语言程序中的错误。
具体地,il语言为编译器处理的基本语言,编译器判定待编译的源程序中是il语言时,就直接调用词法分析源程序。
所述错误信息列表用于将各错误信息进行汇总并进行显示。
具体地,所述错误信息包括错误的类型,根据错误类型确定错误提示信息,以及错误出现的代码行号,并将错误信息放入错误信息列表中,从而便于让用户进行修改。
所述处理模块还用于判断所述错误信息列表中是否存在所述错误信息,存在,则停止编译,不存在,则对所述il语言程序进行语义分析。
具体地,直到用户将所有错误修改完后,可再次编译直到判断无错误信息后将对源程序进行语义分析。
所述语义分析模块用于对所述il语言程序进行语义分析。
具体地,语义分析,即用来确定程序中的语义是否正确,这个过程和词法分析过程基本相同,不同的是对错误的判断规则,在此不再赘述。
所述处理模块还用于判断是否存在语义错误,存在,则停止编译,不存在,则执行编译,将所述il语言程序转换成机器语言文件,并将所述机器语言文件进行分段存储。
具体地,通过语义分析后,将完成转码工作,也就是将待编译的源程序转换成编译器和plc约定好的指令编码,形成一个二进制文件(即机器语言文件),同时将其进行分段存储,将所述机器语言文件分成10段,其中,段0存放的是硬件的规格信息、用户权限信息;段1存放的是变量与硬件资源的对应表格;段2存放与硬件资源无关的变量信息表;段3预留;段4存放的是优先级为0任务的代码段信息;段5存放的是有优先级为1任务的代码段信息,段6存放的是优先级为2任务的代码段信息;段7存放的是优先级为3任务的代码段信息;段8存放优先级为4任务的代码段信息;段9存放事件处理任务的代码段信息。
通过上述方案的应用,其编译器功能丰富,可同时支持多种编程语言,编译器易于扩展,所有语言都可转成il语言,用户使用起来也更加灵活,可对多种语言进行编译,当扩展其他语言时,修改范围被压缩到很小的范围内,这样充分提高了编译器的健壮性,此外生成文件采用段式存储方式,也可以很方便的扩展其他功能。
进一步地,为了能最大限度的方便工程调试人员,并节省大量的宝贵时间,所述的一种编译器,还包括通信组件,所述通信组件用于查找整个局域网中的控制器列表,通过选中某个控制器来查看其运行状态,读取其用户程序,并进行在线调试、修改和编译。
具体地,将运行编译器的pc接入到局域中,编译器充分考虑了分布式系统的开发应用,它可以同时连接多个控制器,并且同时编辑、编译他们的程序,编译器通过ip地址来区分不同的控制器。
进一步地,为了提高用户使用的便利性,所述的一种编译器,还包括画面组态开发工具,所述画面组态开发工具用于将所述源程序中的变量表数据转换为预设文件格式的文件。
具体地,编译器集成的画面组态开发工具执行该操作,由于画面组态和plc程序共用相同的变量表,通过该方法可减少画面开发时定义变量的时间,操作时,可以将该文件烧写到gui设备上,就能可以在gui设备上显示画面,并能实时的显示plc的控制状态。
在本发明实施例还提供一种计算机可读存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执上述实施例描述的方法。
所述计算机可读存储介质可以是前述实施例所述的终端的内部存储单元,例如终端的硬盘或内存。所述计算机可读存储介质也可以是所述终端的外部存储设备,例如所述终端上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,所述计算机可读存储介质还可以既包括所述终端的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述终端所需的其他程序和数据。所述计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的终端和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露终端和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。