编译原理课程设计报告集合LASTVT(P)构造算法的程序实现_编译程序构造实验报告
编译原理课程设计报告集合LASTVT(P)构造算法的程序实现由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“编译程序构造实验报告”。
计算机与信息学院 编译原理课程设计 实验报告
专
业
班
级 学生姓名及学号 课程教学班号 任
课
教
师 实验指导教师 实验地
点
学年第学期
设计目的及要求:
集合LASTVT(P)构造算法的程序实现
设计内容及要求:构造一程序,实现教材P.91的LASTVT(P)集合的构造算法。对任一给定的算符文法G,程序输出所有非终结符P的LASTVT(P)。
设计内容:
实现教材上的算法,对于任意给定的算符文法,输出算符文法中所有的非终结符P的LASTV(P);
主要算法描述:
对于输入的文法,使用一个char型二维数组进行存储,依次对每个非终结符求LASTVT 集。
输入输出形式:
输入: 程序运行后从控制台输入算符文法,要指定输入的文法规则数目,且形式与教材文法相同。
输出:在控制台输出每个非终结符的LASTVT集,且将带有‘|’的文法转换成多个文法。
总结:
本次课程设计我借鉴了第四学期编译原理课程的课程实验,通过本次课程设计我对编译原理课程的相关内容有了复习和巩固,对当时没有弄清楚的问题有了更深的认识,更加掌握了LASTVT集的生成原理,帮助我更好地理解了算符优先分析算法。程序运行结果:
程序源码:
#include #include #include usingnamespace std;
char lable[20];//文法终极符集
char String[20][10];//用于输入串的分析
int r;//文法规则个数
int r1;//转化后文法规则个数
char st[10][30];//用来存储文法规则
char last[10][10];//文法非终结符LASTVT集
int lflag[10] = { 0 };//标志第i个非终结符的LASTVT集是否已求出
//判断是否是终结符
int zhongjie(charc)//判断字符c是否是终极符 {
}
//求lastvt集
void lastvt(charc)//求LASTVT集 {
int i, j, k, m, n;for(i = 0;i
} return 0;if(c == lable[i])return 1;
} if(lflag[i] == 0){
n = last[i][0] + 1;m = 0;do {
if(st[i][m + 1] == ' ' || st[i][m + 1] == '|'){
if(zhongjie(st[i][m])){
} else {
if(zhongjie(st[i][m1];n++;last[i][n] = st[i][m];n++;
}
}
}
}
}
}
} m++;} while(st[i][m]!= ' ');last[i][n] = ' ';last[i][0] =--n;lflag[i] = 1;//转换 “|”
void transform()// 转换 带“|”的文法
{
for(i = 0;i
text[x][y] = st[i][0];y++;for(j = 1;st[i][j]!= ' ';j++){
if(st[i][j] == '|'){
} else { text[x][y] = st[i][j];y++;text[x][y] = ' ';x++;y = 0;text[x][y] = st[i][0];y++;text[x][y++] = '-';text[x][y++] = '>';char text[20][10];int i, j, l, x = 0, y = 0;x = 0;
}
} } } text[x][y] = ' ';x++;y = 0;r1 = x;printf(“转化后的文法为:n”);for(i = 0;i“
{
} String[i][0] = text[i][0];for(j = 3, l = 1;text[i][j]!= ' ';j++, l++)String[i][l] = text[i][j];String[i][l] = ' ';
后的转化文法)*/ printf(”%sn“, text[i]);//每个非终结符求lastvt void table2(){
}
//判断输入是文法是否规范 void judge(){
int i, j, k = 0;printf(”请输入文法规则数:“);scanf(”%d“, &r);printf(”请输入文法规则:n“);for(i = 0;i
for(int i = 0;i
}
}
/*last[i][0]表示LASTVT集中元素的个数*/
last[i][0] = 0;for(i = 0;i
} for(i = 0;i
} for(j = 0;st[i][j]!= ' ';j++){
} if((st[i][j]'Z')&& st[i][j]!= '-'&&st[i][j]!= lable[k++] = st[i][j];for(j = 0;st[i][j]!= ' ';j++){
} if(st[i][0]'Z'){
} if(st[i][j] >= 'A'&&st[i][j]
} if(st[i][j + 1] >= 'A'&&st[i][j + 1]
} printf(”不是算符文法!n“);exit(-1);printf(”不是算符文法!n“);exit(-1);'>'&&st[i][j]!= '|')//输出结果 void output(){
printf(”每个非终结符的LASTVT集为:n“);//输出每个非终结符的LASTVT集 for(i = 0;i
} {
} printf(”%c: ", st[i][0]);for(j = 0;j
}
void main(){
} int i = 1;while(i == 1){
} judge();transform();table2();output();initalize();memset(lable, 0, sizeof(lable));memset(String, 0, sizeof(String));memset(st,0,sizeof(st));memset(last, 0, sizeof(last));memset(lflag, 0, sizeof(lflag));
武 汉 纺 织 大 学编译原理课程设计实验报告学院:数学与计算机 专业:计算机 姓名: 班级: 学号:1 编译原理编译原理课设报告一、实验目的加强对编译程序的整体认识和了解,巩固《编......
编译原理课程设计报告课题名称:提交文档学生姓名:提交文档学生学号:同组 成 员 名 单:无指导 教 师 姓 名:指导教师评阅成绩:指导教师评阅意见:提交报告时间:年月日1.课程设计目标构......
经过一个星期的编译原理课程设计,本人在刘贞老师的指导下,顺利完成该课程设计。通过该课程设计,收获颇多。一、对实验原理有更深的理解通过该课程设计,掌握了什么是编译程序,编译......
《编译原理课程设计》教学大纲课程名称: 课程编号: 适用专业: 总 学 分: 总 周 时: 主 撰 人: 撰写日期:一、目的与任务通过程序设计上机调试程序实现算法,学习编译程序调试技巧和设......
关于《编译原理》课程设计的有关说明《编译原理》是计算机专业的一门重要的专业课程,其中包含大量软件设计思想。大家通过课程设计,实现一些重要的算法,或设计一个完整的编译程......
