小型编译程序的构造研究.doc

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

小型编译程序的构造研究 小型编译程序的构造研究摘要: 掌握计算机语言的词法分析程序的开发方法以及计算机语言的语法分析程序设计与属性文法应用的实现方法。培养“计算思维能力”——模型化、抽象思维能力、逻辑思维能力以及算法设计与分析能力,程序设计与实现能力和计算机系统的认知、分析… 2012必威体育精装版大学毕业设计论文结束语范文 现在又很多大四的同学都在找毕业论文结束语的文章,现在我发7篇毕业论文结束语范文供打下参考,免去毕业论文结束语这么写的烦恼!这个毕业论文谢词,不是毕业论文结束语! 结束语一:经过了两个多月的学习和工作,我终于完成… 8、小松树和大松树一、激趣导入。1、同学们喜欢听歌吗?今天老师带来了一首好听的儿歌,想不想听一听?(p播放儿歌《小松树》)2、这首歌里唱了什么?(指名说)出示词语:松树,谁能把它的念准了?(指名读)3、请你们举起右手,和老师一起写写这个松字,(教师范… 小型编译程序的构造研究 摘要: 掌握计算机语言的词法分析程序的开发方法以及计算机语言的语法分析程序设计与属性文法应用的实现方法。培养“计算思维能力”——模型化、抽象思维能力、逻辑思维能力以及算法设计与分析能力,程序设计与实现能力和计算机系统的认知、分析、设计和应用能力。 关键字:语法分析 计算机系统 1实现的功能 编制一个能够分析证书、标示符、主要运算符和主要关键字的词法分析程序。 2需求分析 给出类扩充的样本S语言的词法和语法定义,并根据对应的语法定义写出一些属性文法和语法制导。根据词法和语法的定义,构造一个编译程序,它主要可以完成如下功能: 1、读入某个已经编辑好的类S语言源程序文件。 2、语法分析器将产生的二元组作为输入,进行语法分析,同时检查语法错误; 3、在语法分析同时,利用属性文法和语法制导技术,产生具体的语意动作,并对符号表进行操作; 4、根据语义动作产生整个源程序的四元式序列; 5、将产生的四元式序列连同符号表一起输出,作为编译程序的最终输出结果; 6、对最后的代码优化和目标代码生成要有所考虑,必须留有一定的接口供以后扩展; 7、增大程序的可移植性,努力做到整个系统方便移植。 3问题及解决方法 1. 本次的实验我们采用了LL(1)文法,做的时候,首先求出项目集规范族,然后根据项目集规范族画出状态转移图,进而根据状态转移图形成分析表。 2.为打出3 地址码有两种方法,一是利用回填技术,二是先构造出语法树,之后再通过自顶向下遍历这棵语法树打出3 地址码。我采用了第2 种方法。 4详细设计 4.1函数子程序 1)char *newTemp() 该函数的功能是会动一个新的临时变量,临时变量名产生的顺序是T1,T2,T3,…. 2)int merge(int p1,int p2) 该函数的功能是将以P1,P2为链首的两条链合并成一条链,返回时的函数值作为合并后的链首。 3)void backpatch(int p,int t) 该函数的功能是把P所链接的每个四元式的第四区段(result段)都回填t。 4)void fuzhi() 该函数的功能是对赋值语句进行分析。 5)void tiaojian(int *nChain) 该函数的功能是对条件语句进行分析。 6)void xunhuan() 该函数的功能是对循环语句进行分析。 //::=do while void xunhuan() char res[10],num1[10],num2[10],op[10]; int nChainTemp; if(syn==8) //do { nnc=nextq; //记住if语句位置,emit之后nextq就变了 //emit(“0”,”if”,num1,”goto”); scanner(); staBlock(nChainTemp); //语句块 if(syn==9) //while { scanner(); if(syn==26) //( { scanner(); strcpy(num1,E()); if((syn=32)) { switch(syn) { case 32: strcpy(op,”“); break; case 33: strcpy(op,”=“); break; case 34: strcpy(op,” } break; case 35: strcpy(op,”backpatch(nnb,nnc); nna=nextq; emit(“

文档评论(0)

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

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

1亿VIP精品文档

相关文档