论文部分内容阅读
有效解决“软件危机”的一种重要途径是使用形式化方法来开发软件产品。薛锦云教授在国家863和多项国家自然科学基金的资助下,根据多年从事算法程序设计理论研究的成果,提出了一种实用的开发和证明算法的方法——PAR。在该方法的指导下,我们定义了Radl(Recurrence-based Algorithm Design Language)抽象算法设计语言来描述算法规约和抽象算法,定义了Apla(Abstract Programming Language)语言来描述抽象程序。并制作了Radl到Apla,Apla到各种高级语言程序的转换工具。本项研究选用Delphi编译器使用的Object Pascal语言作为目标语言,设计和实现了支持泛型程序设计和用户自定义ADT类型的Apla→Delphi自动程序转换系统,该系统支持Apla程序到Delphi程序的自动转换和转换后的直接执行。 该转换器的源语言是Apla,目标语言是Delphi编译器所使用的Object Pascal。Apla是一种抽象算法描述语言,具有高度抽象、表达力强等特点。Apla语言把树、图、集合、序列等组合数据类型作为预定义类型,并且含有明显的语法机制支持泛型程序设计和用户自定义ADT类型。相反,Object Pascal中不能直接使用树、图、集合、序列等组合类型,而且没有明显的反映泛型程序设计思想的语法机制。如何在Delphi中很好的支持Apla的这些机制是本系统所要研究的重点和难点,Apla→Delphi自动程序转换系统的目标是使得所有正确的Apla程序都能通过转换器得到正确的Delphi程序,并且能运行得到正确结果。 在系统的研制过程中,我们吸取了一些流行软件开发工具的特点,进行了多方面的创新。如:中间变量临时生成、目标代码直接执行、动态分割显示窗口、特殊符号工具栏、类型参数化、子程序参数化等技术;并改进了系统中许多关键算法,如:多重赋值语句转换算法、代码优化算法。通过构造预定义ADT库解决了树、图、集合、序列等组合类型的直接使用问题,通过利用现有的oop技术解决了没有明显的反映泛型程序设计思想的语法机制的Delphi语言中使用泛型程序设计方法的问题,通过VC++编译器实现了整个转换系统(源代码15000多行)。 本系统使用大量经过严格PAR方法开发出来的Apla程序进行测试。这些Apla程序的开发过程得到PAR方法的正确性保证;而Delphi部件库本身采用了防卫程序设计,软件容错,软件避错等现代程序设计手段,增强了转换得到的Delphi程序的正确性。我们使用Apla描述了现有《数据结构》教科书上的绝大部分算法程序,并增加了一些难度较大的算法程序Apla描述,如:KMP算法、KLEENE算法。在这些Apla程序中,既有简单的,又有复杂的,既有非数值计算类型的,也有数值计算类型的。所有例子全部在本系统中得到直接转换和直接执行,并得到正确结果。 进一步的工作包括完善Apla→Delphi自动程序转换系统的转换机制;提高Apla→Delphi自动程序转换系统的可靠性;增加Apla转换实例,使产品的商品化程度提高,并积极准备申请专利。