编译原理课程设计一个简单编译器的设计与分析.docx

编译原理课程设计一个简单编译器的设计与分析.docx

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
摘要 使用过现代计算机的人都知道,多数用户是应用高级语言来实现他们所需要的计算的。现在计算机系统一般都含有不只一个的高级语言的编译程序,对有些高级语言甚至配置了几个不同性能的编译程序,供用户按不同需要进行选择。高级语言编译程序是计算机系统软件最主要的组成部分之一,也是用户最直接关系的工具之一。 计算机上执行一个高级语言程序一般分为两步:第一,用一个编译程序把高级语言翻译成机器语言程序;第二,运行所得的机器语言程序求得计算结果。 通常说的翻译程序是指能够把某一种语言程序转换成另一种语言程序(目标语言程序)。如果源语言诸如 Fortran,Pascal,C,Ada 或 java 这样的高级语言,而目标程序是诸如汇编语言或者机器语言这类的低级语言,这样的一个翻译程序就是称为编译程序。 一个编译程序的工作过程一般可以划分为五个阶段:词法分析、语法分析、语义分析与中间代码生成、优化、目标代码生成。每个阶段都是从上一个阶段得到结果,对他进行分析,并且根据一些外部环境(例如符号表等)得到最终的输出结果。要构造一个编译程序,可以按照这样的阶段来分别构造, 最后来连调。 现在人们已经建立了多种编制部分编译程序或整个编译程序的有效工具。有些能用于自动生成扫描器(如 LEX),有些可以用于自动产生语法分析器(如 YACC),有些甚至可以用来自动产生整个的编译程序。这些构造编译程序的工具成为编译程序-编译程序、编译程序产生器或翻译程序书写系统,他们是按照编译程序和目标语言的形式描述而自动产生编译程序的。 编译程序是一极其庞大而又复杂的系统,掌握它比较苦难。但是一旦对其掌握,对以后的程序语言设计,系统软件分析,系统软件设计,形式语言研究等方面都是非常有好处的。 关键字:C 语言、、编译、扫描器、语法分析 一、需求分析 给出类 C 语言(C 语言的子集)的词法和语法定义,并根据对应的语法定义写出一些属性文法和语法制导。根据词法和语法的定义,构造一个编译程序,它主要可以完成如下功能: 1、读入某个已经编辑好的类 C 源程序文件,通过词法分析器,生成二元组,同时检查词法错误; 2、语法分析器将产生的二元组作为输入,进行语法分析,同时检查语法错误; 3、在语法分析同时,利用属性文法和语法制导技术,产生具体的语意动作,并对符号表进行操作; 4、根据语义动作产生整个源程序的四元式序列; 5、将产生的四元式序列连同符号表一起输出,作为编译程序的最终输出结果; 6、对最后的代码优化和目标代码生成要有所考虑,必须留有一定的接口供以后扩展; 7、增大程序的可移植性,努力做到整个系统方便移植。 二、详细算法设计 词法分析程序 ? 语法分析程序 ? 语义分析程序 ?编译器。 三、流程图 图 图 I 主函数示意图 否 是否为main? 调用 scanner 否 是否为(? 调用 scanner 否 是否为)? 调用 scanner 否是否为{ ? 否 是否为{ ? 调用 scanner 调用语句串分析函数 staString 调用 scanner 否 是否为 } ? 出错处理 图 图 III 语句块分析示意图 调用语句分析函数 调用语句分析函数 sta 回溯,调用 backpatch 否 是否为 ; ? 调用 scanner 调用语句分析函数 sta 图 IV 语句串分析示意图 是否为 字符串? 是否为 字符串? 调用赋值语句分析函数 fuzhi 是否为 if ? 调用条件语句分析函数 tiaojian 是否为 do ? 调用循环语句分析函数 xunhuan 图 V 语句分析示意图 四、相关函数说明 void scanner(); //扫描void lrparser(); void staBlock(int *nChain); //语句块void staString(int *nChain); //语句串void sta(int *nChain); //语句 void fuzhi(); //赋值语句 void tiaojian(int *nChain); //条件语句 void xunhuan(); //循环语句char* E(); //Expresiion 表达式char* T(); //Term 项 char* F(); //Factor 因子 char *newTemp(); //自动生成临时变量void backpatch(int p,int t); //回填 int merge(int p1,int p2); //合并 p1 和 p2 void emit(char *res,char *num1,char *op,char *num2); //生成四元式 五.运行结果 图 VI 赋值语句的分析 图 VII 条件语句的分析 图 VIII 循环语句的分析 综合 六.

文档评论(0)

mph + 关注
官方认证
内容提供者

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

认证主体上海谭台科技有限公司
IP属地上海
统一社会信用代码/组织机构代码
91310115MA7CY11Y3K

1亿VIP精品文档

相关文档