编译原理课程设计报告集合LASTVT(P)构造算法的程序实现_编译程序构造实验报告

2020-02-28 其他范文 下载本文

编译原理课程设计报告集合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.课程设计目标构......

编译原理课程设计心得体会

经过一个星期的编译原理课程设计,本人在刘贞老师的指导下,顺利完成该课程设计。通过该课程设计,收获颇多。一、对实验原理有更深的理解通过该课程设计,掌握了什么是编译程序,编译......

《编译原理课程设计》教学大纲

《编译原理课程设计》教学大纲课程名称: 课程编号: 适用专业: 总 学 分: 总 周 时: 主 撰 人: 撰写日期:一、目的与任务通过程序设计上机调试程序实现算法,学习编译程序调试技巧和设......

合肥工业大学编译原理课程设计

关于《编译原理》课程设计的有关说明《编译原理》是计算机专业的一门重要的专业课程,其中包含大量软件设计思想。大家通过课程设计,实现一些重要的算法,或设计一个完整的编译程......

《编译原理课程设计报告集合LASTVT(P)构造算法的程序实现.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
编译原理课程设计报告集合LASTVT(P)构造算法的程序实现
点击下载文档
相关专题 编译程序构造实验报告 报告 算法 课程设计 编译程序构造实验报告 报告 算法 课程设计
[其他范文]相关推荐
[其他范文]热门文章
下载全文