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

其他范文 时间:2020-02-28 23:18:03 收藏本文下载本文
【www.daodoc.com - 其他范文】

编译原理课程设计报告集合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));

下载编译原理课程设计报告集合LASTVT(P)构造算法的程序实现word格式文档
下载编译原理课程设计报告集合LASTVT(P)构造算法的程序实现.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

    热门文章
      整站推荐
        点击下载本文