Такие задачи обычно делятся на две фазы: лексический анализ и синтаксический анализ.
Лексический анализ разбивает входные данные на поток токенов .В вашем случае токенами будут операторы ~
, or
, and
, ->
, <->
, переменные и значения true
, false
.Вы не упомянули их, но я думаю, что вы также хотите включить скобки в качестве токенов на вашем языке.Ваш язык настолько прост, что вы можете просто написать лексический анализатор самостоятельно, но такие инструменты, как flex или ragel могут вам помочь.
Синяктический анализ - это то, где вы дразнитесинтаксическая структура вашего ввода и выполнение любых необходимых вам действий (оцените предлоги в вашем случае).Синтаксический анализ более сложен, чем лексический анализ.Вы можете написать парсер рекурсивного спуска для этой задачи или использовать генератор парсера для написания кода для вас.Традиционный инструмент для этого называется bison , но он немного неуклюжий.Мне нравится еще один простой инструмент под названием генератор парсеров лимона , хотя он больше ориентирован на C, чем на C ++.