编译原理-翻译布尔表达式

来源:互联网 发布:python 爬虫 二手房 编辑:程序博客网 时间:2024/06/04 17:56

0x01 题目描述

Input 多组输入,每组输入为一行字符串,例如: a < b or c < d and e < f每个符号都用空格间隔Output 假链跳到0,真链跳到1,表达式序号从100开始排。Example Input1a < b or c < d and e < fExample Output100(j<,a,b,1)101(j,_,_,102)102(j<,c,d,104)103(j,_,_,0)104(j<,e,f,100)105(j,_,_,103)

0x02 代码

#include<bits/stdc++.h>using namespace std;string str;int jump,tmp;vector<string>tt;int main(){    int n;    scanf("%d\n",&n);    while(n--)    {        getline(cin,str);        str += " end";        jump = 1;tmp = 0;        string s;        stringstream ss(str);        int id = 100;        while(ss >> s)        {            if(s == "or")            {                printf("%d(j%s,%s,%s,%d)\n",id,tt[1].c_str(),tt[0].c_str(),tt[2].c_str(),jump);                jump = id++;                printf("%d(j,_,_,%d)\n",id,id+1);                id ++;                tt.clear();            }            else if(s == "and")            {                printf("%d(j%s,%s,%s,%d)\n",id,tt[1].c_str(),tt[0].c_str(),tt[2].c_str(),id+2);                id ++;                printf("%d(j,_,_,%d)\n",id,tmp);                tmp = id++;                tt.clear();            }            else if(s == "end")            {                printf("%d(j%s,%s,%s,%d)\n",id,tt[1].c_str(),tt[0].c_str(),tt[2].c_str(),jump);                id ++;                printf("%d(j,_,_,%d)\n",id,tmp);                tt.clear();            }            else                tt.push_back(s);        }    }    return 0;}
原创粉丝点击