1、 目目 录录 一、需求分析一、需求分析 . 1 二、系统概论二、系统概论 . 1 21 编译器的结构编译器的结构 1 2 22 2 编译器的实现编译器的实现 2 2 23 3 主要完成的工作主要完成的工作 4 三、三、LL(1)LL(1)文法以及属性文法文法以及属性文法. 5 3.13.1 LL(1)LL(1)文法及其分析器文法及其分析器 . 5 四四、输入文件的结构及词法输入文件的结构及词法. 7 4.1 4.1 词法工具的使用说明词法工具的使用说明 . 7 4.2 4.2 输入文件的语法结构输入文件的语法结构 . 8 4.3 4.3 输入文件的词法结构及其实现输入文件的词法结构及其实现 1
2、1 五五、系统设计与实现系统设计与实现 14 5 51 1 规则的存储结构规则的存储结构 14 5 52 2 建立规则的存储建立规则的存储 15 5 53 3 非终结符推出空非终结符推出空 15 5 54 4 计算计算 firstfirst 集集 16 5 55 5 计算计算 followfollow 集集 16 5 56 6 计算计算 predictpredict 集集 17 5 57 7 判断是否判断是否 LL(1)LL(1) . 17 5 58 8 输出文输出文件中函数的格式件中函数的格式 . 17 参考文献参考文献. 19 编译原理课程设计 1 一、需求分析一、需求分析 编译器的构造工
3、具比如 YACC,BISON 根据语言的高级描述生 成语言处理器(编译器,解释器,转换器)。根据用户输入的语言的文 法, 编译器的构造工具可以生成程序来处理以用户输入的文法书写的 文本。随着计算机应用范围的扩大,在软件自动生成,文档处理,特 定专业的语言等领域,编译器的构造工具这一技术显得越来越重要。 类 YACC 的编译器的构造工具是基于 LALR(1)方法,这一方法在时 间和空间代价方面是有效的, 而且所能解析的语言也覆盖了大部分语 言,因些大多数的编译器的编译器都是针对 LALR(1)的,而很少有针 对 LL(1)文法的。 二、系统概论二、系统概论 21 编译器的结构 不同的编译器都有自
4、己的组织和工作方式,它们都是根据源语言 的具体特点和对目标语言的具体要求来决定和设计出来的。因此,并 没有一种固定的编译器的结构,但从功能结构几乎都是一致的。 这里 说的功能结构是指编译器内部都做哪些工作, 以及它们彼此之间的关 系。图 1 说明了一般的编译程序的功能结构。 编译原理课程设计 2 2 22 2 编译器的实现编译器的实现 编译程序是一个相当复杂的系统程序,通常有上万甚至几万 条指令。随着编译技术的发展,编译程序的开发周期也在逐渐缩 短,但仍然需要很多人年,而且工作很艰巨,正确性也不易保证。 要实现一个编译程序,通常需要做到: (1) 对源语言的语法和语义要有准确无误的理解,否则难以保证编 译程序的正确性。 (2) 对目标语言和编译技术也要有很好的了解,否则会生成质量不 高的目标代码。 (3) 确定对编译程序的要求,如搞不搞优化,搞优化搞到哪一级? 等等。 (4) 根据编译程序的规模,确定编译程序的扫描次数、每次扫描的 具体任务和所要采用的技术。 (5) 设计各遍扫描程序的算法并加以实现。 一般开发编译程