编译原理实验1文法类型判断.docx

编译原理实验1文法类型判断.docx

ID:52864336

大小:37.89 KB

页数:12页

时间:2020-03-31

编译原理实验1文法类型判断.docx_第1页
编译原理实验1文法类型判断.docx_第2页
编译原理实验1文法类型判断.docx_第3页
编译原理实验1文法类型判断.docx_第4页
编译原理实验1文法类型判断.docx_第5页
资源描述:

《编译原理实验1文法类型判断.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、学号L专业网络工程姓名黄武伟实验日期2018/4/11教师签字成绩实验报告【实验名称】文法类型的判断和推导序列的生成【实验目的】输入:一组任意的文法规则和任意符号串输出:相应的Chomsky文法类型和推导【实验要求】(1)文法的输入应简便(不代表产生式少)(2)指明是哪一类Chomsky文法,给出相应的四元组形式(为方便起见,不考虑0型文法)(3)给出清晰的推导序列,并判断输入的符号串是否为该文法的句型以下为判断文法类型代码段:intyi=1,er=1,left=0,right=0;for(i=0;i

2、+){if(m[i].r1)er=0;}if(er==1){printf("该文法满足2型文法");在满足1型文法的基础上若左边字符串个数为1则满足2型文法,在此设置一个标志位,当有一个产生式不满足此条件时标志位置0则不满足1型文法。for(i

3、=0;i2)break;//右部字符大于两个则退出if(m[i].r==1&&m[i].a[m[i].pos]>=65&&m[i].a[m[i].pos]<=90)break;//右部字符为一个非终结符则退出if(m[i].r==2&&(m[i].a[m[i].pos]<65&&m[i].a[m[i].pos+1]<65)

4、

5、(m[i].a[m[i].pos]>90&&m[i].a[m[i].pos+1]>90))break;//右部字符为两个终结符则退出if(m[i].r=

6、=2&&m[i].a[m[i].pos]>=65&&m[i].a[m[i].pos]<=90&&m[i].a[m[i].pos+1]>=65&&m[i].a[m[i].pos+1]<=90)break;////右部字符为两个非终结符则退出if(m[i].r==2&&m[i].a[m[i].pos]>=65&&m[i].a[m[i].pos]<=65&&(m[i].a[m[i].pos+1]<65

7、

8、m[i].a[m[i].pos+1]>90))left++;//左推倒加1if(m[i].r==2&&(m[i].

9、a[m[i].pos]<65

10、

11、m[i].a[m[i].pos]>90)&&m[i].a[m[i].pos+1]>=65&&m[i].a[m[i].pos+1]<=90)right++;//右推倒加1if(m[i].r==1&&(m[i].a[m[i].pos]<65

12、

13、m[i].a[m[i].pos]>90)){left++;right++;}//左右推倒同时加1}if(left==k

14、

15、right==k)printf("此文法满足3型文法");}}源代码如下:#includetyped

16、efstruct{chara[10];//存储每组产生式intvn_r;//右边非终结符个数intvn_l;//左边非终结符个数intr;//右部符号个数intl;//左部符号个数intpos//右部第一个字符位置}GL;voidmain(){GLm[10];inti=0,j,k;for(i=0;i<10;i++){scanf("%s",m[i].a);//输入时注意大写字母表示非终结符,小写字母和数字表示终结符,#结束if(m[i].a[0]=='#')break;}printf("");/*for(j=

17、0;j<10;j++){printf("%s",m[j].a);}*/for(i=0;i<10;i++){m[i].vn_r=0;m[i].vn_l=0;m[i].r=0;m[i].l=0;m[i].pos=0;}//初始化结构体内各变量的值i=0;k=0;intthu;//标志位,判断字母在左部还是右部while(m[i].a[0]!='#'){thu=0;for(j=0;j<10;j++){if(m[i].a[j]=='')break;if(m[i].a[j]=='-'){thu=1;j++;m[i

18、].pos=j+1;//找到各生成式中右边第一个字母位置}else{if(m[i].a[j]>=65&&m[i].a[j]<=90&&thu==0){m[i].vn_l++;m[i].l++;}if(m[i].a[j]>=65&&m[i].a[j]<=90&&thu==1){m[i].vn_r++;m[i].r++;}if((m[i].a[j]<65&&thu==0)

19、

20、(m[i].a

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。