您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > C语言编译器设计和实现
C语言编译器的设计和实现LOGO目录1背景及意义234相关技术及理论系统需求分析系统总体设计5系统详细设计和实现背景及意义1背景随着计算机的广泛应用,计算机程序设计语言也从初期的机器语言发展为汇编语言,以及限制的各种高级程序设计语言。而编译技术室计算机语言发展的支柱,也是计算机科学中发展最迅速、最成熟的一个分支,他集中体现了计算机发展的成果与精华。其核心思想就是把同样的逻辑结构和思想从一种语言表示的程序转换为另外一种语言表示的程序。从高级语言,最终到硬件执行的物理信号,这一层层的转化,都涉及编译技术的应用。因此,编译技术是人类智慧到机器执行的桥梁,从软件到硬件层层推进的衔接力量。背景及意义•编译器是一种相当复杂的程序,其代码的长度可从几千行到几百万行不等。编写甚至读懂这样的一个程序都非易事,大多数的计算机专业人员从来没有编写过一个完整的编译器。但是,几乎所有形式的计算均要用到编译器,而且任何一个与计算机打交道的专业人员都应该掌握编译器的基本结构和操作。•因此,掌握这一技术具有非常重大的实际意义。2意义相关环境•VC2019软件环境硬件环境•CPU:IntelCoreI5•操作系统:Windows7相关理论•编译原理形式语言理论词法分析语法分析语义分析中间代码生成使用技术标准C++实现保存不同信息的数据结构大量算法开发步骤1.认真分析,合理分工2.算法设计,方案确定3.语言选择,编制程序4.调试程序,确保质量5.资料整理,文本形成系统需求分析编译程序的任务:源程序目标程序两者语法结构上可以不同,但语义上是等同的系统需求分析功能识别C源文件语法正确性判断出错类型识别词法错误分析C源文件语义系统总体设计系统详细设计和实现•词法分析•语法分析•语义分析•中间代码生成词法分析词法分析的功能属性字:单词的一种机内表示(反映单词的有关特性).单词符号(单词):程序语言具有独立意义的最小语法单位保留字(关键字)常数标识符界限符(特殊符号)程序语言定义的具有固定意义的标识符如:Pascal中的begin、end、if、while…。用来表示各种名字.如:变量名、数组名、过程名等。如:128、0.123、3.14E-2…。如:+、-、*、/、=、=、》=、《=等。单词符号词法分析单词符号的种类词法分析程序的设计与实现初始化读字符是字母?读标识符数字?取数字查常量表生成属性字写到输出流是否分析结束结束特殊符号?出错查特殊符号表生成属性字查保留字表查到?查名字表生成属性字生成属性字YYYYNNNNYN语法分析•自顶向下•LL(1)•递归下降•自底向上•LR(0)•SLR(1)•LR(1)•LALR(1)语法分析--LR(1)LR(K)是一种有效的自底向上语法分析方法。它的适应范围广,分析速度快,且能准确及时地发现语法错误,所以是当前最一般的语法分析方法。LR(0)是基础,但分析能力低,局限性大SLR(1)“简单LR”实现容易,能力较强,不适合有些文法LR(1)分析能力最强,适用于大多数文法,但工作量大LALR(1)能力介于SLR(1)与LR(1)之间,空间节省语法分析--LR(1)1、分析思想及逻辑结构语法分析--LR(1)1、分析思想及逻辑结构#……#分析表总控程序……#控制机构0S1SnSnx1xia1iar4语法分析--LR(1)•语法分析采用LR分析器,由于分析表数据量庞大,采用程序自动算出。•1)求非终结符的first集。为方便以后访问,求完所有非终结符的first集后将它放在一个以非终结符为键的hash表中。语法分析--LR(1)•2)求项目集闭包,需要用到第1步中的结果。闭包利用集合的唯一性,故使用C++标准STL库中的set模板。利用一个三元式存储标识一个产生式:structitem_node{size_tcfg_no;//产生式编号size_tdot_pos;//加点位置intpossible_prefix;//输入符号};语法分析--LR(1)•3)求go函数。即是一个项目集遇到输入代码流中的一个符号后转向的另一个状态时候的项目集,并将之返回。•4)求整个文法的项目集簇。项目集的个数即为有穷状态自动机的状态个数,根据以上57个产生式,本编译器产生的状态为171个。语法分析--LR(1)•5)生成LR(1)分析表,由于分析表的庞大,故将之生成后存于文件中。即action_goto_table.txt•6)完成LR分析器,读入第5步的分析表即可进行语法分析。语法分析--LR(1)[A]:A→B,AA→BB→aB→bG[A]的LR分析表语法分析--LR(1)状态ab,#ABS0S3S412S1accS2S5r2S3r3r3r4r4S3S462S6r1ACTIONGOTOS4S5语义分析•将语言结构的语义以属性(attribute)的形式赋予代表此结构的文法符号,而属性的计算以语义规则(semanticrules)的形式赋予由文法符号组成的产生式;在语法分析推导或归约的每一步骤中,通过语义规则实现对属性的计算,以达到对语义的处理。•最终生成三地址码的四元式表示形式语义分析•对于在语法分析的每一个非终结符号,需要记录该符号所包含的代码,对于表达式的翻译,还要记录表达的地址,定义结点U_node如下:•structU_node•{•stringname;//名字•stringcode;//四元式代码•inttype;//类型•intaddr;//地址•stringop;//操作符•intinstr;//当前指令地址•vectorinttruelist;//布尔表达式真出口•vectorintfalselist;//布尔表达式假出口•vectorintnextlist;//跳转指令出口•};语义分析LR分析器里面的栈节点structstack_node{intstate;tokentok;U_nodenodeInfo;};语义分析LR分析器里面的栈节点structstack_node{intstate;tokentok;U_nodenodeInfo;};语义分析符号表,使用链表存储structidenfierNode{inttype;//类型intaddr;//地址};总结•通过毕设对于项目设计有一个全面的、深刻的认识。•开发调试能力的提高•锻炼了在面对一个具体的项目时,遇到问题,分析问题,解决问题的能力质量,为以后研发工作打下坚实的基础,积累宝贵的经验
本文标题:C语言编译器设计和实现
链接地址:https://www.777doc.com/doc-7332305 .html