📄 编译原理实验2.txt
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//子函数声明
int E();
int A();
int B();
int C();
//定义全局变量
char input[20];//存待分析的字符串
int k = 0;//控制待分析字符串的位置下标
int E()
{
int flage = 0;
if(input[k]=='#')//是否已结束
return 1;
else
{
//匹配
if(input[k]!='e')
return 0;
else
{
k+=1;
//调用带返回值的函数B(),返回1则继续,否则error
flage = B();
if(flage==0)
return 0;
else
{
k+=1;
if(input[k]!='a')
return 0;
else
{
k++;
//调用带返回值的函数A(),返回1则继续,否则error
flage = A();
if(flage==0)
return 0;
else
return 1;
}
}
}
}
}
//根据A->a|bAcB规则进行匹配
int A()
{
int flaga = 0;//局部变量,作判断之用
//是否结束
if(input[k]=='#')
return 1;
else
{
if(input[k]=='a')
return 1;
else if(input[k]=='b')
{
k++;
flaga = A();
if(flaga == 0)
return 0;
else
{
k++;
if(input[k]!='c')
return 0;
else
{
k++;
flaga = B();
if(flaga == 0)
return 0;
else
return 1;
}
}
}
else
return 0;
}
}
//根据B->dEd|aC规则进行匹配
int B()
{
int flagb = 0;
if(input[k]=='d')
{
k++;
flagb = E();
if(flagb==0)
return 0;
else
{
k++;
if(input[k]=='d')
return 1;
else
return 0;
}
}
else if(input[k]=='a')
{
k++;
flagb = C();
if(flagb==0)
return 0;
else
return 1;
}
else
return 0;
}
//根据C->d|dC规则进行匹配
int C()
{
int flagc = 0;
if(input[k]=='e')
return 1;
else if(input[k]=='d')
{
k++;
flagc = C();
if(flagc==0)
return 0;
else
return 1;
}
else
return 0;
}
//主函数
void main()
{
int i = 0;
int flag = 0;
char ch;
//输出 说明性文字,增强程序的可读性
printf("*--------------递归子程序法分析器---------------*\n");
printf("\n");
printf("\n");
//本程序只能分析下面文法的句子,其他需另行编程实现,方法相同
printf("*-------------本程序分析的文法如下:-------------*\n");
printf("* G[E]: *\n");
printf("* E->eBaA *\n");
printf("* A->a|bAcB *\n");
printf("* B->dEd|aC *\n");
printf("* C->e|dC *\n");
printf("*-----------------------------------------------*\n");
printf("\n");
printf("请输入待分析的字符串(以'#'结束):");
printf("\n");
//输入待分析的字符串,用循环来实现,将其存入input数组中
do
{
ch = getchar();
input[i] = ch;
i++;
}while(ch!='#');//字符串以#结束
//分析开始,因为文法的识别符号为E ,故先调用此函数
flag = E();
//返回1,则说明是文法的句子
if(flag==1)
printf("\t\t--- 此字符串是该文法的句子!\n");
//否则不是
else
printf("\t\t--- 此字符串不是该文法的句子!\n");
printf("\n");
printf("\t分析结束!\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -