📄 digui.h
字号:
#include <string.h>
#include <stdio.h>
char buff[50]; //输入串
int pointer = 0; //指示当前分析的字符
char currChar; //当前分析的字符
int step = 0; //当前分析的步骤数
bool tagOfError = false; //出错标志
//FIRST集合
char First_E[2] = {'(','i'} ,
First_E1[3] = {'+','-','n'},
First_T[2] = {'(','i'},
First_T1[3] = {'*','/','n'},
First_F[2] = {'(','i'},
First_A[2] = {'+','-'},
First_M[2] = {'*','/'};
//FOLLOW集合
char Follow_T1[4] = {'+','-',')','#'} ,
Follow_E1[2] = {')','#'};
//递归函数声明
void E();
void E1();
void T();
void T1();
void F();
void A();
void M();
//向前读入一个字符
void advance()
{
currChar = buff[pointer++];
}
//判断当前字符currChar是否在First[]中
bool is_InBuff(char First[])
{
char *pdest;
pdest = strchr(First,currChar); //strchr:从字符串First中寻找字符currChar第一次出现的位置
if(pdest != NULL)
return true;
else
return false;
}
//报错处理
void repError(char* ch)
{
if (!tagOfError)
printf("Error occurs in step %s !\n",ch);
tagOfError = true;
}
//E()函数
void E()
{
if(!tagOfError)
printf("%5d E %4c \n",step++,currChar);
if(is_InBuff(First_T)){
T();
E1();
}
else
repError("E");
}
//E'()函数
void E1()
{
if(!tagOfError)
printf("%5d E' %4c \n",step++,currChar);
if(is_InBuff(First_A)){
A();
T();
E1();
}
else if(is_InBuff(Follow_E1))
return;
else
repError("E'");
}
//T()函数
void T()
{
if(!tagOfError)
printf("%5d T %4c \n",step++,currChar);
if(is_InBuff(First_F))
{
F();
T1();
}
else
repError("T");
}
//T'()函数
void T1()
{
if(!tagOfError)
printf("%5d T' %4c \n",step++,currChar);
if(is_InBuff(First_M))
{
M();
F();
T1();
}
else if(is_InBuff(Follow_T1))
return;
else
repError("T'");
}
//F()函数
void F()
{
if(!tagOfError)
printf("%5d F %4c \n",step++,currChar);
if(currChar == '(')
{
advance() ;
E();
if (currChar== ')')
{
advance();
return ;
}
else
repError("F");
}
else if(currChar == 'i')
{
advance();
return ;
}
else
repError("F") ;
}
//A()函数
void A()
{
if(!tagOfError)
printf("%5d A %4c \n",step++,currChar);
if(currChar == '+')
{
advance();
return ;
}
else if(currChar == '-')
{
advance();
return ;
}
else
repError("A");
}
//M()函数
void M()
{
if(!tagOfError)
printf("%5d M %4c \n",step++,currChar);
if(currChar == '*')
{
advance();
return ;
}
else if(currChar == '/')
{
advance();
return ;
}
else
repError("M");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -