文档介绍:编译原理实验报告
实验题目:语法分析器构造
指导教师:
姓名:
班级:
学号:
实验成绩:
实验题目
语法分析器
母则返回1
}
else
{
return 0;//如果不是字母则返回0
}
}
bool IsDigit(char ch)//判断当前ch是否为数字/////////////////////////////////////////////
{
if(ch>='0'&&ch<='9')
{
return 1;//如果ch是数字则返回1
}
else
{
return 0;//如果不是数字则返回0
}
}
/////////////////////求出终结符对应的优先表矩阵中的行列位置的函数//////////////////////
int Find_two_table(char ch)//求出对应的优先表的行数和列数的一个函数
{
switch(ch)
{
case '+': return 0;
case '-': return 1;
case '*': return 2;
case '/': return 3;
case '(': return 4;
case ')': return 5;
case 'i': return 6;
case '#': return 7;
default: return -1;
}
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////根据预处理求出算数分析的表达式存放在一个二维数组里面的一个函数///////////////
int Find_num_string(char num_string[100][100])
{
int i,j,flag;
char ch,old_ch=' ',string[20];
FILE *fp;
printf("您好!请您输入预处理程序的文件名称:");
gets(string);
if((fp=fopen(string,"r"))==NULL) //打开文件,如果打开失败则提示
{
printf("您打开的文件不存在,请您重新打开文件\n");//文件打开失败 提示打开的文件不存在
}
i=0;
while(!feof(fp))
{
j=0;
ch=fgetc(fp);
while(ch!='='&&!feof(fp))
{
old_ch=ch;
ch=fgetc(fp);
}
if(old_ch!='>'&&old_ch!='<'&&old_ch!='!')
{
ch=fgetc(fp);
if(ch!='=')
{
while(ch!=';'&&!feof(fp))
{
num_string[i][j]=ch;
ch=fgetc(fp);
j++;
}
i++;
num_string[i][j]='\0';
}
}
}
flag=i-1;
fclose(fp);
return flag;
}
/////////////////////////将求出的算术表达式转化成可输入串的函数/////////////////////////
void Convert_input_string(char num_string[100],char input_string[100])
{
int i=0,i_input_str=0;
char ch,flag_ch;
/////////////////////begin////////////////////////////////
ch=num_string[i];
while(ch!='\0')
{
if(IsDigit(ch))
{
flag_ch='0';
}
else
{
if(IsLetter(ch))
{
flag_ch='a';
}