前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >M - 翻译布尔表达式【编译原理机测】

M - 翻译布尔表达式【编译原理机测】

作者头像
来杯Sherry
发布2023-05-25 13:58:11
2040
发布2023-05-25 13:58:11
举报
文章被收录于专栏:第一专栏第一专栏

M - 翻译布尔表达式 Description 大家都学过了布尔表达式的翻译,其中有一个拉链-回填技术,这次我们就练习这个技术。

Input

代码语言:javascript
复制
输入为一行字符串,例如: a < b or c < d and e < f
每个符号都用空格间隔。
其中逻辑运算符包含 and 和 or , 关系运算符包含 < 、> 、<= 、 >= 、== 、 != 。

Output

代码语言:javascript
复制
 假链跳到0,真链跳到1,表达式序号从100开始排。

Sample

代码语言:javascript
复制
Input 
a < b or c < d and e < f
Output 
100(j<,a,b,1)
101(j,_,_,102)
102(j<,c,d,104)
103(j,_,_,0)
104(j<,e,f,100)
105(j,_,_,103)
代码语言:javascript
复制
#include<bits/stdc++.h>
using namespace std;
vector<string>tt;
int main()
{
    int yes =1,no =100,num =100;
    string a;
    getline(cin,a);
    a += " end";//加个终止符号          !!!end前面容易漏空格!!!
    stringstream ss(a);//a赋值给ss,
    string s;
    while(ss >> s)//ss 以空格间隔输出 字符/字符串 并赋值给s
    {
        if(s == "or" || s == "end")// 习惯写成if(s =="or"||"end")
        {
            if(s == "or")no += 2;
            else no = 0;
            int n =tt.size();
            for (int i = 0; i < n-3; i += 3) //除了最后三个 肯定是end情况(即最后表达式决定最终表达式整体真假),其余的都是or和and情况,在循环里解决的是and情况
            {
                printf("%d(j%s,%s,%s,%d)\n",num,tt[i+1].c_str(),tt[i].c_str(),tt[i+2].c_str(),num+2);//and 真--通过 num 继续
                num++;
                printf("%d(j,_,_,%d)\n",num,no);//and 假--跳转
                no = num++;

            }
            printf("%d(j%s,%s,%s,%d)\n",num,tt[n-2].c_str(),tt[n-3].c_str(),tt[n-1].c_str(),yes);//or\end情况 真--跳转
            yes = num++;
            printf("%d(j,_,_,%d)\n",num,no);//end情况 为假 --跳转 ||or情况 为假的 --通过 no 继续
            num++;
            tt.clear();
            if(s == "end")break;//需要写终止条件


        }
        else if(s == "and")no +=2;//存一下,去or的情况下处理再一起处理
        else tt.push_back(s);
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档