语法分析编译原理实验报告_昆明理工大学.doc

上传人:飞****2 文档编号:78774233 上传时间:2023-03-19 格式:DOC 页数:7 大小:54KB
返回 下载 相关 举报
语法分析编译原理实验报告_昆明理工大学.doc_第1页
第1页 / 共7页
语法分析编译原理实验报告_昆明理工大学.doc_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《语法分析编译原理实验报告_昆明理工大学.doc》由会员分享,可在线阅读,更多相关《语法分析编译原理实验报告_昆明理工大学.doc(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、昆明理工大学信息工程与自动化学院学生实验报告( 2012 2013学年 第上学期 )课程名称:编译原理 开课实验室: 444 2012年 11 月 23 日专业、班级计科101班学号姓名成绩实验项目名称语法分析指导教师严馨教师评语该同学是否了解实验原理:A.了解B.基本了解C.不了解该同学的实验能力:A.强 B.中等 C.差 该同学的实验是否达到要求:A.达到B.基本达到C.未达到实验报告是否规范:A.规范B.基本规范C.不规范实验过程是否详细记录:A.详细B.一般 C.没有 教师签名: 年 月 日一、实验目的 编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。

2、二、 实验要求利用C语言编制递归下降分析程序,并对简单语言进行语法分析。2.1 待分析的简单语言的语法用扩充的BNF表示如下:main() ; ; |ID=if(条件)while() +|- * |/ ID|NUM| () |=|=|!=2.2 实验要求说明输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“success”,否则输出“error”。三、 语法分析程序的C语言程序源代码#include#includechar prog80,token8;char ch;int syn,p,m=0,n,sum,kk=0;char *rwtab6=function,if,then

3、,while,do,endfunc;void yucu();void expression();void statement();void factor();void term();void irparser();void scaner()for (n=0;n8;n+)tokenn=NULL;while(ch= | ch=n)ch=progp+;m=0;if(ch=a) | (ch=A)while(ch=a) | (ch=A) | (ch=0)tokenm+=ch;ch=progp+;syn=10;for(n=0;n6;n+)if(strcmp(token,rwtabn)=0)syn=n+1;

4、break;tokenm+=0;elseif(ch=0)sum=0;while(ch=0)sum=sum*10+ch-0;ch=progp+;syn=11;elseswitch(ch)case:m=0;tokenm+=ch;ch=progp+;if(ch=)syn=24;tokenm+=ch;elsesyn=23;p-;break;case= :m= 0;tokenm + =ch;ch=progp+;if(ch=) syn= 25;tokenm+= ch;elsesyn=18;ch=prog-p;break;case!:m=0; tokenm+= ch;ch=prog+p;if(ch=) sy

5、n=22;tokenm+= ch;else syn=-1;break;case+:syn=13; token0=ch;break;case-:syn=14; token0=ch;break;case*:syn=15; token0=ch;break;case/:syn=16; token0=ch;break;case;:syn=26; token0=ch;break;case(:syn=27; token0=ch;break;case):syn=28; token0=ch;break;case#:syn=0; token0=ch;break;default:syn=-1;/break;ch=p

6、rogp+; void irparser() if(syn=1)scaner();yucu();/*语句串分析*/if(syn=6) /*读到endfunc*/ scaner();if(syn=0&kk=0)/*程序分析识别完*/printf(success); elseif(kk!=1) /*没以endfunc结束*/printf(error!need endfunc);kk=1; else printf(error!needfunction); kk=1;void yucu() /*语句串分析*/ statement();/*调用语句分析函数*/ while(syn=26)/*一个语句识别

7、结束,继续识别*/ scaner(); statement(); return;void statement()/*语句分析函数*/ if(syn=10)scaner();if(syn=18) /如果是赋值语句scaner();expression(); /这个过程实现语法分析判断语句elseprintf(error!evaluate tag error);kk=1;else if(syn=6)return;elseif(syn=2) /如果是条件判断语句 就判断条件表达式的语法!scaner();if(syn=27) /判断括号匹配do scaner(); /进入括号内部进行表达式分析 ex

8、pression(); while(syn!=28); else printf(error! need another);kk=1; /()内判断完成 ! scaner(); /然后进行语句块分析! statement(); /到这里是实现判断if语句的语法分析/ 类似的往里添加 循环语句 ! elseif(syn=4) /如果是循环语句 就判断条件表达式的语法!scaner();/ch=progp+;if(syn=27) do scaner(); expression(); while(syn!=28); else printf(error! need another);kk=1; /()内

9、判断完成 ! scaner(); /然后进行语句块分析! statement(); /这里是实现判断while语句的语法分析elseprintf(error!the statement error!);kk=1;void expression()/*表达式分析函数*/ term(); while(syn=13|syn=14) scaner(); term();return; void term()/*项分析函数*/factor();while(syn=15|syn=16)scaner();factor();return;void factor()/*因子分析函数*/ if(syn=10|syn

10、=11)scaner();else/*看是否是表达式*/expression();if(syn=27) scaner();expression();if(syn=28) scaner();else printf(error! need another);kk=1; else printf(error! expression error!);void main()p=0;printf(n 请输入待分析的字符串:n);doch=getchar();progp+=ch; while(ch!=#);p=0;ch=progp+;scaner();irparser(); 四、 程序测试结果五、总结在这次实验中,我获得了很大的收获,让自己对语法分析程序的功能有了更进一步认识。虽然在程序的设计和编写过程中出现了一些错误,但是经过同学的帮助和指导,顺利的将程序中存在的错误顺利解决,从而顺利完成了本程序的设计和编译。从一开始对程序的陌生,到后来逐步了解程序的流程,当我耐心的一步一步理解程序思想,一次次的更改测试用例,一遍遍的调试,最终终于得到了预期的答案。这次实验使我对理论的语法分析递归下降的理解更加具体清晰,受益匪浅。同时,自己对语法分析的流程有了深刻的了解,使得语法分析递归向下思想更加具体化。 注:教师必须按照上述各项内容严格要求,认真批改和评定学生成绩。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁