- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理课程设计说明书题目:编译器原型设计与开发院(系):计算机科学与工程学院专业: 计算机科学与技术目录1 引言11.1 设计概述11.2 设计目标21.3 小组分工32 开发过程42.1 词法分析42.1.1 消除白空格以及注释42.1.2 词法分析62.2 .语法分析82.2.1 递归下降手工编码82.2.2 first集合的计算82.2.3 左递归消除92.2.4 selection表自动生成102.2.5 LL(1)手工编码112.3 语义分析112.3.1 表达式求值LR(1)112.3.2 四元式133 测试过程144 总结195 参考文献206 代码附录20引言编译程序是现代计算机系统的基本组成部分之一,而且多数计算机系统都配有不止一个高级语言的编译程序,对有些高级语言甚至配置了几个不同性能的编译程序。从功能上看,一个编译程序就是一个语言翻译程序。语言翻译程序把一种语言(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价程序。一个编译程序的重要性体现在它使得多数计算机用户不必考虑与机器有关的繁琐细节,使程序员和程序设计专家独立于机器,这对于当今机器的数量和种类持续不断地增长的年代尤为重要。编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体的过程。将编译过程划分成词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成六个阶段。设计概述编译原理程序结构框图词法分析词法分析是编译过程的第一个阶段。这个阶段的任务是从左到右有一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词(也称单词符号或符号)。这里所谓的单词是指逻辑上紧密相连的一组字符,这些字符基友具体含义。比如标识符是由字母字符开头,后跟字母、数字字符的字符序列组成的一种单词。保留字(关键字或基本字)是一种单词,此外还有算符、界符等。语法分析语法分析是编译过程的第二个阶段。语法分析的任务是在词法分析的基础上将单词序列分解成各类语法短语,如“程序”、“语句”、“表达式”等。一般这种语法短语,也称语法单位,可表示成语法树。语法分析所依据的是语言的语法规则,即描述程序结构的规则。通过语法分析确定整个输入串是否构成一个语法上正确的程序。语义分析语义分析是审查源程序有无语义错误,为代码生成阶段收集类型信息。比如语义分析的一个工作是进行类型审查,审查每个算符是否具有语言规范允许的运算对象,当不符合语言规范时,编译程序应报告错误。中间代码生成在进行了上述的语法分析和语义分析阶段的工作之后,有的编译程序将源代码变成一种内部表示形式,这种内部表示形式叫做中间语言或中间代码。所谓“中间代码”是一种结构简单、含义明确的记号系统,这种记号系统可以设计为多种多样的形式,重要的设计原则为两点:一是容易生成;二是容易将它翻译成目标代码。很多编译程序采用了一种近似“三地址指令”的“四元式”的中间代码,这种四元式的形式为:(运算符,运算对象1,运算对象2,结果)。设计目标鉴于我们需要完成编译器的词法分析、语法分析、语义分析、中间代码生成的设计开发,本次课程设计主要完成以下任务:词法分析:消除白空格消除注释词法分析语法分析:递归下降手工编码first集合的计算follow集合的自动计算selection表自动生成递归下降自动生成LL(1)分析手工编码LL(1)自动生成LR(1)分析手工编码左递归消除语义分析以及中间代码生成:中缀式转后缀式递归下降编码中缀式转后缀式LL(1)编码中缀式转后缀式LR1)编码表达式求值LL(1)表达式求值LR(1)四元式小组分工开发过程词法分析消除白空格以及注释这个模块实现的功能主要是对代码中多余的白空格以及注释进行消除。在文本中输入一段代码,其中可以有多余的空格和注释,经过这个程序运行后,将实现多余空格,注释去除。设计思路:这个模块一共有6个状态,设为0,1,2,3,4,5,其中状态转换图:字符转换表Ch_Type_Table:ASIC431310非白’非’/’非’*’非’\r’白’/*\r,\n01234说明:白’表示空格、TAB(\t);而 白是等于 白’+\r,\n,把\r,\n独立出来是为了消除注释需要。状态转换表state_Trans_Table:符号S_B01234001201101201200340333331444454544144Action_Table:S_AS_B0123450f_留f_改f_删///1f_留f_删f_删///2f_补//f_删f_删/3/f_改/f_删//4////f_删f_删5/f_改//f_删/其中在程序中f_留表示为f_save;f_改表示为f_change;f_补表示为f_add;f_删表示为f_delete;Action_Table表示为void(*Act
原创力文档


文档评论(0)