Разбор выражений, когда операнд содержит более одного символа? - PullRequest
0 голосов
/ 13 января 2012

Я знаю, что есть много вопросов о разборе математических выражений.Я исследовал и изучил алгоритм преобразования строки инфикса в постфикс и использования строки постфикса для оценки значения выражения.

Но все найденные мной примеры касаются только случая, когда операндыВыражение содержит только один символ.Например "1 + 2".

Как вы поступите, если выражение "1 + 123"?Строка постфикса станет «1123+», поэтому она не может быть оценена.

Метод, который я думал, состоит в том, чтобы прочитать каждый символ операнда из строки инфикса и временно сохранить их в tempStack,И когда оператор читается, преобразуйте операнд в tempStack в целое число, а затем вставьте его в массив постфиксов.

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

Пожалуйста, предложите мне правильный способ сделать это.Я знаю, что есть API для этой работы, но я хочу изучить это, чтобы укрепить свои знания.

Большое спасибо.

1 Ответ

0 голосов
/ 13 января 2012

Вы не преобразуете ввод в «постфиксную строку», если вы не разделяете токены пробелами. Ввод "1 + 123" станет, например, «1 123 +». Но лучше поместить токены в стек, например, в массив строк. Если используемый вами язык поддерживает алгебраические типы данных, вы должны создать тип Token и поместить его в стек Token s.

...