编译原理课程设计实验报告_(川大张兵)

上传人:xmg****18 文档编号:120121602 上传时间:2020-02-04 格式:DOC 页数:75 大小:443.50KB
返回 下载 相关 举报
编译原理课程设计实验报告_(川大张兵)_第1页
第1页 / 共75页
编译原理课程设计实验报告_(川大张兵)_第2页
第2页 / 共75页
编译原理课程设计实验报告_(川大张兵)_第3页
第3页 / 共75页
编译原理课程设计实验报告_(川大张兵)_第4页
第4页 / 共75页
编译原理课程设计实验报告_(川大张兵)_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《编译原理课程设计实验报告_(川大张兵)》由会员分享,可在线阅读,更多相关《编译原理课程设计实验报告_(川大张兵)(75页珍藏版)》请在金锄头文库上搜索。

1、.word可编辑.编译原理课程设计报告课题名称: C-词法扫描器及语法分析器实现 提交文档学生姓名: 刘佳玉 提交文档学生学号: 2012141461134 同组 成 员 名 单: 无 指导 教 师 姓 名: 张兵 指导教师评阅成绩: 指导教师评阅意见: . . 提交报告时间: 2015 年 6 月 10 日目录编译原理课程设计报告11、课程设计目标22、分析与设计22.1程序结构22.2程序流程32.3词法分析32.3.1代码结构分析32.3.2token定义和类型42.3.3DNF分析42.4语法分析52.4.1代码结构分析52.4.2节点定义和类型52.4.3递归下降语法分析63、测试结

2、果113.1流程113.2出错情况154、总结154.1收获154.2特色154.3不足165、程序代码实现165.1递归下降源代码165.2C-文法201、课程设计目标学生在学习编译原理课程过程中,结合各章节的构造编译程序的基本理论,要求用C或C+语言描述及上机调试,实现一个 C-Minus 小编译程序(包括词法分析,语法分析等重要子程序),使学生将理论与实际应用结合起来,受到软件设计等开发过程的全面训练,从而提高学生软件开发的能力。要求:实现scanner和parser功能2、分析与设计2.1程序结构语法分析采用递归下降方法的程序结构:本程序采用面向对象的思想编写,使用C语言实现,程序分为

3、两部分:词法分析(scan)和语法分析(parse),分别将两个处理阶段写在两个函数中,分别是scan()和parse(),两个函数分别完成词法分析和语法分析的任务。scan()函数主要的工作是检查注释是否合法、词法分析获取token。parse()函数的主要工作是根据scan()词法分析之后的token进行语法分析,生成语法树,最后并输出语法树。2.2程序流程递归下降方法的程序流程图2.3词法分析2.3.1代码结构分析词法分析阶段的代码写在一个函数中scan()。main函数读取程序数据,将其存储在一个二维数组中,调用函数zhushierror(),确定程序是否存在注释错误,注释的错误主要是

4、注释的符号不匹配。如果不存在注释错误,则调用scan()函数进行词法分析,否则报错。词法分析是对输入的数据一个字符一个字符的分析,将所分析出来的token存储在一个vector数组中,方便后面语法分析时调用。词法分析没有什么错误限制,基本不会报错。所以在分析的同时,就会将所分析出的token输出 2.3.2token定义和类型token结构体定义如下:struct token/token结构体 Tokentype tokentype;/token类型 char tokenstring1100;/token串 int lineno;/token行号;token类型:/定义的Token的类型(29

5、种),分别对应于else、if、int、return、void、while、/+、-、*、/、=、=、/!=、=、;、,、(、)、num、id、错误、结束typedef enum elsee=1,iff,intt,returnn,voidd,whilee,xiaoyudengyu,dayudengyu,dengyudengyu,budengyu,/10 jia,jian,cheng,chu,dayu,xiaoyu,dengyu,fenhao,douhao,zuokuohao,youkuohao,zuozhongkuohao,/22 youzhongkuohao,zuohuakuohao,you

6、huakuohao,num,id,error,end/29Tokentype;2.3.3DNF分析词法分析的DFA描述:词法分析的DFA如下所示,一共分为5个状态:START、INNUM、INID、INDBSYM、DONE。状态START表示开始状态,状态INNUM表示数字类型(NUM)Token的状态,状态INID表示字符串类型Token的状态(如关键字和一般的标示符),状态INDBSYM表示双目运算符型Token的状态(如=、!=、=),状态DONE表示接收状态。2.4语法分析2.4.1代码结构分析语法分析阶段的代码中,每一条文法都有相对应的函数,通过函数之间的递归调用来达到语法分析的目的

7、。语法分析的过程主要是:在语法分析之前进行词法分析,然后通过递归向下分析法根据C-语言的文法进行语法分析,并生成语法树,最后打印语法树。下面是语法分析所用到的全局变量和函数的声明:token currenttoken;/当前tokentoken lasttoken;/上一个tokenint tokenxb=0;/token下标int blank=0;/先行空格void gettoken();/得到tokenvoid parseerror();/输出错误void match(Tokentype tt);/匹配treenode * compound_stmt();/函数声明void printsp

8、ace(int n);/打印空格void printtree(treenode * t);/打印语法分析树treenode * newnode(Nodekind kind);/创建新节点treenode * args();treenode * call(treenode * k);/函数调用treenode * factor(treenode * k);treenode * term(treenode * k);treenode * additive_expression(treenode * k);/加成的表达式treenode * simple_expression(treenode *

9、k);/简单表达式treenode * varr();treenode * expression();treenode * expression_stmt();/表达式声明treenode * return_stmt();/返回式声明treenode * iteration_stmt();/while声明treenode * selection_stmt();/if声明treenode * statement();/复合语句后者种类treenode * statement_list();/复合语句体后者treenode * local_declaration();/复合语句体前者treenod

10、e * param(treenode * k);/函参treenode * param_list(treenode * k);/函参列表treenode * compound_stmt();/函数内容,复合语句treenode * params();/函数参数treenode * declaration();/函数声明treenode * declaration_list();/多个函数列表treenode * parse();/语法分析2.4.2节点定义和类型节点定义:struct treenode/树节点结构体 treenode * child;/子节点 treenode * brothe

11、r;/兄弟节点 int lineno;/所在行 Nodekind nodekind;/节点类型 char nodestring1100;/节点类型所代表的字符串,用于语法树打印;节点类型:/19种节点类型,分别表示int、id、void、数值、变量声明、数组声明、函数声明、/函数声明参数列表、函数声明参数、复合语句体、if、while、return、赋值、运算、/数组元素、函数调用、函数调用参数列表、未知节点typedef enum ints,ids,voids,nums,var,shuzu,hanshu,hancanlist,hancan,fuheyuju,ifs,whiles,return

12、s, fuzhi,yunsuan,shuzuyuansu,hanshudiaoyong,hanshudiaoyongcanlist,unknownNodekind;/节点种类2.4.3递归下降语法分析2.4.3.1C-语法programdeclaration-listdeclaration_list declaration declaration declarationvar-declaration|fun-declarationvar_declaration type-specifier ID; | type-specifier ID NUM;type - specifier int | v

13、oidfun-declatationtype-specifier ID (params) | compound-stmtparamsparam_list | voidparam_listparam, paramparam type-specifier ID compound-stmt local-declaration statement-listlocal-declarations empty var- declarationstatement-liststatementstatementexpression-stmt | compound-stmt | selection-stmt | iteration-stmt | return-stmtexpression-stmt expression;selection-stmtif (expression) statement else statementiteration-stmtwhile (expression)statementreturn-stmtreturn expression;expression var = expression | simple-expressionrelop = | | = | = = | ! =varID | ID expressionsimple-expressionadditive-e

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号