Мне и нескольким другим было поручено создать Генератор таблиц правды для нашего первого года проекта.У нас есть большая часть проделанной работы, за исключением нескольких вещей, наиболее важной из которых является функция, которая фактически преобразует утверждения (например, p V q) в логические значения истинности.
Можно ли преобразовать строковый оператор с правильным синтаксисом аргумента c ++, например, "(p ||! Q)" (p и q - предварительно определенные переменные с соответствующими значениями), непосредственно в условие?
Мы рассмотрели маршрут многих условных операторов на основе того, что мы можем найти с помощью анализа строк и обработки переменных на основе результатов, но мне было интересно, существует ли гораздо более эффективный способ на самом деле это кодировать.Код разработан так, чтобы принимать практически любые входные данные для оператора таблицы истинности, преобразовывать его в правильный синтаксис c ++ и разделять оператор на компоненты.Тем не менее, есть немало вариантов, которые нужно учитывать, если бы мы делали это, находя определенные элементы и оперируя ими с помощью операторов if-then или switch.Если есть более эффективный маршрут, я открыт для предложений и приветствую любую критику нашего процесса.
В качестве наглядной демонстрации мы подумали об этом:
bool p=1, q=0;
string test= "(!p || q)"; // would supposedly return 0 if analyzed as a conditional statement
cout << endl << "Truth Table Generator Test" << endl;
cout << "p = " << p << endl << "q = " << q << endl;
cout << test << " = " << truthVal(test) // Used to signify the conversion from string to condition
Предположительновывод:
Truth Table Generator Test
p = 1
q = 0
(!p || q) = 0