可以看看这个LL(1)文法分析器怎么改吗

输入是正确的都匹配失败,咋改啊

img

#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--;
                }
            }
        }
    }
}