语法分析程序报告.doc

上传人:小** 文档编号:3034015 上传时间:2020-06-23 格式:DOC 页数:9 大小:100.06KB
返回 下载 相关 举报
语法分析程序报告.doc_第1页
第1页 / 共9页
语法分析程序报告.doc_第2页
第2页 / 共9页
点击查看更多>>
资源描述

《语法分析程序报告.doc》由会员分享,可在线阅读,更多相关《语法分析程序报告.doc(9页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、!-xx理工大学编译原理题目 语法分析程序 姓名: 学号: 班级: 一、实验目的 编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。二、实验要求利用C语言编制递归下降分析程序,并对简单语言进行语法分析。2.1 待分析的简单语言的语法用扩充的BNF表示如下:=beginend:=;:=:=ID:=:=+ | -:=* | /:=ID | NUM | ()2.2 实验要求说明输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“success”,否则输出“error”。例如: 输入 begin a:=9; x:=2*3; b:=a+x end # 输

2、出 success 输入 x:=a+b*c end # 输出 error2.3 语法分析程序的酸法思想主程序示意图如图2-1所示。置初值调用scaner读下一个单词符号调用lrparser结束图2-1 语法分析主程序示意图递归下降分析程序示意图如图2-2所示。语句串分析过程示意图如图2-3所示。 是否begin?调用statement函数否是是否 ;?调用scaner否调用语句串分析程序是调用scaner是否end?否调用statement函数是调用scaner出错处理syn=0&kk=0?否是出错处理打印分析成功 图2-2 递归下降分析程序示意图 图2-3 语句串分析示意图statement

3、语句分析程序流程如图2-4、2-5、2-6、2-7所示。调用term函数是否标识符?否调用expression函数调用scaner是否:=?调用scaner是否+ , -?否否是调用scaner调用term函数出错处理出错处理图2-4 statement语句分析函数示意图 图2-5 expression表达式分析函数示意图调用scaner调用factor函数出错处理是否* , /?调用factor函数是否标识符?是否否是否整常数?是是否是否(?否是调用scaner是否)?调用expression函数图 2-6 term分析函数示意图否出错处理调用scaner调用scaner是图2-7 fact

4、or分析过程示意图三、语法分析程序的C语言程序源代码#include stdio.h#include string.hchar prog100,token8,ch;char *rwtab6=begin,if,then,while,do,end;int syn,p,m,n,sum;int kk;factor();expression();yucu();term();statement();lrparser();scaner();main() p=kk=0; printf(nGrade:05 Class:03 Name:Qiyubing Number:200507096 n); printf(n-

5、Please input the string end with #:- n); do scanf(%c,&ch); progp+=ch; while(ch!=#); p=0; scaner(); lrparser(); getch();lrparser() if(syn=1) scaner(); /*读下一个单词符号*/ yucu(); /*调用yucu()函数;*/ if (syn=6) scaner(); if (syn=0)&(kk=0) printf(SUCCESS!n); else if(kk!=1) printf(Sorry,the string havent got an en

6、d!n); kk=1; else printf(Sorry,havent got a begin!n); kk=1; return;yucu() statement(); /*调用函数statement();*/ while(syn=26) scaner(); /*读下一个单词符号*/ if(syn!=6) statement(); /*调用函数statement();*/ return;statement() if(syn=10) scaner(); /*读下一个单词符号*/ if(syn=18) scaner(); /*读下一个单词符号*/ expression(); /*调用函数stat

7、ement();*/ else printf(Sorry,the sing := is wrong!n); kk=1; else printf(Sorry,wrong sentence!n); kk=1; return;expression() term(); while(syn=13)|(syn=14) scaner(); /*读下一个单词符号*/ term(); /*调用函数term();*/ return;term() factor(); while(syn=15)|(syn=16) scaner(); /*读下一个单词符号*/ factor(); /*调用函数factor(); */

8、return;factor() if(syn=10)|(syn=11) scaner(); else if(syn=27) scaner(); /*读下一个单词符号*/ expression(); /*调用函数statement();*/ if(syn=28) scaner(); /*读下一个单词符号*/ else printf(Sorry,the error on (n); kk=1; else printf(Sorry,the expression error!n); kk=1; return; scaner() sum=0; for(m=0;m8;m+)tokenm+=NULL; m=0

9、; ch=progp+; while(ch= )ch=progp+; if(ch=a)|(ch=A) while(ch=a)|(ch=A)|(ch=0)&(ch=9) tokenm+=ch; ch=progp+; p-; syn=10; tokenm+=0; for(n=0;n=0)&(ch=0)&(ch=9) sum=sum*10+ch-0; ch=progp+; p-; syn=11; else switch(ch) case ) syn=21; else if(ch=) syn=22; else syn=20; p-; break; case :m=0; ch=progp+; if(ch

10、=) syn=24; else syn=23; p-; break; case :m=0; ch=progp+; if(ch=) syn=18; else syn=17; p-; break; case +: syn=13; break; case -: syn=14; break; case *: syn=15;break; case /: syn=16;break; case (: syn=27;break; case ): syn=28;break; case =: syn=25;break; case ;: syn=26;break; case #: syn=0;break; defa

11、ult: syn=-1;break; 四、程序运行结果(1)输入 begin a:=8;x:=5*8;b:=a+x end # 得到以下结果:(2)输入begin a:=6 ,显示如下“Sorry,wrong sentence!”的错误信息。(3)输入x:=a+b*c end # ,得到“Sorry,havent got a begin!”的错误信息。五、实验中遇到的问题: 由于对程序流程的分析不够彻底,导致在程序编写过程中出现一定的逻辑错误,后认真仔细研究流程图,解决了问题。六、总结:通过编译原理的这次程序实验,在认真仔细研究流程图后,经过对程序的动脑思考动手编写,更加透彻地理解了语法分析的过程,运行过程,以及该算法。经学习,理解了主程序的大致流程,即:“置初值”调用scaner函数读下一个单词符号调用IrParse结束。递归下降分析的大致流程为:“先判断是否为begin”不是则“出错处理”,若是则“调用scaner函数”调用语句串分析函数“判断是否为end”不是则“出错处理”,若是则调用scaner函数“判断syn=0&kk=0是否成立”成立则说明分析成功打印出来。不成立则“出错处理”。

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

当前位置:首页 > 技术资料 > 其他杂项

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com