输入是正确的都匹配失败,咋改啊
#include
#include
#define Max1 6
#define Max2 7
#define Max3 4
#define MAXSIZE 10
typedef struct
{
char base[MAXSIZE];
int top;
}sqstack;
void InitStack(sqstack &S)
{
S.top=0;
}
void Push(sqstack &S,char e)
{
if (S.top == MAXSIZE)
return;
S.base[S.top] = e;
S.top++;
}
char GetTop(sqstack &S)
{
if (S.top==0)
return -1;
return S.base[S.top-1];
}
char Pop(sqstack &S)
{
if (S.top==0)
return 0;
S.top--;
return S.base[S.top];
}//栈
char AnalyseTable[Max1][Max2][Max3] =
{ {"","i","+","*","(",")","#"},
{"E","TA","","","TA","",""},
{"A","","+TA","","","@","@"},
{"T","FB","","","FB","",""},
{"B","","@","*FB","","@","@"},
{"F","i","","","(E)","",""}
};
char str[9] = "";
int ip=0;
int LineOfStackTop(char ch)
{
for (int i=1;iif (AnalyseTable[i][0][0] == ch)
{
return i;
break;
}
}
return 0;
}
int ColumOfCurrentChar(char ch)
{
for (int i=1;iif (AnalyseTable[0][i][0] == ch)
{
return i;
break;
}
}
return 0;
}
void main()
{
printf("请输入字符串(以#结束):");
scanf("%s", str,sizeof(str));
sqstack S;
InitStack(S);
Push(S,'#');
Push(S,'S');
int line = 0;
int colum = 0;
while (S.top!=0)
{
if ((GetTop(S) == str[ip])&&str[ip]!='#')
{
Pop(S);
ip++;
}
else if ((GetTop(S) == str[ip]) && str[ip] == '#')
{
printf("匹配成功! ");
break;
}
else
{
line = LineOfStackTop(Pop(S));
colum = ColumOfCurrentChar(str[ip]);
if (strcmp(AnalyseTable[line][colum], "") ==0||(line == 0 || colum == 0))
{
printf("匹配失败!");
break;
}
else {
int k = 0;
while (AnalyseTable[line][colum][k] != 0)
k++;
k--;
while (k >= 0 && AnalyseTable[line][colum][k] != '@')
{
Push(S, AnalyseTable[line][colum][k]);
k--;
}
}
}
}
}
根据LL(1)语法分析算法的基本思想,设计一个对给定文法进行LL(1)语法分析的程序,并用C语言编程实现。对于给定的输入串,能够识别该串是否位给定文法的句型。