编译原理课程设计.docx
《编译原理课程设计.docx》由会员分享,可在线阅读,更多相关《编译原理课程设计.docx(25页珍藏版)》请在课桌文档上搜索。
1、课程设计报告设计题目:一个简洁文法的编译器前端的设计与实现班级:计算机1206组长学号:202239组长姓名:闫智宣指导老师:李晓华设计时间:2022年12月设计分工组长学号及姓名:20223974闫智宣分工:语法分析,四元式生成,目标代码优化及生成组员1学号及姓名:20223977廖峭分工:词法分析,错误处理组员2学号及姓名:20223959郭天龙分工:符号表生成,语义动作插入,操作界面编译原理课程设计是通过C语言编译器相关子系统的设计,进一步深入对编译器构造的理解;第一部分词法分析,设计各单词的状态转换图,并为不同的单词设计种别码,制作扫描器识别一个个单词,返回值为识别码的序号,返回TOk
2、en序列。将词法分析器设计成供语法分析器调用的子程序。词法分析器具备预处理功能。将不翻译的注释等符号先滤掉,只保留要翻译的符号串,即要求设计一个供词法分析调用的预处理子程序;其次部分,语法分析,用递归下降法,实现对表达式、各种说明语句、掌握语句进行语法分析。若语法正确,则用语法制导翻译法进行语义翻译;生成并打印出语法树;若语法错误,要求指出出错性质和出错位置(行号)。我们还做了附加功能,即编译后端,有中间代码优化,生成目标代码汇编语言。通过此次课程设计,提高了我们的独立分析问题、解决问题的力量,以及系统软件设计的力量;提高程序设计力量、程序调试力量,团结协作力量关键词:词法分析,语法分析,四元
3、式生成,错误处理,符号表生成,语义动作插入,中间代码优化,生成目标代码名目摘要1 .峻2 .课程设计任务及要求2.1 设计任务2.2 设计要求3 .算法及3.1 算法的总体思想(流程)3.2 词法分析模块3.2.1 功能3.2.2 数据结构3.2.3 算法33语法分析模块功能1.1.2 数据结构1.1.3 算法1.4 符号表模块1.4.1 功能1.4.2 数据结构1.4.3 算法1.5 四元式模块1.5.1 功能1.5.2 数据结构1.5.3 算法1.6 语义动作分析模块1.6.1 功能1.6.2 数据结构1.6.3 算法1.7 错误处理模块1.7.1 功能1.7.2 数据结构1.7.3 算法
4、1.8 目标代码模块1.8.1 功能1.8.2 数据结构1.8.3 算法4 .程序设计与实现4.1 程序流程图4.2 程序说明43试验结果5 .结论6 .会城。7 .收获、体会和建议。编译器是将C语言翻译为汇编语言代码的计算机程序。编译器将源程序(sourcelanguage)编写的程序作为输入,翻译产生目标语言(targetlanguage)机器代码的等价程序。通常地,源程序为高级语言(high-levellanguage),C语言程序,而目标则是机器语言的目标代码(ObjeCtCode),也就是可以在计算机硬件中运行的机器代码软件程序。这一过程可以表示为:源程序一编译器一目标机器代码程序2
5、 .课程设计任务及要求2.1 设计任务同学在学习编译原理课程过程中,结合各章节的构造编译程序的基本理论,要求用C#言描述及上机调试,实现一个C编译程序(包括词法分析,语法分析等重要子程序),使同学将理论与实际应用结合起来,受到软件设计等开发过程的全面训练,从而提高同学软件开发的力量。2.2 设计要求要求:(1)设计词法分析器设计各单词的状态转换图,并为不同的单词设计种别码。将词法分析器设计成供语法分析器调用的子程序。功能包括:a.具备预处理功能。将不翻译的注释等符号先滤掉,只保留耍翻译的符号串,即要求设计一个供词法分析调用的预处理子程序;b.能够拼出语言中的各个单词;C.返回(种别码,属性值,
6、行号)。(2)语法分析要求用学习过的自底向上或自顶向下的分析方法等,实现对表达式、各种说明语句、掌握语句进行语法分析。若语法正确,则用语法制导翻译法进行语义翻译;生成并打印出语法树;若语法错误,要求指出出错性质和出错位置(行号)。3 .算法及数据结构 .1算法的总体思想(流程)本节主要分析程序的代码结构和代码工程文件的划分。(程序由几个类组成:TOken类和Variable类SymbolTable类ObjectCode类LeXiCaI类Grammar类Four_Yuan类Action类ErrorItem类,分别为词法分析和语法分析类。工程分为几个文件:Forml.cs,Token,cs,Var
7、iable,cs,SymbolTable.cs,ObjectCode.cs,Lexical,cs,Grammar,cs,Four_Yuan,cs,Action,cs,ErrorItem,cs分别对应Token类和VariabIe类SymbolTable类ObjectCode类Lexical类Grammar类FourYuan类ACtion类ErrorItem类的声明和实现文件)。本程序采纳C#语言以面对对象的思想编写,程序分为几部分:词法分析(Lexical),语法分析(Grammer),目标代码生成(ObjectCode)oLeXiCaI类主要的工作是词法分析猎取TOkenOGrammer类的
8、主要工作是依据Lexical类词法分析之后的Token进行语法分析,生成语法树,最终并输出语法树。在处理过程中,Token类的对象作为Lexical类的一个成员变量,协作Grammer类进行语法分析。工程文件总体上是依据九个类的格局分为十个文件,分别是九个类的声明文件和实现文件。十个文件为Forml.cs,Token,cs,Variable,cs,SymbolTable.cs,ObjectCode.cs,Lexical,cs,Grammar,cs,FourYuan,cs,Action,cs,ErrorItem.cs,他们分别是Lexical类声明文件、Lexical类实现文件、GraInmer
9、类声明文件、Grammer类实现文件。H解决方案-CompHerF个项目)/回compilerProperties 引用cAction.cscErrorltemxs 国Form1.cs cFour_Yuan.csC*Grammar.es cLexical.escObjectCodexsDc,Program.esC*SymbolTable.es cTokenxsDc*Variable.es程序流程在程序中,Lexical类的对象(Token)作为Grammer类中的一个成员变量,协作Grammer类进行语法分析。它们的关系是这样的:Grammer类的一个成员变量temp首先对源程序删除注释,然后
10、进行词法分析猎取全部TOkCrb并将猎取的Tokerl存储在Tokerl对象的tokenList(List类型)中。然后Gramner类的语法分析程序就依据tokenList中的Token进行语法分析,生成语法树,最终打印语法树。同时,这也是程序的流程。3.2词法分析模块3.2.1功能1.exical类主要的工作是词法分析猎取Token序列。词法分析阶段的代码被封装成一个类Lexical,Token中主要是Lexical类的声明代码,Lexical.cs中主要是LeXiCal类的实现代码。LeXiCal类对外供应的函数主要有:staticpublicintRecogIcKstringstr,i
11、nti),static publicintRecogDig(stringstr,inti),staticpublicintRecogOperator(stringstr,inti),staticpublicintRecogBound(stringstr,inti),以上几个函数构成了词法分析的骨架,在LCXiCal类中还有其他成员变量和函数,主要作为这三个函数处理过程的中间步骤,为这三个函数服务。Lexical类的代码结构和主要的成员变量和函数及其含义如下图所示:staticpublicstringPrirrtTOkenLiSto/HmTOkerl序歹1|口i个引用staticpublicbo
12、ollsSign(charch)/识311下划绑口i个引用staticpublicintRecogld(stringstr,inti)/识别单词匚i个引用staticpublicintReCOgDig(StlingStLinti)识别数字匚i个引用staticpublicintRecogperator(stringstr,inti)/识操作符口i个引用staticpublicintRecogBound(stringstr,inti个引用staticpublicboollsBound(charch)/判断界符口个引用staticpublicboollsperator(charCh)判断操作符匚i
13、个引用staticpublicvoidGetString(stringstr)读入字符串口算法算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是依据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。主程序示意图:主程序示意图如图3T所示。关键字表的初值。关键字作为特别标识符处理,把它们预先支配在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。(2)程序中需要用到的主要变量为type和number扫描子程序的算法思想:首先设置3个变量:token用来存放构成单词符号的字符串;number用
14、来整型单词;type用来存放单词符号的种别码。Token定义Token定义:classToken(publicintLineNo;publicstringName;publicstringType;)Token3!(TokenType):publicstaticListTokenList=newList0;publicstaticListKeyword=newListauto,fdouble,int,struct1,break,elsen,long,switch,case,enum,register41,*typedef,char,extemfreturn,union,const,i,lflo
15、at,7short,funsigned,continue,lorj,signedn,l,void,defaultfgoto,f,sizeofi,Volatile,do,7if,while,7static;关键字staticListBound=newLiStVSt而gJ。,;*?,MTW,#N;/界符表staticUstOperator=newUst+,7,*-r,%,711r,!,7,=f=Mf=,f=f,*=,f,7=;33语法分析模块功能语法分析是编译过程的一个规律阶段。语法分析的功能是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”,“语句”,“表达式”等等.语法分析程序推断源
16、程序在结构上是否正确.源程序的结构由上下文无关文法描述.33.2城的下图为实现语法分析的类Grammar,属性与方法的作用都已说明na*espaceconpilerclassGranmarpublicstaticinttoken_no=0:BIII/判断是否为数据类型/paranname=strX/Paran1IIIEpublicstaticboolIsTypeCode(stringstr)/判断是否为药据类型HpublicstaticvoidParentheSiSNatChingO花名号坨g?文法!吾有英)?)j.publicstaticvoidVarlabIe0标浜苻或括号Q().publ
17、icstaticvoidLogiCo/逻辑表达式文法LOC工(publicstaticvoidCgpareO比较表达式文法F0.JSpublicstaticvoidRUlDiV()算术(束除)表达式支法申publicstaticvoidEXPre6sion()尊犷表谊式文法E()T7-EpublicstaticvoidComJIao逗号表达式31);OlpublicstaticvoidStatementBlock()/整体流程簿句;.publicstaticvoidStarto开始语法分析,处理的航f()匚7333算法1 .文法下面终结符与非终结符意义B程序开头Z数据类型,如inl,char,
18、fk)al等V标识符S晌P语句块E加减算术表达式D逗号表达式T乘除算术表达式C关系表达式1.规律表达式Q标识符或圆括号e表示空i表示标识符a)函数文法B-ZV()Sb)语句块文法P-SPeS-Pc)语句文法表达式语句文法S-V=Egoto语句文法S-T:SS-gotoiif语句文法S-iRE)SelseSwhile语句文法S-While(E)S声明语句文法S-ZVDD.,VD=EDed)表达式文法ETE+TE-TT-FTFlTFC-CCLOLC=CCbolTable(publicstringname:publicstringtype;publicstringcategory;publicstr
19、ingaddress:publicboolisactivity;publicstaticintsybol-i=0;publicstaticStacktypestack=newStaCkstring)。;/类型栈:声明时保存逗号表达式的变里类空publicstaticListSymList=newListbolTable();3个弓I用publicstaticboolGetIsActivity(stringna*e,booltep)查找符号裹返回活跃信息匚二I个引用publicstaticstringPrintSymList().1个引用publicstaticvoidDefault().5个引
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 课程设计

链接地址:https://www.desk33.com/p-438639.html