Как сканировать через пользовательский ввод и разрезать его на куски в c ++? - PullRequest
0 голосов
/ 23 февраля 2019

Я делаю программу для оценки условного предложения (~ или и -> <->).В качестве пользователей вводятся пропозициональные переменные и истинные значения (true, false) и Предложение ;программа пройдет через входные данные и вернет значение истинности для всего предложения.

  • Например: если я установил p = true , q = true , r = false и ввод: p или q и r .
  • В любом случае я могу его нарезать *Сначала 1023 * q и r , затем обработка и возврат результата в результат (который равен false ), затем обработка следующего бита ( p или false ) ??И он должен продолжать вырезать биты (в правильном порядке приоритета) и возвращать их до тех пор, пока я не уйду - это одно истинное или ложное .

    • И чтоЯ должен использовать для хранения пользовательского ввода (массив, строка) ???

    • Любая помощь будет оценена!Спасибо.

1 Ответ

0 голосов
/ 23 февраля 2019

Такие задачи обычно делятся на две фазы: лексический анализ и синтаксический анализ.

Лексический анализ разбивает входные данные на поток токенов .В вашем случае токенами будут операторы ~, or, and, ->, <->, переменные и значения true, false.Вы не упомянули их, но я думаю, что вы также хотите включить скобки в качестве токенов на вашем языке.Ваш язык настолько прост, что вы можете просто написать лексический анализатор самостоятельно, но такие инструменты, как flex или ragel могут вам помочь.

Синяктический анализ - это то, где вы дразнитесинтаксическая структура вашего ввода и выполнение любых необходимых вам действий (оцените предлоги в вашем случае).Синтаксический анализ более сложен, чем лексический анализ.Вы можете написать парсер рекурсивного спуска для этой задачи или использовать генератор парсера для написания кода для вас.Традиционный инструмент для этого называется bison , но он немного неуклюжий.Мне нравится еще один простой инструмент под названием генератор парсеров лимона , хотя он больше ориентирован на C, чем на C ++.

...