计算机学院实验报告(电子版)
课程名称: 编译原理
2018 年 11 月 25 日
指导老师
班 级
成 绩
实验名称
姓 名
学 号
实验类型
验证型
实验地点
一、 实验目的和要求:
掌握基本的语法分析过程。
二、 实验内容:
1.调试语法分析程序
用模拟语言书写的源程序进行语法分析。
2.分析程序的功能
分析程序的语法分析功能,运行出结果。
3.编写语法分析实验报告
三、实验环境:C++
三、 实验步骤(程序清单与测试数据):
#include
#include
#include
#include
char a[50] ,b[50],d[200],e[10];
char ch;
int n1,i1=0,flag=1,n=5;
int total=0;
int E();// 功能识别函数
int E1();// 功能识别函数
int T();// 功能识别函数
int G();// 功能识别函数
int S();// 功能识别函数
int F();// 功能识别函数
void input();// 输入函数
void input1();
void output();
int main()
{
int f,p,j=0;
char x;
d[0]='E';
d[1]='=';
d[2]='>';
d[3]='T';
d[4]='G';
d[5]='#';
printf("请输入字符串(长度<50,以#号结束)\n");
do{
scanf("%c",&ch);
a[j]=ch;
j++;
}while(ch!='#');
n1=j;
ch=b[0]=a[0];
printf("步骤\t 文法\t 分析串\t\t 分析字符\t 剩余串\n");
f=E1();
if (f==0) return 0;
if (ch=='#')
{
printf("accept\n");
p=0;
x=d[p];
while(x!='#') {
printf("%c",x);p=p+1;x=d[p];
}
}else {
printf("错误!\n");
printf("回车返回\n");
getchar();
getchar();
return 0;
}
printf("\n");
printf("回车返回\n");
getchar();
getchar();
}
int E1()
{
int f,t;
printf("%d\tE-->TG\t",total);total++;
flag=1;
input();
input1();
f=T();
if (f==0) return(0);
t=G();
if (t==0) return(0);
else return(1);
}
int E()
{
int f,t;
printf("%d\tE-->TG\t",total);total++;
e[0]='E';e[1]='=';e[2]='>';e[3]='T';e[4]='G';e[5]='#';
output();
flag=1;
input();
input1();
f=T();
if (f==0) return(0);
t=G();
if (t==0) return(0);
else return(1);
}
int T()
{
int f,t;
printf("%d\tT-->FS\t",total);total++;
e[0]='T';e[1]='=';e[2]='>';e[3]='F';e[4]='S';e[5]='#';
output();
flag=1;
input();
input1();
f=F();
if (f==0) return(0);
t=S();
if (t==0) return(0);
else return(1);
}
int
G()
{
int f;
if(ch=='+') {
b[i1]=ch;
printf("%d\tG-->+TG\t",total);total++;
e[0]='G';e[1]='=';e[2]='>';e[3]='+';e[4]='T';e[5]='G';e[6]='#';
output();
flag=0;
input();input1();
ch=a[++i1];
f=T();
if (f==0) return(0);
G();
return(1);
}
printf("%d\tG-->^\t",total);total++;
e[0]='G';e[1]='=';e[2]='>';e[3]='^';e[4]='#';
output();
flag=1;
input();input1();
return(1);
}
int S()
{
int f,t;
if(ch=='*') {
b[i1]=ch;printf("%d\tS-->*FS\t",total);total++;
e[0]='S';e[1]='=';e[2]='>';e[3]='*';e[4]='F';e[5]='S';e[6]='#';
output();
flag=0;
input();input1();
ch=a[++i1];
f=F();
if (f==0) return(0);
t=S();
if (t==0) return(0);
else return(1);}
printf("%d\tS-->^\t",total);total++;
e[0]='S';e[1]='=';e[2]='>';e[3]='^';e[4]='#';
output();
flag=1;
a[i1]=ch;
input();input1();
return(1);
}
int F()
{
int f;
if(ch=='(') {
b[i1]=ch;printf("%d\tF-->(E)\t",total);total++;
e[0]='F';e[1]='=';e[2]='>';e[3]='(';e[4]='E';e[5]=')';e[6]='#';
output();
flag=0;