2015-01-03 3 views
0

Я пытаюсь улучшить свой калькулятор Java, будучи в состоянии проверить ввод. Мой калькулятор может обрабатывать +, -, *, /,^и ofc(). Я пытаюсь понять, что лучший способ проверки ввода действителен.Базовый алгоритм проверки ввода калькулятора

действительный вход выглядит следующим образом:

10 + 2 + 2 * (5 + 6) 

недопустимый вход выглядит следующим образом:

10 $ 2 + 2 * (5 + 6) 

или

5 + 6 + (7 *) 

Вы получили идею.

+4

Ну, удачи с этим :) - был ли вопрос? –

ответ

0

Один простой, стандартный алгоритм для проверки синтаксиса ввода и опциональной оценки выражения - это shunting-yard algorithm Dijkstra, который был специально разработан для оценки выражений, подобных этим. Его также можно модифицировать для поддержки проверки синтаксиса.

Надеюсь, это поможет!

0

Вы ищете алгоритм синтаксического анализа. Я рекомендую один из двух подходов: регулярное выражение или токенизация.

Regex был бы самым оптимизированным подходом, у java много библиотек Regex. Вы можете сформировать регулярное выражение (Regex) для соответствия действительному входу калькулятора. С головы до ног я не могу предоставить вам хорошее регулярное выражение, но я уверен, что поиск в Google предоставит вам хотя бы начало. Шаблон Regex может проверять ввод калькулятора, в основном выполняя для вас алгоритм синтаксического анализа.

Для активации ввода с использованием строкового токенизатора (при вводе строки) потребуется алгоритм синтаксического анализа. По сути, вы бы алгоритмически составляли грамматику и проверяли последовательность токенов, чтобы соответствовать грамматике. Например:

Num -> оператор | скобка -> Num -> ...... и так далее

Я рекомендую использовать стек для отслеживания даже круглых скобок. Каждый раз, когда вы сталкиваетесь с парнем, нажмите или поместите заполнитель в стек/из стека. Пустой стек в конце ввода означает даже parens. Left paren: push placeholder; right paren: pop placeholder.

Смежные вопросы