1、 摘要摘要 使用过现代计算机的人都知道,多数用户是应用高级语言来实现他们所需要的计算的。现在计算机 系统一般都含有不只一个的高级语言的编译程序,对有些高级语言甚至配置了几个不同性能的编译程 序,供用户按不同需要进行选择。高级语言编译程序是计算机系统软件最主要的组成部分之一,也是 用户最直接关系的工具之一。 计算机上执行一个高级语言程序一般分为两步:第一,用一个编译程序把高级语言翻译成机器语言 程序;第二,运行所得的机器语言程序求得计算结果。 通常说的翻译程序是指能够把某一种语言程序转换成另一种语言程序 (目标语言程序) 。 如果源语言 诸如 Fortran,Pascal,C,Ada 或 jav
2、a 这样的高级语言,而目标程序是诸如汇编语言或者机器语言这类 的低级语言,这样的一个翻译程序就是称为编译程序。 一个编译程序的工作过程一般可以划分为五个阶段:词法分析、语法分析、语义分析与中间代码生 成、优化、目标代码生成。每个阶段都是从上一个阶段得到结果,对他进行分析,并且根据一些外部 环境(例如符号表等)得到最终的输出结果。要构造一个编译程序,可以按照这样的阶段来分别构造, 最后来连调。 现在人们已经建立了多种编制部分编译程序或整个编译程序的有效工具。有些能用于自动生成扫描 器(如 LEX),有些可以用于自动产生语法分析器(如 YACC),有些甚至可以用来自动产生整个的编译程 序。这些构造
3、编译程序的工具成为编译程序编译程序、编译程序产生器或翻译程序书写系统,他们 是按照编译程序和目标语言的形式描述而自动产生编译程序的。 编译程序是一极其庞大而又复杂的系统,掌握它比较苦难。但是一旦对其掌握,对以后的程序语言 设计,系统软件分析,系统软件设计,形式语言研究等方面都是非常有好处的。 关键字:C 语言、 、编译、扫描器、语法分析 一一、需求分析、需求分析 给出类 C 语言(C 语言的子集)的词法和语法定义, 并根据对应的语法定义写出一些属性文法 和语法制导。根据词法和语法的定义,构造一个编译程序,它主要可以完成如下功能: 1、读入某个已经编辑好的类 C 源程序文件,通过词法分析器,生成
4、二元组,同时检查词法错误; 2、语法分析器将产生的二元组作为输入,进行语法分析,同时检查语法错误; 3、在语法分析同时,利用属性文法和语法制导技术,产生具体的语意动作,并对符号表进行操作; 4、根据语义动作产生整个源程序的四元式序列; 5、将产生的四元式序列连同符号表一起输出,作为编译程序的最终输出结果; 6、对最后的代码优化和目标代码生成要有所考虑,必须留有一定的接口供以后扩展; 7、增大程序的可移植性,努力做到整个系统方便移植。 二、详细算法设计详细算法设计 词法分析程序 语法分析程序 语义分析程序 编译器。 三三、流程图流程图 图 I 主函数示意图 是否为 main? 调用 scanner 是否为(? 调用 scanner 是否为)? 调用 scanner 调用语句块分析函数 staBlock 出错处理 否 否 否 图 II 递归下降分析程序示意图 是否为 ? 调用 scanner 调用语句串分析函数 staString 调用 scanner 是否为 ? 出错处理 否 否 图 III 语句块分析示意图 调用语句分析函数 sta 回溯,调用 backpatc