Другие языки программирования и технологии

Нужна маленькая консультация по Visual Basic .NET

В общем, вот какая проблема. Решение у меня есть, но хочу спросить совета - может, кто-нибудь что-нибудь более дельное придумает.
В кратце задача такая:
Есть строка, вроде:
strExpression = "22 + 23 * 24"

Так вот, это целая строка. А мне нужно, чтобы она рассчиталась как математическое выражения. Что я намерен сделать:
превратить строку в массив Char, посимвольно проверять, по ходу проверки составлять число. 1 число из выражения составлено, принят знак, принято второе число - посчитано, учитывая знак, и следующее число уже использует вместо 1-ого числа, посчитанное ранее выражение. Знаю, путано объяснил, ну да ладно.
В общем, проблемы следующие:
1) Как быть с приоритетом знаков?
2) Как быть со скобками?

Чую, придется станцевать с бубном, и устроить лабиринт If - Else'ов...
Вместо горы If'ов легче и понятнее реализовать через метод рекурсивного спуска. Гугли, инфы полно. К примеру, самое доступное объяснение в серии статей Д. Креншоу "Пишем компилятор", на название не обращай внимание, главное понять принцип, он вполне подходит и для интерпретации мат. выражений.
Александр Гой
Александр Гой
71 257
Лучший ответ
Я думаю тебе стоит почитать про принципы написания подобного рода парсеров. Наверняка надо использовать регулярные выражения. А приоритет фигня. Главное найти скобик, операнды и сами знаки действий.
Миша Домашов
Миша Домашов
52 452
Таких программ много написано. Работают они так. Взять левый аргумент, взять правый аргумент. Вычислить результат.

Здесь везде применяется рекурсия а не if else.
При появлении скобок просто начинается вычисление аргумента. К примеру
5*(1+2)
Первый аргумент 5, второй 1+2. При умножении 1+2 автоматически рекурсивно рассматривается как левая часть и правая часть. Левая 1, правая 2. Сложилось, получилось 3. Дальше 5*3 = 15.

Строка рассматривается как набор символов, последовательно слева направо просматривается.
Nurlan Utegenov
Nurlan Utegenov
8 358
Посмотрите вот эту ссылку:
http://algolist.manual.ru/syntax/parsear.php
Первый алгоритм. Для вашей задачи как раз. При желании можно доработать, чтобы учитывалось старшинство операций.
Я в свое время делал дочке строковый калькулятор с помощью Microsoft VBScript Regular Expressions и Microsoft Script Control. Надо добавить в проект ссылки на них и кинуть на форму ScriptControl1. А потом все просто, ScriptControl сделает все сам:

Правда, это VB6, но к NET можно адаптировать.
SD
Self Destruktion
4 236