Что вы хотите, может быть достигнуто, если вы реализуете парсер или используете библиотеку синтаксического анализа. В основном вам нужно разбить свое выражение на его компоненты, а затем интерпретировать их как логические блоки; ваши образцы содержат два типа, значения и операторы.
Давайте попробуем это на первом примере, True AND False
:
True <- value : Carry it over
AND <- operator : store
False <- Value : Use stored Operation on Carried value. Carry it over.
End of expression
Вещи становятся немного более сложным, если вы добавить группировку, потому что нужно хранить последовательности в структуре часто называют дерево выражения, потому что он иерархический и требует, чтобы вы анализировали каждую группу, начиная с «листьев» (наиболее удаленных от корня). Давайте будем использовать следующий пример:
False XOR (True AND False) OR (True OR False)
Выражение дерево будет выглядеть следующим образом:
Root Group : False XOR G1 OR G2
Group 1 : True AND False
Group 2 : True OR False
Использование вашей оценки выражений, вы должны сначала решить группы 1 и 2:
Root Group : False XOR G1 OR G2
Group 1 : False
Group 2 : True
Затем примените его к корневой группе:
Root Group : False XOR False OR True
False <- value : Carry it over
XOR <- operator : store
False <- value : Apply stored Operation (result True). Carry it over.
AND <- operator : store
False <- Value : Apply stored Operation (result True). Carry it over.
- End of expression
Вот как работает парсер выражений.
Edit: Irony, указал Фрод на комментарий на ваш вопрос, является хорошо известным языком анализатора, который может сделать трюк для вас. Я помню, как читал об этом некоторое время назад, но он был быстрее меня. =)
Это так сложно, как это» я когда-нибудь получу? Или вы можете иметь что-то вроде '(true или false) и true'? –
Проверьте эти ответы: http://stackoverflow.com/a/5029797/725844 – Frode
http://stackoverflow.com/a/13256816/932418 –