• 大小: 5KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2021-10-21
  • 语言: C/C++
  • 标签:

资源简介

已知文法G[S]: S->AT A->BU T->+AT|$ U->*BU|$ B->(S)|m 其中,$表示空串。对该文法构造预测分析表,并手工构造预测分析程序,对输入串m+m*m#进行语法分析,并根据栈的变化状态输出分析过程。

资源截图

代码片段和文件信息

#include 
#include 
using namespace std;
char msg[50];
class mystack{
public:
char element[100];
int size;
void clear()
{
size=0;
}
int length()
{
return size;
}
char top()
{
if(size>0)
return element[size-1];
}

void pop()
{
if(size>0)
{
size--;
element[size]=‘\0‘;
}
}

void push(char st)
{
element[size++]=st;
element[size]=‘\0‘;
}

mystack()
{
size=0;
}
};

mystack sc;

//
void printstack()
{
printf(“%s\t“sc.element);
}
//

char s[80];//输入的字符串
int l;//输入字符串的长度
struct any
{
    char a1[10];
    char a2[10];
    char a3[10];
    char a4[10];
    char a5[10];
    char a6[10];
};
struct any S={“E““E““TA““TA““E““E“};
struct any A={“E““E““UB““UB““E““E“};
struct any B={“E““E““m““)s(““E““E“};
struct any U={“““UB*““TA““TA““E“““};
struct any T={“TA+““E““E““E““E“““};

////////////////////////////////////////////////////////

bool comp(int& b)
{
    char d;
    //int i;
    d=sc.top();
if(d==‘+‘||d==‘*‘||d==‘m‘||d==‘(‘||d==‘)‘)
{
if(s[b]==d)
{
msg[0]=s[b];
strcpy(msg+1“匹配“);
b++;
sc.pop();
return true;
}
else
{
printf(“ERROR!“);
            return false;
}
}
//----------------------------------------------
    else if(d==‘S‘)
    {
      if(s[b]==‘m‘)
      {   
    strcpy(msg“S->AT“);
            sc.pop();
            for(int i=0;i             {
                    sc.push(S.a3[i]);
             }
//strcpy(msg“S->AT“);
return true;
      }
      else if(s[b]==‘(‘)
      {
    strcpy(msg“S->AT“);
            sc.pop();
            for(int i=0;i            {
                    sc.push(S.a4[i]);
             }
//strcpy(msg“S->AT“);
return true;
      } 
      else
      {
            printf(“ERROR!“);
            return false;
      }
    }
//---------------------------------------------
    else if(d==‘A‘)
    {
      if(s[b]==‘m‘)
      {
    strcpy(msg“A->BU“); 
            sc.pop();
            for(int i=0;i             {
                    sc.push(A.a3[i]);
             }
//strcpy(msg“A->BU“);
return true;
      }
      else if(s[b]==‘(‘)
      {
    strcpy(msg“A->BU“);    
            sc.pop();
            for(int i=0;i            {
sc.push(A.a4[i]);
            }
//strcpy(msg“A->BU“);
return true;
      } 
      else
      {
            printf(“ERROR!“);
            return false;
      }
    }
//-------------------------------------------
    

评论

共有 条评论

相关资源