Pagini recente » Cod sursa (job #1260776) | Cod sursa (job #2108014) | Cod sursa (job #1728490) | Cod sursa (job #1995252) | Cod sursa (job #2359665)
#include <fstream>
#include <string>
#include <cstring>
using namespace std;
const int NMAX = 1005;
const int SIGMA = 26;
int n, m, p;
char aux[NMAX], s[NMAX], lit[NMAX];
bool val[SIGMA + 5];
bool expresie(), termen(), factor();
inline bool CheckTrue()
{
return (s[p] == 'T' && s[p + 1] == 'R' && s[p + 2] == 'U' && s[p + 3] == 'E');
}
inline bool CheckFalse()
{
return (s[p] == 'F' && s[p + 1] == 'A' && s[p + 2] == 'L' && s[p + 3] == 'S' && s[p + 4] == 'E');
}
inline bool CheckNot()
{
return (s[p] == 'N' && s[p + 1] == 'O' && s[p + 2] == 'T');
}
inline bool CheckAnd()
{
return (s[p] == 'A' && s[p + 1] == 'N' && s[p + 2] == 'D');
}
inline bool CheckOr()
{
return (s[p] == 'O' && s[p + 1] == 'R');
}
bool expresie()
{
bool x = termen();
while (CheckOr())
{
p += 2;
x = x | termen();
}
return x;
}
bool termen()
{
int x = factor();
while (CheckAnd())
{
p += 3;
x = x & factor();
}
return x;
}
bool factor()
{
bool x = 0;
if (s[p] == '(')
{
++p;
x = expresie();
++p;
}
else if (CheckNot())
{
p += 3;
x = 1 - factor();
}
else if (CheckTrue())
{
p += 4;
x = 1;
}
else if (CheckFalse())
{
p += 5;
x = 0;
}
else
{
x = val[s[p] - 'A'];
++p;
}
return x;
}
int main()
{
ifstream fin("bool.in");
ofstream fout("bool.out");
fin.getline(aux + 1, NMAX);
n = 0;
for (int i = 1;aux[i];++i)
if (aux[i] != ' ')
s[++n] = aux[i];
fin >> m;
fin.get();
fin.getline(lit + 1, NMAX);
string ans;
for (int i = 1;i <= m;++i)
{
val[lit[i] - 'A'] = !val[lit[i] - 'A'];
p = 1;
ans.push_back((char)(expresie() + '0'));
}
fout << ans << "\n";
fin.close();
fout.close();
return 0;
}