资源简介

使用C++ 实现的布尔表达式的递归下降 得到推导过程 词法分析 以及逆波兰式

资源截图

代码片段和文件信息

/*
                B   TB′
                B′  and T B′|ε
                T   FT ′
                T′  or  FT′|ε
                F   not F |true|false |(B)| i rop i
*/
#include 
#include 
#include 
int kk;
int tear=51;
int head=50;
int numberoftemp=0;
int numberofquad=0;
class quad
{
public:
char result[8];
char arg1[8];
char op[8];
char arg2[8];
    void print()
{
cout< }
}q[20];
void qemit(char a[]char b[]char c[]char d[])
{
strcpy(q[numberofquad].resulta);
strcpy(q[numberofquad].arg1b);
strcpy(q[numberofquad].opc);
strcpy(q[numberofquad].arg2d);
numberofquad++;
}
char* newtemp()
{
char *p;
int temp=numberoftemp;
p=new char[8];
p[0]=‘t‘;
for(int i=0;;i++)
{
p[++i]=char(temp%10+48);
temp=temp/10;
if (temp==0) {p[i+1]=‘\0‘; break;}
}
numberoftemp++;
return p;
};
struct word
{
char w[10];
void print()
{
cout< }
}wr[200];
struct nipolan
{
word nibolan[100];
} n;
int tcount=0;
int wcount=0;
char *rwtab[9]={“true““not““false““(““)““rop““i““or““and“};
class tuidao
{
public:
char a[10];
char b[10];
char c[10];
char d[10];
void emit(char *mchar *nchar *pchar *q);
void print() {cout<“<}t[100];
void tuidao::emit(char *mchar *nchar *pchar *q)
{

strcpy(am);
strcpy(bn);
strcpy(cp);
strcpy(dq);
}
class interpreter
{
   private:
ifstream SourceFile;
char buffercode[200];
int syn;
int current;
char token[8];
   public:
    void scaner();
void B();
void B1();
void T();
void F();
void T1();
void run();
void read();
void bolon();
void toword();
char *unit();
char *expression();
char *term();
void bolan();
void reset()
{
current=0;
};
void run1()
{
scaner();
expression();
};
};
void bolan()
{
strcpy(n.nibolan[tear].wq[0].arg1);tear++;
strcpy(n.nibolan[tear].wq[0].arg2);tear++;
strcpy(n.nibolan[tear].wq[0].op);tear++;
for(int i=0;i {
for (int j=i-1;j>=0;j--)
{
if (strcmp(q[i].arg1q[j].result)==0)
{
if (strcmp(q[i].arg2q[j+1].result)==0) {strcpy(n.nibolan[tear].wq[i].op);tear++;break;}
else
{
strcpy(n.nibolan[tear].wq[i].arg2);tear++;
strcpy(n.nibolan[tear].wq[i].op);tear++;
break;
}
}
if ((strcmp(q[i].arg1q[j].result)!=0)&&(strcmp(q[i].arg2q[j+1].result)==0))
{
strcpy(n.nibolan[tear].wq[i].op);tear++;
strcpy(n.nibolan[head].wq[i].arg1);head--;
break;
}
if ((strcmp(q[i].arg1q[j].result)!=0)&&(strcmp(q[i].arg2q[j].result)!=0))
{
strcpy(n.nibolan[tear].wq[i].arg1);tear++;
strcpy(n.nibolan[tear].wq[i].arg2);tear++;
strcpy(n.nibolan[tear].wq[i].op);tear++;
break;
}
}
  
}
}
void interpreter::toword()
{
current=0;
int i=0;
while (bufferco

评论

共有 条评论