编译原理课程设计报告---集合LASTVT(P)构造算法的程序实现.docx
文本预览下载声明
计算机与信息学院
编译原理课程设计实验报告
专业班级
学生姓名及学号
课程教学班号
任课教师
实验指导教师
实验地点
学年第学期
设计目的及要求:
集合LASTVT(P构造算法的程序实现
设计内容及要求:构造一程序,实现教材 P.91的LASTVT(P)集合的构造算法。对任
一给定的算符文法 G,程序输出所有非终结符 P的LASTVT(P)。
设计内容:
实现教材上的算法,对于任意给定的算符文法,输出算符文法中所有的非终结符 P的
LASTV(P);
主要算法描述:
对于输入的文法,使用一个 char型二维数组进行存储,依次对每个非终结符求 LASTVT
输入输出形式:
输入:程序运行后从控制台输入算符文法,要指定输入的文法规则数目,且形式与教材文法
相同。
输出:在控制台输出每个非终结符的 LASTVT集,且将带有T的文法转换成多个文法。
总结:
本次课程设计我借鉴了第四学期编译原理课程的课程实验,通过本次课程设计我对编译原理
课程的相关内容有了复习和巩固,对当时没有弄清楚的问题有了更深的认识,更加掌握了
LASTVT集的生成原理,帮助我更好地理解了算符优先分析算法。
程序运行结果:
a
旦 r\Wi nd m 3 ex
rll
程序源码:
#inelude stdio.h
#inelude stdlib.h
#include iostream
using namespace std;
char lable[20];
//文法终极符集
char Strin g[20][10];
//用于输入串的分析
int r;
//文法规则个数
int r1;
//转化后文法规则个数
char st[10][30];
//用来存储文法规则
char last[10][10];
//文法非终结符LASTVT集
int lflag[10] = { 0 };
//标志第i个非终结符的LASTVT集是否已求岀
//判断是否是终结符
int zhongjie( char c) //判断字符c是否是终极符
{
int i;
for (i = 0; lable[i] != \0 ; i++)
{
if (c == lable[i])
return 1;
}
return 0;
}
// 求 lastvt 集
void lastvt(char c) // 求 LASTVT集
{
int i, j, k, m, n;
for (i = 0; ir; i++)
if (st[i][0] == c) break;
}
if (lflag[i] == 0)
n = last[i][0] + 1;
m = 0;
do
{
if
(st[i][m + 1] == \0 || st[i][m + 1] == |)
{
if (zh on gjie(st[i][m]))
{
last[i][ n] = st[i][m]; n++;
}
else
{
if (zhongjie(st[i][m - 1]))
{
last[i][ n] = st[i][m - 1];
n++;
}
if (st[i][m] != c)
{
lastvt(st[i][m]);
for (j = 0; jr; j++)
for (t = 0; tn; t++)
}|
x++;
x++;
}
m++;
} while (st[i][m] != \0);
las t[i][n]=
\0;
last[i][0] = --n;
lflag[i] = 1;
}
//转换“
void transform() // 转换带|的文法
{
char text[20][10];
int i, j, l, x = 0, y = 0;
x = 0;
for (i = 0; ir; i++)
{
text[x][y] = st[i][0];
y++;
for (j = 1; st[i][j] != \0; j++) {
if (st[i][j] == T)
{
text[x][y] = \0;
text [ x][y++]=-
text [ x][y++]=
text[x][y] = \0;
y = 0;
}
r1 = x;
printf(“转化后的文法为:\n);
for (i = 0; ix; i++)
//输出转化后的文法规则串
{
}
prin tf( %s\n, text[i]);
for (i = 0; ix; i++)
/*求每个终结符的推导结果(去掉-
后的转化文法)*/
{
Stri ng[i][0] = text[i][0];
for (j = 3, l = 1; text[i][j] != \0; j++, l++)
Strin g[i][l]=
text[i][j];
String[i][l]
显示全部