ImageVerifierCode 换一换
格式:DOC , 页数:62 ,大小:504KB ,
资源ID:248009      下载积分:15 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/248009.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(四川大学计算机学院-C-语言编译器-编译原理课程设计报告内附源码-递归下降-c-minus.doc)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

四川大学计算机学院-C-语言编译器-编译原理课程设计报告内附源码-递归下降-c-minus.doc

1、 编译原理课程设计报告 计算机学院 计科x班 xxx 094304xxxx编译原理课程设计报告课题名称: C-词法扫描器及语法分析器实现 提交文档学生姓名: XXX 提交文档学生学号: 0943041XXX 同组 成 员 名 单: 无 指导 教 师 姓 名: 张 兵 指导教师评阅成绩: 指导教师评阅意见: . . 提交报告时间:2012年 6月 2日目录1 课程设计目标32 分析与设计42.1 程序结构42.2 程序流程53 词法分析63.1 代码结构分析63.2 Token定义73.2.1 Token的定义和类型73.2.2 Token的种别码73.3 DAF分析83.3.1 删除注释DFA

2、83.3.2 词法分析DFA104 语法分析144.1 代码结构分析144.2 节点定义154.2.1 节点定义和类型154.2.2 各类型节点的描述164.3 递归向下语法分析164.3.1 C-文法164.3.2 递归向下分析过程175 测试结果345.1 流程345.2 词法分析结果345.3 词法分析出错385.4 语法分析结果395.5 语法分析出错416 总结426.1 词法分析编写过程426.2 语法分析编写过程436.3 成果和收获437 附录447.1 scanner.h源文件447.2 scanner.cpp源文件457.3 parser.h源文件557.4 parser.

3、cpp源文件561 课程设计目标学生在学习编译原理课程过程中,结合各章节的构造编译程序的基本理论,要求用C或C+语言描述及上机调试,实现一个 C-Minus 小编译程序(包括词法分析,语法分析等重要子程序),使学生将理论与实际应用结合起来,受到软件设计等开发过程的全面训练,从而提高学生软件开发的能力。 要求:(1)设计词法分析器设计各单词的状态转换图,并为不同的单词设计种别码。将词法分析器设计成供语法分析器调用的子程序。功能包括:a. 具备预处理功能。将不翻译的注释等符号先滤掉,只保留要翻译的符号串,即要求设计一个供词法分析调用的预处理子程序;b. 能够拼出语言中的各个单词;c. 返回(种别码

4、, 属性值)。(2)语法分析要求用学习过的自底向上或自顶向下的分析方法等,实现对表达式、各种说明语句、控制语句进行语法分析。若语法正确,则用语法制导翻译法进行语义翻译;生成并打印出语法树;若语法错误,要求指出出错性质和出错位置(行号)。2 分析与设计2.1 程序结构本节主要分析程序的代码结构和代码工程文件的划分。(程序由两个类组成: Scanner类和Parser类,分别为词法分析和语法分析类。工程分为四个文件:scanner.h、scanner.cpp、parser.h、parser.cpp,分别对应Scanner类和Parser类的声明和实现文件)。本程序采用C+语言以面向对象的思想编写,

5、程序分为两部分:词法分析(Scanner)和语法分析(Parser),分别将两个处理阶段封装成Scanner类和Parser类,两个类各司其职,分别完成词法分析和语法分析的任务。Scanner类主要的工作是过滤注释、词法分析获取Token。Parser类的主要工作是根据Scanner类词法分析之后的Token进行语法分析,生成语法树,最后并输出语法树。在处理过程中,Scanner类的对象作为Parser类的一个成员变量,配合Parser类进行语法分析。工程文件总体上是按照两个类的格局分为四个文件,分别是两个类的声明文件和实现文件。四个文件分别为scanner.h和scanner.cpp以及pa

6、rser.h和parser.cpp,他们分别是Scanner类声明文件、Scanner类实现文件、Parser类声明文件、Parser类实现文件。词法分析scanner.h:与词法分析相关的类(Scanner类)的声明scanner.cpp:词法分析阶段类(Scanner类)的实现语法分析parser.h:与语法分析相关的类(Parser类)的声明parser.cpp:语法分析阶段类(Parser类)的实现2.2 程序流程在程序中,Scanner类的对象(scanner)作为Parser类中的一个成员变量,配合Parser类进行语法分析。它们的关系是这样的:Parser类的一个成员变量scan

7、ner首先对源程序删除注释,然后进行词法分析获取所有Token,并将获取的Token存储在scanner对象的tokenList(vector类型)中。然后Parser类的语法分析程序就根据tokenList中的Token进行语法分析,生成语法树,最后打印语法树。同时,这也是程序的流程。整体程序流程图开始删除注释出错词法分析TF结束语法分析出错出错输出出错信息TFFT从文件获取源代码3 词法分析3.1 代码结构分析词法分析阶段的代码被封装成一个类Scanner,scanner.h中主要是Scanner类的声明代码,scanner.cpp中主要是Scanner类的实现代码。Scanner类对外提

8、供的函数主要有:getSourseStringFromFile(string s)(从文件中获取待分析的源代码)、deleteComments()(过滤注释)、scan()(词法分析主程序)。词法分析的过程主要是:l Scanner调用getSourseStringFromFile(string s),从文件中获取待分析的源代码l Scanner调用deleteComments(),将注释过滤掉,如果注释出错,则不进行词法分析l Scanner调用scan(),进行词法分析,将分析得到的所有Token保存在Scanner类的成员变量tokenList中,以备语法阶段调用,并将Token输出到文

9、件Token.txt中以上三个函数构成了词法分析的骨架,在Scanner类中还有其他成员变量和函数,主要作为这三个函数处理过程的中间步骤,为这三个函数服务。Scanner类的代码结构和主要的成员变量和函数如下图所示:其他函数和成员变量的作用和含义:l void backToLastChar():在词法分析过程中,回退一个字符l DFAState charType(char):返回字符的类型(按状态分),如white space返回START,0-9返回NUMl char getNextChar():获取到下一个字符l Token getTokenAt(int):根据下标从tokenList数组

10、中获取词法分析后所保存的Token(供语法分析阶段调用)l void printToken():将词法分析好的Token输出到文件Token.txt中l TokenType returnTokenType(string s):根据字符串返回对应的31种Token类型,如字符串int将返回INT, var将返回IDl int charIndex:配合getNextChar()和backToLastChar()使用(分别自增和自减1),用以指示当前待分析的char在源代码中的位置l bool commentFlag:标注注释开始的标志,为true时表示正在注释体内,即源代码进入/*之后且*/之前的

11、状态l int lineCount:对行号计数,表示当前词法分析在源代码的行位置(每次获取到的char为/n就自增1)l bool scanSuccess:词法分析是否成功的标志l string sourseString:获取源代码的字符串l string str:在分析过程中保存Token对应的串l vector tokenList:保存Token序列3.2 Token定义3.2.1 Token的定义和类型Token定义:/定义的Token结构体,包括类型、对应的串、所在代码的行号struct TokenTokenType tokenType;string tokenString;int l

12、ineNo;Token类型(TokenType):程序中,将Token的类型分为31种,分别对应于else、if、int、return、void、while、+、-、*、/、=、=、!=、=、;、,、(、)、/*、*/、num、id、错误、文件结束,TokenType的定义和种别码分别如下所示:/定义的Token的类型(31种),分别对应于else、if、int、return、void、while、+、-、*、/、=、=、!=、=、;、,、(、)、/*、*/、num、id、错误、结束typedef enumELSE = 1,IF,INT,RETURN,VOID,WHILE,PLUS,MINUS

13、,TIMES,OVER,LT,LEQ,GT,GEQ,EQ,NEQ,ASSIGN,SEMI,COMMA,LPAREN,RPAREN,LMBRACKET, RMBRACKET,LBBRACKET,RBBRACKET,LCOMMENT,RCOMMENT,NUM,ID,ERROR,ENDFILE TokenType;3.2.2 Token的种别码TokenType的种别码如下表所示,共31种单词符号种别码Value单词符号种别码ValueelseELSE1=ASSIGN17ifIF2;SEMI18intINT3,COMMA19returnRETURN4(LPAREN20voidVOID5)RPAREN21whileWHILE6LMBRACKET22+PLUS7RMBRACKET23-MINUS8LBBRACKET24*TIMES9RBBRACKET25/OVER10/*LCOMMENT26LT11*/RCOMMENT27GT13idID29=GEQ14错误ERROR30=EQ15结束ENDFILE31!=NEQ163.3 DAF分析由于词法分析程序分为两个步骤处理:删除注释和词法分析获取T

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1