Задать вопрос
evgeniy8705
@evgeniy8705
Повелитель вселенной

Как сделать парсер мат. выражений в котором аргументы могут иметь длину больше чем 1?

В общем то разобрался с примером как делать вычисление математического выражения, но в на данный момент программа вычисляет примеры в которых аргументы находятся в диапазоне от 0 до 9.
Как сделать чтобы аргументы могли быть к примеру от 0 до 10к?
Можно было бы в проверке диапазона сравнивать со строкой "10000", но хз как вытащит сначала из входной строки то что нужно, непонятно например из строки 954+*, что брать, 9 или 95 к примеру.

Stack для преобразования инфиксной записи в постфиксную
Код для преобразования инфиксной записи в постфиксную
Парсер постфиксной записи и вычисление выражения
  • Вопрос задан
  • 498 просмотров
Подписаться 1 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 1
arusef
@arusef
Novice .NET dev
Для начала опишите минимальный язык ваших выражений:
<выражение> ::= <литерал> <оператор> <литерал>
<литерал> ::= <число> | (<выражение>)
<число> ::= [<число> | "-"]<0-9> // или всё, что парсится parseInt.
<оператор> ::= < + | - | * | / >

Теперь можно видеть структуру вашего выражения, и применить какой-то алгоритм парсинга:
Выражение начинается с литерала, значит, считываем символы из входной строки, пока не встретим пробел или \0: если это цифры, то наш литерал - число, если "(" - выражение, для которого нужно повторить всю процедуру, ожидая закрытия ")". Дальше считываем оператор. А потом снова литерал. Если что-то по правилам не подходит, то завершаемся с ошибкой.
Ну и каждый литерал может быть вычислен - число возвращает число, а выражение возвращает результат применения оператора к двум литералам. Общий результат - результат вычисления корневого выражения.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы