парсинг математического выражения
как правильно делается парсинг математического выражения из строки?
например "2*(1+2/2)" мой ум сразу начал выдумывать пытки глазам. |
Ответ: парсинг математического выражения
Цитата:
Ищешь внутренние скобки, а в них потом по приоритету оператора. Для примера у тебя стек будет выглядеть так: / 2 2 + 1 * 2 В реалиации это немного сложнее. Смотри тут, но там как-то муторно, как-то другую статью читал, там было лучше реализовано : https://habrahabr.ru/post/122397/ |
Ответ: парсинг математического выражения
Парсинг собственно прост. Сначала разложи код на лексемы:
цифра(2), оператор(*), начало_выражения, цифра(1), оператор(+), цифра(2), оператор(/), цифра(2), конец_выражения. Пишется процедура, которая посимвольно проверяет строку на соответствие какой либо группе. Например проверяем в твоём случае: находим символ 2. Предполагаем что это Int. Далее стоит символ "*". Он не подходит под определение Int. Добавляем 2 в список лексем как Int. Потом * туда же добавляем как оператор. И так далее, до конца строки. Таким образом проверишь синтаксис выражения на простые ошибки. Вдруг кто-то напишет не 10+0.9, а 10+09. Остальное можно разложить в стек или построить дерево выражения. |
Ответ: парсинг математического выражения
все! сделал по польски
не сказал бы что это было легко, но я доволен. посмотреть и потестить можно здесь (выражение в самом низу) |
Часовой пояс GMT +4, время: 07:19. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot