一个简单的C语言编译器.doc

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一个简单的C语言编译器

一个简单的C语言编译器 一.小组成员 朱嘉俊(3991102161) 计算机996 王筱(3991102168) 计算机996 朱杭(3991102162) 计算机996 朱林(3991102094) 计算机994 二.运行方式 在DOS环境下运行: Cminus.exe filename -h 三.概述 经过一段时间的学习,我们在初步掌握了编译器的基本原理以后,设计了一个具有基本编译功能的编译器。该编译器接受类C语言语法的源代码输入,输出结果是PC机的汇编源代码。在捆绑了宏汇编编译器Masm后,即可直接生成MSDOS下的二进制可执行文件。为方便起见,以下简称为C—语言编译器。 本编译器实现了基本高级语言所必须的语法要素,包括简单变量声明、函数的实现、整数和字符串运算、条件判断语句和循环语句及跳转语句、基本代数运算、赋值等,还支持汇编语言嵌入。本编译器是利用编译器生成器Parse Generator和VC6.0在Windows平台上实现的,并开发了一个基于Windows平台的32位编译集成开发环境CompilerMan, 提供了关键字彩色提示、出错同屏提示、出错代码跳转等较为完善方便的功能。 由于编译程序本身涉及到词法分析、语法分析、代码生成、错误恢复和优化等诸多模块,要在实验中做到面面俱到不太可能,所以本编译器不可避免的会存在各种问题,但作为一个具有基本功能的、可扩充的系统,完全达到了巩固编译原理的理论知识,并将其运用于实践的目的。 四.背景 编译程序,就是一种具有编撰和翻译功能的程序。人们要用计算机来解决问题,首先面临的一个问题,就是要告诉计算机解决什么问题,或者告诉计算机如何解决这个问题。这就涉及到用什么样的语言来描述的问题,人所习惯的自然语言和计算机认识的机器语言有很大的差别,用机器语言来描述人想解决的问题十分不便,因而,计算机科学家设计一些人们比较习惯的语言来描述要解决的问题,称之为高级语言。用语言来描述的问题,统称为程序。然而,用高级语言写的程序,不能被计算机所直接认识和理解,必须经过等价的转换,变成机器能理解并执行的机器语言的程序。进行这种等价转换工作的工具,就是编译程序。 1.编译程序的结构 编译程序是很复杂的,但它可被分为相对独立的几个部分,每个部分承担专门的工作,各部分间互相共享传送数据。把编译程序分解成较小的部分,不仅便于开发、调试,而且便于编译程序的移植。一个典型的编译程序通常具有如图1的结构。 出错处理符号表管理目标机器码IRIR中间语言语法结构单词代码生成器优化器语义分析器语法分析器词法分析器图1 编译器基本结构 出 错 处 理 符 号 表 管 理 目标机器码 IR IR 中间语言 语法结构 单词 代码生成器 优化器 语义分析器 语法分析器 词法分析器 1.1 词法分析 词法分析负责对源程序的字符串进行扫描和分解,根据构词法将字符流(Character Stream)转化成单词流(Token Stream)。 例如对于C--语句: x = y + z – m * 10; 词法分析的结果是: ID ASSIGN ID ADD ID SUB ID MUL NUM SEMI 构词的规则就是词法,例如标识符(ID)可定义为以字母开头,后面跟零个或任意个字母或数字的序列。词法分析程序就根据词法构造有限自动机来识别每一个单词,将产生的单词交给语法分析程序。 1.2 语法分析 语法分析模块的任务是根据文法规则把单词序列分解成各类语法单位,识别出一个一个句子,例如对前面的语句进行语法分析可得到如图2的分析树。 如果输入单词不能构成语法树,则说明有语法错误。常见的语法分析方法分为自顶向下分析和自底向上分析两大类。在C--编译器中采用了一种自底向上的方法,即LR方法。 图2 语法分析树 NUM项ID项*表达式IDID-项表达式+项表达式=变量赋值语句 NUM 项 ID 项 * 表达式 ID ID - 项 表达式 + 项 表达式 = 变量 赋值语句 1.3 语义分析 这一阶段部分是根据前一阶段产生的语法树,按语言的语义进行翻译,产生四元式或三元式等中间语言。中间语言可以很方便地转换成目标代码。前面的语法树可能产生的四元式序列为: (*,_t0,10,m) (-,_t1,z,_t0) (+,_t0,y,_t1) (=,x,_t0) 由于中间语言对后面的代码优化和目标代码生成有密切关系,又和目标机器的体系结构有关,所以中间语言的选择对于编译器的

文档评论(0)

82393aa + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档