⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bool.cpp

📁 用LL(1)法对布尔表达式的语法分析,中间代码用四元式表示
💻 CPP
字号:
#include<iostream>
#include <string>
#include <stack>
using namespace std;

stack<char> s; 
void sub_E();
void sub_T();
void sub_F();
void GEQ(char);
int     num=0;
char    QT[10][4],T='A',c;


void sub_E()
{
sub_T();
R1: if(c=='^')
{
    c=getchar();
    sub_T();
    GEQ('^');
    goto R1;
}


}
void sub_T()
{
sub_F();
R4: if(c=='&')
{
    c=getchar();
    sub_F();
    GEQ('&');
    goto R4;
}

}
void sub_F()
{
if(c>='a'&&c<='z')
{
    s.push(c);
    c=getchar();
}
else if(c=='(')
{
    c=getchar();
    sub_E();
    if(c==')')
     c=getchar();
    else
    {
    cout<<"括号不匹配!"<<endl;
     exit(0);
    }
}
else
{
   cout<<"非法符号!"<<endl;
    exit(0);
}
}
void GEQ(char m)
{
QT[num][0]=m;
QT[num][2]=s.top();s.pop();
QT[num][1]=s.top();s.pop();
QT[num][3]=T;
s.push(T);
num++;
T++;
}
void PRINT()
{
printf("您输入的表达式所对应的四元式为:\n");
for(int i=0;i<num;i++)
{
    printf("(");
    printf("%c",QT[i][0]);
    if(QT[i][1]<='Z'&&QT[i][1]>='A')
     printf("\t%c%d",'t',QT[i][1]-'A'+1);
    else
     printf("\t%c",QT[i][1]);
    if(QT[i][2]<='Z'&&QT[i][1]>='A')
     printf("\t%c%d",'t',QT[i][2]-'A'+1);
    else
     printf("\t%c",QT[i][2]);
    if(QT[i][3]<='Z'&&QT[i][1]>='A')
     printf("\t%c%d",'t',QT[i][3]-'A'+1);
    else
     printf("\t%c",QT[i][3]);
    printf(")\n");
}
}


void main()
{

cout<<"----表达式应由小写字母、运算符及小括号组成,并以\"#\"结束----\n";
cout<<"请输入表达式:";
c=getchar();
sub_E();
if(c=='#')
    PRINT();
else
{
    cout<<"无结束符或漏写运算符!";
    exit(0);
}
getchar();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -