简单优先文法关系矩阵构造.docx
- 文档编号:1242552
- 上传时间:2022-10-19
- 格式:DOCX
- 页数:21
- 大小:142.59KB
简单优先文法关系矩阵构造.docx
《简单优先文法关系矩阵构造.docx》由会员分享,可在线阅读,更多相关《简单优先文法关系矩阵构造.docx(21页珍藏版)》请在冰豆网上搜索。
简单优先文法关系矩阵构造
通达学院
专业课程设计II
题目:
简单优先文法关系矩阵构造
专业计算机通信
学生姓名
班级学号28班09002802
指导教师徐佳
指导单位计算机学院计算机科学与技术系
日期2012.11.12-2012.11.23
教师评语
同学出勤率(满勤、较高、一般,较低),学习态度(端正、较端正、一般、较差),程序设计基础(好、较好、一般、较差),演示程序(已经、没有)达到了基本要求,算法设计(好、较好、一般),界面友好程度(好、较好、一般),答辩过程中回答问题(准确、较准确、错误率较高),撰写报告格式(规范、一般)、内容(丰满、简单)、表述(清晰、一般、不清楚),(圆满、较好、基本)完成了课题任务。
教师签名:
年月日
成绩评定
备注
简单优先文法关系矩阵构造
一、课题内容和要求
基本功能:
对任意输入的文法均可计算其文法符号的优先关系。
例如文法G[Z],一共有7个符号:
Z、M、L、a、b、(、),文法之间的关系(规则)如下:
Z∷=bMbM∷=(L|aL∷=Ma)
二、概要设计
1.字符串处理:
此模块要求能够从输入的字符串中提取出字符集,包括终结符和非终结符,建立对应的字符表。
2.矩阵的乘方:
此模块要求能够计算矩阵的乘方,细化后应包括有局真的乘法的子模块。
3.求解R,L,=关系模块。
1)R关系:
由语法语句定义可知”A:
:
=…|..”形式可知扫描每一句语句找出第四个字符,和“|”字符的下一个字符,同定义符构成R关系。
2)L关系:
由语法语句定义可知”A:
:
=…|..”形式可知扫描每一句语句找出最后一个字符,和“|”字符的前一个字符,同定义符构成L关系。
3)=关系:
例如”A:
:
=AS|Aa|b”可知只需从第四个字符开始依次查找,A=S,遇到“|”符号时扫描指针i向后移动两位。
4.矩阵的并(和)运算:
根据编译原理中简单文法的规则,需要求出L+关系,R+关系,L*关系,而此求解根据warshll算法的需要进行大量的乘方运算。
L+=(L)U(L^2)U(L^3)……U(L^n)
L*=(L^0)U(L^1)U(L^2)U(L^3)……U(L^n)
R+=(R)U(R^2)U(R^3)……U(R^n)
5.矩阵显示输出模块
6.流程图
三、详细设计
#include
#include
#include
inthasletter(char*v,charc)//判断字符表中是否含有某一字符
{
intmark=0;
intlength=strlen(v);
for(inti=0;i { if(c==v[i]) { mark=1;//mark=1字符表v中含有c break; } } returnmark; } voidsearchstring(char*v,char**pMatrix,intn)//建立字符表 { inti,k,p; char*Vletter=newchar[257]; Vletter[256]='\0';; for(i=0;i<256;i++) { Vletter[i]='\0'; } for(i=0,k=0,p=0;i { for(intj=0;j { if(! hasletter(v,pMatrix[i][j])) { if((pMatrix[i][j]<='Z')&&(pMatrix[i][j]>='A')) { v[k++]=pMatrix[i][j]; } elseif(! hasletter(Vletter,pMatrix[i][j])) { if(((pMatrix[i][j]<'A')||(pMatrix[i][j]>'Z'))&&(pMatrix[i][j]! =': '&&pMatrix[i][j]! ='='&&pMatrix[i][j]! ='|')) { Vletter[p++]=pMatrix[i][j]; } } } } } intvl=strlen(v); intVletterl=strlen(Vletter); for(i=vl,k=0;k { v[i]=Vletter[k]; } } /*******矩阵乘法******/ voidMatrix_mutiply(int**Matrix_1,int**Matrix_2,int**Matrix_Resutl,intn) { intlength=n; inttemp=0; for(introw=0;row { for(intcolumn=0;column { for(intm=0;m { Matrix_Resutl[row][column]+=Matrix_1[row][m]*Matrix_2[m][column]; if(Matrix_Resutl[row][column]! =0) { Matrix_Resutl[row][column]=1; } } } } } /*******矩阵输出显示******/ voidmatrixprint(int**ma,intlength)//矩阵的输出显示 { intmark=0; for(inti=0;i { for(intj=0;j { mark++; if(mark { printf("%d",ma[i][j]); } else { printf("%d\n",ma[i][j]); mark=0; } } } printf("\n\n"); } voidmatrixprintchar(char**ma,intlength,char*v)//矩阵的输出为>=<号 { intmark=0; printf(""); for(intk=0;k { printf("%c",v[k]); } printf("\n"); for(inti=0;i { printf("%c",v[i]); for(intj=0;j { mark++; if(mark { printf("%c",ma[i][j]); } else { printf("%c\n",ma[i][j]); mark=0; } } } printf("\n\n"); } /*******矩阵的转置******/ voidmatrixTravers(int**Matrix_1,int**matrixTravers,intn)//矩阵的转置 { inttemp=0; for(inti=0;i { for(intj=i+1;j { temp=Matrix_1[i][j]; Matrix_1[i][j]=Matrix_1[j][i]; Matrix_1[j][i]=temp; } } for(intk=0;k { for(intm=0;m { matrixTravers[k][m]=Matrix_1[k][m]; } } } /*******显示最后的优先关系矩阵******/ voidshowresult(int**BE_Matrix,int**BL_Matix,int**BB_Matrix,char**result_Matrix,intn)//合成最后的矩阵 { for(inti=0;i { for(intj=0;j { if(! ((BE_Matrix[i][j]==0)&&(BL_Matix[i][j]==0)&&(BB_Matrix[i][j]==0))) { if(BE_Matrix[i][j]==1) { result_Matrix[i][j]='='; continue; } elseif(BB_Matrix[i][j]==1) { result_Matrix[i][j]='>'; continue; } elseif(BL_Matix[i][j]==1) { result_Matrix[i][j]='<'; } } } } } voidcalcBLT(int**BE,int**BLPlus,int**BLLessThan,intn)//计算<=矩阵 { Matrix_mutiply(BE,BLPlus,BLLessThan,n); } voidcalcBBT(int**Matrix_1,int**Matrix_2,int**Matrix_Resutl,int**Matrix_BigT,intn)//计算>=关系 { int**Matrix_temp=newint*[n]; for(inti=0;i Matrix_temp[i]=newint[n]; for(i=0;i { for(intj=0;j { Matrix_temp[i][j]=0; } } /* for(i=0;i { for(intj=0;j { Matrix_BigT[j][i]=0; } } */ /***********修正使所有的非终结符对应的列置零******************/ Matrix_mutiply(Matrix_1,Matrix_2,Matrix_temp,n); Matrix_mutiply(Matrix_temp,Matrix_Resutl,Matrix_BigT,n); //matrixprint(Matrix_BigT,n); } voidinitialMatirx(int**Matrix,intn) { for(inti=0;i { for(intj=0;j
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 优先 文法 关系 矩阵 构造