基于形式化方法的同步数据流语言可信编译方法
- 国知局
- 2024-10-15 10:09:57
本发明涉及同步数据流语言的可信编译领域,特别涉及一种基于形式化方法的同步数据流语言可信编译方法。
背景技术:
1、近五十年来,电子计算机技术得到迅速发展,工业和计算机的融合也愈发密切,计算机已在工业技术的发展中扮演者主导者的角色。伴随着计算机在工业中的蓬勃发展,安全关键型系统的研究成为工业控制和嵌入式领域的主要议题。安全关键型系统(safety-critical systems)是指发生故障就会导致人身危险、巨大财产损失或社会危害的系统。这类系统广泛应用于工业领域,如航空航天、铁路、汽车等方面。安全关键型系统在医疗领域也有广泛的应用,如放射型治疗机、输液泵、医疗通风系统等。在对安全性具有极高要求的核电领域,对于核设施的管控,安全关键系统也起着至关重要的作用。
2、其中编译器作为系统开发的重要部分,构建了高级编程语言和机器可读的机器语言之间的桥梁,提供可供处理器解读的代码。例如gcc,目前最著名的开源编译工具之一,支持c、c++、ada、fortran等多种语言的编译。具体来说,编译器是整个计算机系统中重要的系统软件之一,所有高级语言编写的软件都必须通过编译器的编译才能成为计算平台可执行的程序。一些嵌入式系统,尤其是安全关键领域相关系统,甚至是a级(safety10-9)系统在核工业、航空航天等领域的软件工程项目设计实现过程中一直是备受关注的焦点。一个a级安全关键软件必须是由a级编译系统产生的可执行代码。因此,安全关键编译是安全关键系统的重要保证。
3、安全关键型系统使用的很多领域,都对电子系统的响应速度有较高要求,需要能够对环境做出实时响应,这类系统可以随时接收输入,并实时运算获得输出结果,以便与环境不断进行交互。这类场景中所使用的系统的编程语言以同步数据流语言为主,由于这类语言产生的程序对实时性和可靠性有较高要求,因此对编译器也有较高要求,尤其是在安全关键型系统中。嵌入式系统和控制系统常用的建模软件scade使用的语言为类lustre语言,lustre是典型的同步数据流模型语言。
4、软件开发中从领域思想到设计模型,再到源代码这一系列过程过于复杂,容易导致各种错误产生,因而针对于这种情况的特定领域建模语言(domain-specific modelinglanguage,dsml)得到快速发展,这种语言可以安全和高效的完成特定领域的软件开发,减少了传统编程语言复杂的开发过程。lustre作为嵌入式控制和信号处理系统中使用的领域建模语言,产生了相应的工业软件scade套件。scade套件可以将simulink/stateflow的一个子语言编译成可执行代码,并且可用于开发安全关键应用程序,如电传飞传控制器和电厂监管软件系统。而作为scade的使用语言,一些特性使的lustre适用于上述诸多任务。lustre基于数据流的运行方式使得其拥有良好的语义,可以用于实时性控制器的构造,并且具有良好的可追踪性并可以提供模块化编程方案,在自动程序验证和工业领域都有较高的实用性。但scade作为商业软件具有高可用性的同时,其黑盒编译过程也使得对于lustre编译的研究无法深入进行,无法确保lustre编译无错误产生。
5、通过测试来保证软件的正确和安全性不能从根本上解决安全性问题,无法满足高安全要求的软件系统要求。关于编译过程的正确性,普遍认为通过形式化开发的才具有最高的正确性和安全性。现有技术中,主要有两种方式对于编译进行验证,一种是对于编译器本身的形式化验证,这种方法需要对编译器的整个编译过程的各个步骤进行证明验证,一般是基于高阶逻辑,使用公理系统中的公理和推导规则进行推导验证,目前尚无法全部自动化,需要有专业人员介入验证。另一种则为翻译确认方法,翻译确认对于每一个单独的编译过程生产的目标代码,验证目标代码是否正确实现的源程序。翻译确认可以自动化执行,为了使翻译确认过程可以自动化实现,则需要建立一个用于表示源代码和目标点代码的通用语义框架,通过框架对程序的语义进行描述,并将程序的正确性通过形式化的描述,最终基于语义证明源程序和目标程序之间的等价关系,以上两种验证方案无法保证编译结果的正确性并且验证过程过于复杂。
技术实现思路
1、有鉴于此,本发明实施例提供了一种基于形式化方法的同步数据流语言可信编译方法,以解决现有技术中编译结果的正确性无法保证并且验证过程复杂的技术问题。该方法包括:
2、构建下推自动机模型,所述下推自动机模型通过自动机识别算法对lustre语言进行文法识别,文法识别过程包括对所述lustre语言中表达式和语句的识别、解析和检测,并对所述lustre语言的文法错误位置进行定位,获得所述lustre语言对应的lustre文法;
3、根据预设的所述lustre文法与目标c代码的模版对应表,将所述lustre文法转化为所述目标c代码;
4、使用基于语义的形式化验证方法对所述lustre语言与所述目标c代码的语义进行一致性验证,并获得用于验证的证明序列。
5、进一步的,所述下推自动机模型通过自动机识别算法对lustre语言进行文法识别,包括:
6、对所述lustre语言进行标准化处理获得所述lustre语言的文法单元,所述标准化处理包括消除左递归、将ebnf范式化简以及格式化终结符与非终结符;
7、基于标准化处理之后的所述文法单元,生成所述下推自动机模型,所述下推自动机模型通过所述自动机识别算法对所述lustre语言进行文法识别,获得所述lustre文法,所述lustre文法包括lustre语言的文法单元序列,所述文法单元序列用于生成所述目标c代码。
8、进一步的,基于标准化处理之后的所述文法单元,使用下推自动机生成算法生成所述下推自动机模型,所述下推自动机生成算法的输入是上下文无关文法的产生式序列和开始状态符号,其中,所述文法单元是构成所述上下文无关法的基本单元。
9、进一步的,所述目标c代码的运行逻辑包括模拟采样、结点运算、结点输出和更新数据流。
10、进一步的,所述根据预设的所述lustre文法与目标c代码的模版对应表,将所述lustre文法转化为所述目标c代码,包括:
11、基于所述lustre文法、中间数据与所述模版对应表,生成所述lustre文法各所述文法单元对应的所述目标c代码,其中,所述中间数据包括符号表、node表以及辅助函数表,所述lustre文法包括多个所述文法单元。
12、进一步的,所述使用基于语义的形式化验证方法对所述lustre语言与所述目标c代码的语义进行一致性验证,包括:
13、将所述lustre语言识别为所述lustre文法后转化为isabelle格式;
14、将所述目标c代码识别成c语言文法后转化成isabelle格式;
15、在isabelle目标码中设定所述lustre语言的前置条件与所述目标c代码的前置条件相等,通过运行中间代码获得输出结果,如果所述输出结果为相等,则所述lustre语言与所述目标c代码的语义一致,所述lustre语言编译正确。
16、进一步的,所述基于语义的形式化验证方法通过分段验证的方式对所述lustre语言与所述目标c代码的语义进行一致性验证,所述分段验证即分别对不同时间点的所述lustre语言与所述目标c代码的语义一致性进行单独验证。
17、与现有技术相比,本说明书实施例采用的上述至少一个技术方案能够达到的有益效果至少包括:本发明提供的lustre编译方法可以识别文法并能够定位错误位置及类型,实现了编译过程的透明化;使用基于形式化验证的方式对lustre语言与目标c代码的语义进行一致性验证,降低了验证的复杂性。
本文地址:https://www.jishuxx.com/zhuanli/20241015/316644.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。