论文部分内容阅读
编译器的设计和实现是计算机理论的重要组成部分,其原理和技术可被延伸至一般计算机技术的研究,因此,编译程序的研究对于程序设计具有重要的意义。伴随理论研究的逐渐深入,编译器的优势愈发明显。实际中大部分软件都是利用高级语言进行编写,然后经过编译得到底层机器码执行或者直接解释执行进而得到最终理想结果。与解释程序相比,编译程序的执行效率更高。因此,如何设计高效且通用的编译程序已经成为当代计算机研究关注的焦点。 MSVL是一种时序逻辑程序设计语言,它将系统的仿真、建模和验证三大功能集合于一体,是形式化验证的有力工具。它是投影时序逻辑(Projection Temporal Logic,PTL)的一个可执行子集。MSV是基于MSVL语言开发的解释工具,其输入是用MSVL编写的形式良好的程序代码和性质代码。其中,程序代码描述了一般系统的模型,而性质代码描述了待验证系统的期望性质。 目前,MSVL只有解释执行工具,没有相应的编译程序。为了解决解释器执行效率较低的问题,本文结合一般编译器的实现原理和上述时序逻辑的相关知识,提出了MSVL编译器的基本原理及实现。本文的主要工作包含: 1.借助于现有的词法和语法分析生成器ParserGenerator,实现针对于MSVL语言的词法分析器和语法分析器。MSVL词法分析器的输入为形式良好的MSVL程序,输出为特定分割的标识流并同时做为语法分析器的输入。M S VL语法分析器的输出是与原M S VL程序语义等价的语法树结构。 2.实现了针对MSVL程序的语义相关分析,此处的语义相关分析主要指静态语义的分析。M S VL的静态类型检查机制有效避免了变量重定义以及引用未赋值变量等非法情况。本文定义符号表结构SymbolTable来存储变量的属性信息,在必要时通过查找SymbolTable获取所需属性值,从而实现MSVL的静态类型检查。在语义分析中,一旦有违反语义规范的情况发生,编译程序立即停止执行并报告错误。 3.给出了翻译算法TRANSLATE将源MSVL程序等价转换为中间语言MSIL程序,从而实现了高级语言向中间代码的转换。该翻译算法针对M S VL的基本语句进行了转换,是整个MSVL编译器的核心模块。为了方便理解TRANSLATE算法的基本思想,本文给出四个简单但具代表性的转换实例。通过具体的实例分析验证了中间代码生成算法的正确性。 4. MSIL中间程序产生之后,利用现有辅助工具即MSIL汇编程序将MSIL程序编译为语义等价的二进制可执行机器码,从而直接在目标机上运行。 通过以上四个步骤,最终实现了MSVL的编译程序。本文实现的MSVL编译程序,不仅有效解决了MSV解释器相比于一般编译器存在的执行效率较低问题,同时,为使用M S VL编译器进行高效的形式化验证提供了保障。