Как создать простой парсер математических выражений?
Нужно создать простой парсер математических выражения (помимо стандартных +-*/ нужна поддержка мат функций - sin, cos, ln, exp и т.д)
Знаю, что тема далеко не новая и после прочтения многочисленных форумов остались такие вопросы:
1) многие советуют использовать польскую нотацию. К чему она здесь? (знаю, что это такое и как работает)
2) также люди советуют применять автоматы состояний. (также примерно знаю, как это работает, но совершенно не понимаю какие состояния могут быть в моей задаче - разве что считывание посимвольно и если несколько(хотя бы 2) букв стоит без разделителей, то переход к состоянию распознавания функции?
3) так как у меня это не основная часть проекта - буду использовать парсер для считывания уравнений и уже своими способами их решать, то очень интересует наиболее оптимизированное и менее затратное по времени решение.
А так делаю проект в учебных целях, то прошу не предлагать готовые для использования парсеры, а лучше советы, как реализовать это быстрее, не прочитывая пару тройку книжек о синтаксическом и лексическом анализе.
Для правильного вопроса надо знать половину ответа
Для создания своего парсера вам всё равно придётся изучить теорию. Начните с Книги фиолетового дракона, разберитесь в первых главах, постройте лексер на конечном автомате, составьте грамматику формул, которые хотите использовать, научитесь преобразовывать формулы из обычной записи в польскую.
Почему именно польскую? Потому что практически она содержит программу, пошагово выполняемую компьютером для вычисления формулы.